Reorganisation of the source tree
[ghc-hetmet.git] / ghc / compiler / main / DriverPhases.hs
diff --git a/ghc/compiler/main/DriverPhases.hs b/ghc/compiler/main/DriverPhases.hs
deleted file mode 100644 (file)
index 6e94531..0000000
+++ /dev/null
@@ -1,229 +0,0 @@
------------------------------------------------------------------------------
---  $Id: DriverPhases.hs,v 1.38 2005/05/17 11:01:59 simonmar Exp $
---
--- GHC Driver
---
--- (c) The University of Glasgow 2002
---
------------------------------------------------------------------------------
-
-module DriverPhases (
-   HscSource(..), isHsBoot, hscSourceString,
-   Phase(..),
-   happensBefore, eqPhase, anyHsc, isStopLn,
-   startPhase,         -- :: String -> Phase
-   phaseInputExt,      -- :: Phase -> String
-
-   isHaskellishSuffix, 
-   isHaskellSrcSuffix,
-   isObjectSuffix,
-   isCishSuffix,
-   isExtCoreSuffix,
-   isDynLibSuffix,
-   isHaskellUserSrcSuffix,
-   isSourceSuffix,
-
-   isHaskellishFilename, 
-   isHaskellSrcFilename,
-   isObjectFilename,
-   isCishFilename,
-   isExtCoreFilename,
-   isDynLibFilename,
-   isHaskellUserSrcFilename,
-   isSourceFilename         -- :: FilePath -> Bool
- ) where
-
-import Util            ( suffixOf )
-import Panic           ( panic )
-
------------------------------------------------------------------------------
--- Phases
-
-{-
-   Phase of the           | Suffix saying | Flag saying   | (suffix of)
-   compilation system     | ``start here''| ``stop after''| output file
-   
-   literate pre-processor | .lhs          | -             | -
-   C pre-processor (opt.) | -             | -E            | -
-   Haskell compiler       | .hs           | -C, -S        | .hc, .s
-   C compiler (opt.)      | .hc or .c     | -S            | .s
-   assembler              | .s  or .S     | -c            | .o
-   linker                 | other         | -             | a.out
--}
-
-data HscSource
-   = HsSrcFile | HsBootFile | ExtCoreFile
-     deriving( Eq, Ord, Show )
-       -- Ord needed for the finite maps we build in CompManager
-
-
-hscSourceString :: HscSource -> String
-hscSourceString HsSrcFile   = ""
-hscSourceString HsBootFile  = "[boot]"
-hscSourceString ExtCoreFile = "[ext core]"
-
-isHsBoot :: HscSource -> Bool
-isHsBoot HsBootFile = True
-isHsBoot other      = False
-
-data Phase 
-       = Unlit HscSource
-       | Cpp   HscSource
-       | HsPp  HscSource
-       | Hsc   HscSource
-       | Cc
-       | HCc           -- Haskellised C (as opposed to vanilla C) compilation
-       | Mangle        -- assembly mangling, now done by a separate script.
-       | SplitMangle   -- after mangler if splitting
-       | SplitAs
-       | As
-       | CmmCpp        -- pre-process Cmm source
-       | Cmm           -- parse & compile Cmm code
-
-       -- The final phase is a pseudo-phase that tells the pipeline to stop.
-       -- There is no runPhase case for it.
-       | StopLn        -- Stop, but linking will follow, so generate .o file
-  deriving (Eq, Show)
-
-anyHsc :: Phase
-anyHsc = Hsc (panic "anyHsc")
-
-isStopLn :: Phase -> Bool
-isStopLn StopLn = True
-isStopLn other  = False
-
-eqPhase :: Phase -> Phase -> Bool
--- Equality of constructors, ignoring the HscSource field
--- NB: the HscSource field can be 'bot'; see anyHsc above
-eqPhase (Unlit _)   (Unlit _)  = True
-eqPhase (Cpp   _)   (Cpp   _)  = True
-eqPhase (HsPp  _)   (HsPp  _)  = True
-eqPhase (Hsc   _)   (Hsc   _)  = True
-eqPhase Cc         Cc          = True
-eqPhase HCc        HCc         = True
-eqPhase Mangle     Mangle      = True
-eqPhase SplitMangle SplitMangle = True
-eqPhase SplitAs            SplitAs     = True
-eqPhase As         As          = True
-eqPhase CmmCpp     CmmCpp      = True
-eqPhase Cmm        Cmm         = True
-eqPhase StopLn     StopLn      = True
-eqPhase _          _           = False
-
--- Partial ordering on phases: we want to know which phases will occur before 
--- which others.  This is used for sanity checking, to ensure that the
--- pipeline will stop at some point (see DriverPipeline.runPipeline).
-StopLn `happensBefore` y = False
-x      `happensBefore` y = after_x `eqPhase` y || after_x `happensBefore` y
-       where
-         after_x = nextPhase x
-
-nextPhase :: Phase -> Phase
--- A conservative approximation the next phase, used in happensBefore
-nextPhase (Unlit sf)   = Cpp  sf
-nextPhase (Cpp   sf)   = HsPp sf
-nextPhase (HsPp  sf)   = Hsc  sf
-nextPhase (Hsc   sf)   = HCc
-nextPhase HCc          = Mangle
-nextPhase Mangle       = SplitMangle
-nextPhase SplitMangle  = As
-nextPhase As           = SplitAs
-nextPhase SplitAs      = StopLn
-nextPhase Cc           = As
-nextPhase CmmCpp       = Cmm
-nextPhase Cmm          = HCc
-nextPhase StopLn       = panic "nextPhase: nothing after StopLn"
-
--- the first compilation phase for a given file is determined
--- by its suffix.
-startPhase "lhs"      = Unlit HsSrcFile
-startPhase "lhs-boot" = Unlit HsBootFile
-startPhase "hs"       = Cpp   HsSrcFile
-startPhase "hs-boot"  = Cpp   HsBootFile
-startPhase "hscpp"    = HsPp  HsSrcFile
-startPhase "hspp"     = Hsc   HsSrcFile
-startPhase "hcr"      = Hsc   ExtCoreFile
-startPhase "hc"       = HCc
-startPhase "c"        = Cc
-startPhase "cpp"      = Cc
-startPhase "C"        = Cc
-startPhase "cc"       = Cc
-startPhase "cxx"      = Cc
-startPhase "raw_s"    = Mangle
-startPhase "split_s"  = SplitMangle
-startPhase "s"        = As
-startPhase "S"        = As
-startPhase "o"        = StopLn
-startPhase "cmm"      = CmmCpp
-startPhase "cmmcpp"   = Cmm
-startPhase _          = StopLn    -- all unknown file types
-
--- This is used to determine the extension for the output from the
--- current phase (if it generates a new file).  The extension depends
--- on the next phase in the pipeline.
-phaseInputExt (Unlit HsSrcFile)   = "lhs"
-phaseInputExt (Unlit HsBootFile)  = "lhs-boot"
-phaseInputExt (Unlit ExtCoreFile) = "lhcr"
-phaseInputExt (Cpp   _)          = "lpp"       -- intermediate only
-phaseInputExt (HsPp  _)                  = "hscpp"     -- intermediate only
-phaseInputExt (Hsc   _)          = "hspp"      -- intermediate only
-       -- NB: as things stand, phaseInputExt (Hsc x) must not evaluate x
-       --     because runPipeline uses the StopBefore phase to pick the
-       --     output filename.  That could be fixed, but watch out.
-phaseInputExt HCc                = "hc"  
-phaseInputExt Cc                 = "c"
-phaseInputExt Mangle             = "raw_s"
-phaseInputExt SplitMangle        = "split_s"   -- not really generated
-phaseInputExt As                 = "s"
-phaseInputExt SplitAs            = "split_s"   -- not really generated
-phaseInputExt CmmCpp             = "cmm"
-phaseInputExt Cmm                = "cmmcpp"
-phaseInputExt StopLn             = "o"
-#ifdef ILX
-phaseInputExt Ilx2Il             = "ilx"
-phaseInputExt Ilasm              = "il"
-#endif
-
-haskellish_src_suffixes      = haskellish_user_src_suffixes ++
-                              [ "hspp", "hscpp", "hcr", "cmm" ]
-haskellish_suffixes          = haskellish_src_suffixes ++ ["hc", "raw_s"]
-cish_suffixes                = [ "c", "cpp", "C", "cc", "cxx", "s", "S" ]
-extcoreish_suffixes          = [ "hcr" ]
-haskellish_user_src_suffixes = [ "hs", "lhs", "hs-boot", "lhs-boot" ]  -- Will not be deleted as temp files
-
--- Use the appropriate suffix for the system on which 
--- the GHC-compiled code will run
-#if mingw32_TARGET_OS || cygwin32_TARGET_OS
-objish_suffixes     = [ "o", "O", "obj", "OBJ" ]
-#else
-objish_suffixes     = [ "o" ]
-#endif
-
-#ifdef mingw32_TARGET_OS
-dynlib_suffixes = ["dll", "DLL"]
-#elif defined(darwin_TARGET_OS)
-dynlib_suffixes = ["dylib"]
-#else
-dynlib_suffixes = ["so"]
-#endif
-
-isHaskellishSuffix     s = s `elem` haskellish_suffixes
-isHaskellSrcSuffix     s = s `elem` haskellish_src_suffixes
-isCishSuffix           s = s `elem` cish_suffixes
-isExtCoreSuffix        s = s `elem` extcoreish_suffixes
-isObjectSuffix         s = s `elem` objish_suffixes
-isHaskellUserSrcSuffix s = s `elem` haskellish_user_src_suffixes
-isDynLibSuffix        s = s `elem` dynlib_suffixes
-
-isSourceSuffix suff  = isHaskellishSuffix suff || isCishSuffix suff
-
-isHaskellishFilename     f = isHaskellishSuffix     (suffixOf f)
-isHaskellSrcFilename     f = isHaskellSrcSuffix     (suffixOf f)
-isCishFilename           f = isCishSuffix           (suffixOf f)
-isExtCoreFilename        f = isExtCoreSuffix        (suffixOf f)
-isObjectFilename         f = isObjectSuffix         (suffixOf f)
-isHaskellUserSrcFilename f = isHaskellUserSrcSuffix (suffixOf f)
-isDynLibFilename        f = isDynLibSuffix         (suffixOf f)
-isSourceFilename        f = isSourceSuffix         (suffixOf f)
-
-