Re: [GHC] #13776: -ddump-splices produces unnecessarily qualified names for tuple and list types

Previous Topic Next Topic
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view

Re: [GHC] #13776: -ddump-splices produces unnecessarily qualified names for tuple and list types

Soham Chowdhury
That sounds great! I never got around to working on this myself, feel free :)

On Sun, Mar 18, 2018, 00:45 GHC <[hidden email]> wrote:
#13776: -ddump-splices produces unnecessarily qualified names for tuple and list
        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`,
 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
 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`),
 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
 global name, i.e `NameG NameSpace PkgName ModName`.
 And the corresponding `RdrName` generated by `thRdrNameGuesses` is also
 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.


 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 [bad exit code] (normal)

 ghci/linking/  ghcilink006 [bad exit code] (normal)

 th/                 -- (gcc: error trying to exec 'cc1plus':
                               --  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: <>
GHC <>
The Glasgow Haskell Compiler

ghc-devs mailing list
[hidden email]