Rationalise GhcMode, HscTarget and GhcLink
authorSimon Marlow <simonmar@microsoft.com>
Wed, 11 Apr 2007 10:18:02 +0000 (10:18 +0000)
committerSimon Marlow <simonmar@microsoft.com>
Wed, 11 Apr 2007 10:18:02 +0000 (10:18 +0000)
commit3c22606bf3114747deeae0a8a1d5832ee834d9d1
tree61198f844162dcd74394403d2c499e8112f17155
parentd55443e6ab108ae0570bd92dc19de09b07b4ebfa
Rationalise GhcMode, HscTarget and GhcLink

This patch cleans up the GHC API, and adds some functionality: we can
now compile to object code inside GHCi.

Previously we had:

  data GhcMode
    = BatchCompile
    | Interactive
    | OneShot
    | JustTypecheck
    | MkDepend

  data HscTarget
    = HscC
    | HscAsm
    | HscJava
    | HscInterpreted
    | HscNothing

There was redundancy here; if GhcMode is Interactive, then only
HscInterpreted makes sense, and JustTypecheck required HscNothing.
Now we have:

  data GhcMode
    = CompManager       -- ^ --make, GHCi, etc.
    | OneShot           -- ^ ghc -c Foo.hs
    | MkDepend          -- ^ ghc -M, see Finder for why we need this

and HscTarget remains as before.

Previously GhcLink looked like this:

  data GhcLink = NoLink | StaticLink

Now we have:

  data GhcLink = NoLink | LinkBinary | LinkInMemory

The idea being that you can have an HscTarget of HscAsm (for example)
and still link in memory.

There are two new flags:

  -fobject-code selects object code as the target (selects
                either -fasm or -fvia-C, whichever is the default)
                This can be usd with ':set' in GHCi, or on the command line.

  -fbyte-code   sets byte-code as the target.  Only works in GHCi.
                One day maybe this could save the byte code in a file
                when used outside GHCi.

  (names chosen for consistency with -fno-code).

Changes to the GHC API: newSession no longer takes the GhcMode
argument.  The GhcMode defaults to CompManager, which is usually what
you want.  To do JustTypecheck now, just set hscTarget to HscNothing.
12 files changed:
compiler/deSugar/Desugar.lhs
compiler/deSugar/DsBreakpoint.lhs
compiler/iface/MkIface.lhs
compiler/main/DriverPipeline.hs
compiler/main/DynFlags.hs
compiler/main/GHC.hs
compiler/main/Main.hs
compiler/rename/RnNames.lhs
compiler/typecheck/TcRnDriver.lhs
docs/users_guide/flags.xml
docs/users_guide/ghci.xml
docs/users_guide/phases.xml