Deduplicate one-shot/make compile paths.
authorEdward Z. Yang <ezyang@cs.stanford.edu>
Sat, 3 Oct 2015 05:05:24 +0000 (22:05 -0700)
committerEdward Z. Yang <ezyang@cs.stanford.edu>
Tue, 6 Oct 2015 02:18:31 +0000 (19:18 -0700)
commit427f8a15c385de486d479989ecfbb6f82699f405
tree9193e505f6cc3901ce2aa4fdb206cb0dd92a7f28
parent5ca1d312b4a0a4a118b476d8ed18d4769d205415
Deduplicate one-shot/make compile paths.

Summary:
We had a duplicate copy of the code for --make and for -c
which was a pain.  The call graph looked something like this:

    compileOne -> genericHscCompileGetFrontendResult -> genericHscFrontend
                                   hscCompileOneShot ---^

with genericHscCompileGetFrontendResult and hscCompileOneShot
duplicating logic for deciding whether or not recompilation
was needed.

This patchset fixes it, so now everything goes through this call-chain:

    compileOne (--make entry point)
        Calls hscIncrementCompile, invokes the pipeline to do codegen
        and sets up linkables.
    hscIncrementalCompile (-c entry point)
        Calls hscIncrementalFrontend, and then simplifying,
        desugaring, and writing out the interface.
    hscIncrementalFrontend
        Performs recompilation avoidance, if recompilation needed,
        does parses typechecking.

I also cleaned up some of the MergeBoot nonsense by introducing
a FrontendResult type.

NB: this BREAKS #8101 again, because I can't unconditionally desugar
due to Haddock barfing on lint, see #10600

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
Test Plan: validate

Reviewers: simonpj, bgamari, simonmar, austin

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D1302
compiler/main/DriverPipeline.hs
compiler/main/Hooks.hs
compiler/main/HscMain.hs
compiler/typecheck/TcRnTypes.hs
testsuite/tests/driver/all.T