diff options
author | Lemmih <lemmih@gmail.com> | 2006-03-07 07:37:36 +0000 |
---|---|---|
committer | Lemmih <lemmih@gmail.com> | 2006-03-07 07:37:36 +0000 |
commit | d1545b69b5fbcad3a95b86d9da389235da832b6d (patch) | |
tree | 54cd3c4a631ef38994dda9ef3692f5619feb60dc /ghc/compiler/iface | |
parent | abf158bf9c7c076a1cb560ffa5309e840b09e384 (diff) | |
download | haskell-d1545b69b5fbcad3a95b86d9da389235da832b6d.tar.gz |
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.
Diffstat (limited to 'ghc/compiler/iface')
-rw-r--r-- | ghc/compiler/iface/MkIface.lhs | 17 |
1 files changed, 5 insertions, 12 deletions
diff --git a/ghc/compiler/iface/MkIface.lhs b/ghc/compiler/iface/MkIface.lhs index 638e2687dd..cafb6b6692 100644 --- a/ghc/compiler/iface/MkIface.lhs +++ b/ghc/compiler/iface/MkIface.lhs @@ -336,18 +336,11 @@ mkIface hsc_env maybe_old_iface ----------------------------- -writeIfaceFile :: HscEnv -> ModLocation -> ModIface -> Bool -> IO () --- Write the interface file, if necessary -writeIfaceFile hsc_env location new_iface no_change_at_all - | no_change_at_all = return () - | ghc_mode == Interactive = return () - | ghc_mode == JustTypecheck = return () - | otherwise - = do { createDirectoryHierarchy (directoryOf hi_file_path) - ; writeBinIface hi_file_path new_iface } - where - ghc_mode = ghcMode (hsc_dflags hsc_env) - hi_file_path = ml_hi_file location +writeIfaceFile :: ModLocation -> ModIface -> IO () +writeIfaceFile location new_iface + = do createDirectoryHierarchy (directoryOf hi_file_path) + writeBinIface hi_file_path new_iface + where hi_file_path = ml_hi_file location ----------------------------- |