[GHC] #15617: Unboxed tuples/sum error message on `a = show 5` in expression evaluation and interactive modes
GHC
ghc-devs at haskell.org
Thu Jan 3 11:48:23 UTC 2019
#15617: Unboxed tuples/sum error message on `a = show 5` in expression evaluation
and interactive modes
-------------------------------------+-------------------------------------
Reporter: ChaiTRex | Owner:
| JulianLeviston
Type: bug | Status: new
Priority: normal | Milestone: 8.6.1
Component: Compiler | Version: 8.6.1-beta1
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
Type of failure: Poor/confusing | Unknown/Multiple
error message | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Comment (by JulianLeviston):
To refresh my brain (and so I don't have to re-load this into my brain
over and over)... as per above, but with annotation:
1. In `ghc/Main.hs`, the `main` function is the entry point for all of
GHC.
1. The line with `(mode, argv3, flagWarnings) <- parseModeFlags argv2`
parses the mode flags out. There are two possible cases here: either we
have a `Left preStartupMode` or `Right postStartupMode`. The
`preStartupMode` case is only for doing things before GHC starts up;
things such as outputting the version number, etc (ie not executing code).
So, we're only interested in the `Right postStartupMode` variant.
1. Continuing on, we start `GHC` by using `GHC.runGhc` with `mbMinusB`,
then pull the flags out with `GHC.getSessionDynFlags`. We then `case` on
`postStartupMode` which itself is an `Either` as well... it's similar to
above, but here we have some `preLoadMode` values that (I'm assuming) can
only be got when `GHC` has started up. Things like showing info, ghc
usage, ghci usage and printing the flags. Here, though, we're only
interested in the `Right` variant again — the `postLoadMode` value gets
pattern matched out and;
1. next this hits the `main'` function as: `main' postLoadMode dflags
argv3 flagWarnings`. This function then cases on `postLoadMode`... and
the only branches of this we're really interested in is `DoInteractive
-> (CompManager, HscInterpreted, LinkInMemory)` and `DoEval _ ->
(CompManager, HscInterpreted, LinkInMemory)`... there are five other
matches, but they're make, backpack, something called MkDependHS and also
AbiHash, then the catchall (ie `_`). Essentially we want to block
optimisation on the interactive and eval cases. So, this matches `(mode,
lang, link)` to the values `(CompManager, HscInterpreted, linkInMemory)`
respectively for both of these cases (interactive and eval).
1. Next we use a series of `let` expressions building up dflags1, dflags2,
dflags3, etc. then, at the very end, we have another case stateament
inside of an evaluation of `handleSourceError` to handle source code
errors... again, the only two cases we care about are `DoInteractive` and
`DoEval exprs`, both of which evalute to `ghciUI` expressions.
Respectively: `ghciUI hsc_env dflags6 srcs Nothing` and `ghciUI hsc_env
dflags6 srcs $ Just $ reverse exprs`.
1. The `ghciUI` function pulls the flags out after initializing the
plugins with the `hsc_env` and `dflags0`, then sets this into the session
with `GHC.setSessionDynFlags`. We then call the `interactiveUI` function
with args thusly: `interactiveUI defaultGhciSettings srcs maybe_expr`.
This function comes from the `GHCi.UI` module in `ghc/GHCi/UI.hs`.
So, we want to investigate `interactiveUI` in `ghc/GHCi/UI.hs`.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15617#comment:17>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list