• David Himmelstrup's avatar
    More work thrown at HscMain. · d1545b69
    David Himmelstrup authored
    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.