More work thrown at HscMain.
authorLemmih <lemmih@gmail.com>
Tue, 7 Mar 2006 07:37:36 +0000 (07:37 +0000)
committerLemmih <lemmih@gmail.com>
Tue, 7 Mar 2006 07:37:36 +0000 (07:37 +0000)
commitd1545b69b5fbcad3a95b86d9da389235da832b6d
tree54cd3c4a631ef38994dda9ef3692f5619feb60dc
parentabf158bf9c7c076a1cb560ffa5309e840b09e384
More work thrown at HscMain.

MkIface.writeIfaceFile doesn't check GhcMode anymore. All it does
is what the name say: write an interface to disk.
I've refactored HscMain so the logic is easier to manage. That means
we can avoid running the simplifier when typechecking (: And best of
all, HscMain doesn't use GhcMode at all, anymore!

The new HscMain intro looks like this:

It's the task of the compilation proper to compile Haskell, hs-boot and
core files to either byte-code, hard-code (C, asm, Java, ect) or to
nothing at all (the module is still parsed and type-checked. This
feature is mostly used by IDE's and the likes).
Compilation can happen in either 'one-shot', 'batch', 'nothing',
or 'interactive' mode. 'One-shot' mode targets hard-code, 'batch' mode
targets hard-code, 'nothing' mode targets nothing and 'interactive' mode
targets byte-code.
The modes are kept separate because of their different types and meanings.
In 'one-shot' mode, we're only compiling a single file and can therefore
discard the new ModIface and ModDetails. This is also the reason it only
targets hard-code; compiling to byte-code or nothing doesn't make sense
when we discard the result.
'Batch' mode is like 'one-shot' except that we keep the resulting ModIface
and ModDetails. 'Batch' mode doesn't target byte-code since that require
us to return the newly compiled byte-code.
'Nothing' mode has exactly the same type as 'batch' mode but they're still
kept separate. This is because compiling to nothing is fairly special: We
don't output any interface files, we don't run the simplifier and we don't
generate any code.
'Interactive' mode is similar to 'batch' mode except that we return the
compiled byte-code together with the ModIface and ModDetails.
ghc/compiler/iface/MkIface.lhs
ghc/compiler/main/DriverPipeline.hs
ghc/compiler/main/HscMain.lhs