That sounds great! I never got around to working on this myself, feel free :)
On Sun, Mar 18, 2018, 00:45 GHC <[email protected]> wrote: > #13776: -ddump-splices produces unnecessarily qualified names for tuple > and list > types > -------------------------------------+------------------------------------- > Reporter: RyanGlScott | Owner: mrkgnao > Type: bug | Status: new > Priority: normal | Milestone: > Component: Template Haskell | Version: 8.0.1 > Resolution: | Keywords: newcomer > Operating System: Unknown/Multiple | Architecture: > | Unknown/Multiple > Type of failure: None/Unknown | Test Case: > Blocked By: | Blocking: > Related Tickets: | Differential Rev(s): > Wiki Page: | > -------------------------------------+------------------------------------- > > Comment (by ckoparkar): > > I'd like to work on this, if that's OK with @mrkgnao. > > I have a patch on my local machine > that does the right thing for the examples posted in the > description (and some tests: `th/T3319`, `th/T5700`, > `th/TH_foreignInterruptible`). > While I work on submitting that on Phabricator, I wanted to post a summary > here and get some early feedback. > > > (1) It seems that `showName` doesn't play a role in pretty-printing the > splices > with `-ddump-splices`. Instead, the `Outputable` instances in GHC do most > of the > work. Specifically, `Outputable RdrName` is responsible for printing out > the fully > qualified names in question. > > (2) When the Renamer typechecks & runs a splice (`RnSplice.runRnSplice`), > it > converts the splice to `HsSyn RdrName` (hence the `Outputable RdrName`). > `TcSplice.lookupThName` is involved in the process, which converts > a `TH.Name` to `Name` via `Convert.thRdrNameGuesses`. > > (3) For primitives like `[]`, `(:)` etc. `TH.dataToQa` generates a fully > qualified > global name, i.e `NameG NameSpace PkgName ModName`. > And the corresponding `RdrName` generated by `thRdrNameGuesses` is also > fully > qualified (`Orig Module OccName`). But this is not what we want for built- > in syntax. > > (4) So the "patch" is a simple change to modify this behavior. If > `thOrigRdrName` is > dealing with built-in syntax, it returns an `Exact Name` instead. > > {{{#!haskell > > thOrigRdrName :: String -> TH.NameSpace -> PkgName -> ModName -> RdrName > thOrigRdrName occ th_ns pkg mod = > let occ' = mk_occ (mk_ghc_ns th_ns) occ > in case isBuiltInOcc_maybe occ' of > Just name -> nameRdrName name > Nothing -> (mkOrig $! (mkModule (mk_pkg pkg) (mk_mod mod))) $! occ' > > }}} > > I ran the testsuite, and apart from some `perf` tests, almost everything > else worked. > > These tests fail: > > {{{ > ghci/linking/ghcilink003.run ghcilink003 [bad exit code] (normal) > > ghci/linking/ghcilink006.run ghcilink006 [bad exit code] (normal) > > th/T13366.run -- (gcc: error trying to exec 'cc1plus': > execvp: > -- No such file or directory) > }}} > > but there's a good chance that this is unrelated to the patch. > > > Does the overall approach seem reasonable ? I'll submit a patch soon. > > -- > Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/13776#comment:5> > GHC <http://www.haskell.org/ghc/> > The Glasgow Haskell Compiler >
_______________________________________________ ghc-devs mailing list [email protected] http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
