Another round of External Core fixes
[ghc-hetmet.git] / compiler / codeGen / CgMonad.lhs
index 6885912..6a26e66 100644 (file)
@@ -8,6 +8,13 @@ See the beginning of the top-level @CodeGen@ module, to see how this
 monadic stuff fits into the Big Picture.
 
 \begin{code}
+{-# OPTIONS -w #-}
+-- The above warning supression flag is a temporary kludge.
+-- While working on this module you are encouraged to remove it and fix
+-- any warnings in the module. See
+--     http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings
+-- for details
+
 module CgMonad (
        Code,   -- type
        FCode,  -- type
@@ -73,12 +80,13 @@ import Id
 import VarEnv
 import OrdList
 import Unique
-import Util
+import Util()
 import UniqSupply
-import FastString
+import FastString()
 import Outputable
 
 import Control.Monad
+import Data.List
 
 infixr 9 `thenC`       -- Right-associative!
 infixr 9 `thenFC`
@@ -233,6 +241,7 @@ flattenCgStmts id stmts =
            where (block,blocks) = flatten stmts
        (CgFork fork_id stmts : ss) -> 
           flatten (CgFork fork_id stmts : CgStmt stmt : ss)
+        (CgStmt {} : _) -> panic "CgStmt not seen as ordinary"
 
   flatten (s:ss) = 
        case s of
@@ -246,6 +255,7 @@ flattenCgStmts id stmts =
 isJump (CmmJump _ _) = True
 isJump (CmmBranch _) = True
 isJump (CmmSwitch _ _) = True
+isJump (CmmReturn _) = True
 isJump _ = False
 
 isOrdinaryStmt (CgStmt _) = True
@@ -702,7 +712,8 @@ labelC :: BlockId -> Code
 labelC id = emitCgStmt (CgLabel id)
 
 newLabelC :: FCode BlockId
-newLabelC = do { id <- newUnique; return (BlockId id) }
+newLabelC = do { u <- newUnique
+               ; return $ BlockId u }
 
 checkedAbsC :: CmmStmt -> Code
 -- Emit code, eliminating no-ops
@@ -734,9 +745,9 @@ emitData sect lits
   where
     data_block = CmmData sect lits
 
-emitProc :: CmmInfo -> CLabel -> CmmFormals -> [CmmBasicBlock] -> Code
+emitProc :: CmmInfo -> CLabel -> CmmFormalsWithoutKinds -> [CmmBasicBlock] -> Code
 emitProc info lbl args blocks
-  = do  { let proc_block = CmmProc info lbl args blocks
+  = do  { let proc_block = CmmProc info lbl args (ListGraph blocks)
        ; state <- getState
        ; setState $ state { cgs_tops = cgs_tops state `snocOL` proc_block } }
 
@@ -749,6 +760,8 @@ emitSimpleProc lbl code
 
 getCmm :: Code -> FCode Cmm
 -- Get all the CmmTops (there should be no stmts)
+-- Return a single Cmm which may be split from other Cmms by
+-- object splitting (at a later stage)
 getCmm code 
   = do { state1 <- getState
        ; ((), state2) <- withState code (state1 { cgs_tops  = nilOL })