Fix warnings in ByteCodeInstr
[ghc-hetmet.git] / compiler / ghci / ByteCodeInstr.lhs
index adb47c8..84472f2 100644 (file)
@@ -4,6 +4,8 @@
 ByteCodeInstrs: Bytecode instruction definitions
 
 \begin{code}
+{-# OPTIONS_GHC -funbox-strict-fields #-}
+
 module ByteCodeInstr ( 
        BCInstr(..), ProtoBCO(..), bciStackUse, BreakInfo (..) 
   ) where
@@ -25,10 +27,8 @@ import VarSet
 import PrimOp
 import SMRep
 
-import GHC.Ptr
-
 import Module (Module)
-import GHC.Prim
+import GHC.Exts
 
 
 -- ----------------------------------------------------------------------------
@@ -55,9 +55,9 @@ data BCInstr
    = STKCHECK  Int
 
    -- Push locals (existing bits of the stack)
-   | PUSH_L    Int{-offset-}
-   | PUSH_LL   Int Int{-2 offsets-}
-   | PUSH_LLL  Int Int Int{-3 offsets-}
+   | PUSH_L    !Int{-offset-}
+   | PUSH_LL   !Int !Int{-2 offsets-}
+   | PUSH_LLL  !Int !Int !Int{-3 offsets-}
 
    -- Push a ptr  (these all map to PUSH_G really)
    | PUSH_G       Name
@@ -95,12 +95,13 @@ data BCInstr
    | SLIDE     Int{-this many-} Int{-down by this much-}
 
    -- To do with the heap
-   | ALLOC_AP  Int     -- make an AP with this many payload words
-   | ALLOC_PAP Int Int -- make a PAP with this arity / payload words
-   | MKAP      Int{-ptr to AP is this far down stack-} Int{-# words-}
-   | MKPAP     Int{-ptr to PAP is this far down stack-} Int{-# words-}
-   | UNPACK    Int     -- unpack N words from t.o.s Constr
-   | PACK      DataCon Int
+   | ALLOC_AP  !Int     -- make an AP with this many payload words
+   | ALLOC_AP_NOUPD !Int -- make an AP_NOUPD with this many payload words
+   | ALLOC_PAP !Int !Int -- make a PAP with this arity / payload words
+   | MKAP      !Int{-ptr to AP is this far down stack-} !Int{-number of words-}
+   | MKPAP     !Int{-ptr to PAP is this far down stack-} !Int{-number of words-}
+   | UNPACK    !Int    -- unpack N words from t.o.s Constr
+   | PACK      DataCon !Int
                        -- after assembly, the DataCon is an index into the
                        -- itbl array
    -- For doing case trees
@@ -121,7 +122,7 @@ data BCInstr
    | CASEFAIL
    | JMP              LocalLabel
 
-   -- For doing calls to C (via glue code generated by ByteCodeFFI)
+   -- For doing calls to C (via glue code generated by ByteCodeFFI, or libffi)
    | CCALL            Int      -- stack frame size
                      (Ptr ())  -- addr of the glue code
 
@@ -140,7 +141,7 @@ data BCInstr
 data BreakInfo 
    = BreakInfo
    { breakInfo_module :: Module
-   , breakInfo_number :: Int
+   , breakInfo_number :: {-# UNPACK #-} !Int
    , breakInfo_vars   :: [(Id,Int)]
    , breakInfo_resty  :: Type
    }
@@ -193,6 +194,7 @@ instance Outputable BCInstr where
 
    ppr (SLIDE n d)           = text "SLIDE   " <+> int n <+> int d
    ppr (ALLOC_AP sz)         = text "ALLOC_AP   " <+> int sz
+   ppr (ALLOC_AP_NOUPD sz)   = text "ALLOC_AP_NOUPD   " <+> int sz
    ppr (ALLOC_PAP arity sz)  = text "ALLOC_PAP   " <+> int arity <+> int sz
    ppr (MKAP offset sz)      = text "MKAP    " <+> int sz <+> text "words," 
                                                <+> int offset <+> text "stkoff"
@@ -219,7 +221,7 @@ instance Outputable BCInstr where
    ppr ENTER                 = text "ENTER"
    ppr RETURN               = text "RETURN"
    ppr (RETURN_UBX pk)       = text "RETURN_UBX  " <+> ppr pk
-   ppr (BRK_FUN breakArray index info) = text "BRK_FUN" <+> text "<array>" <+> int index <+> ppr info 
+   ppr (BRK_FUN _breakArray index info) = text "BRK_FUN" <+> text "<array>" <+> int index <+> ppr info 
 
 -- -----------------------------------------------------------------------------
 -- The stack use, in words, of each bytecode insn.  These _must_ be
@@ -257,6 +259,7 @@ bciStackUse PUSH_APPLY_PPPP{}         = 1
 bciStackUse PUSH_APPLY_PPPPP{}   = 1
 bciStackUse PUSH_APPLY_PPPPPP{}          = 1
 bciStackUse ALLOC_AP{}            = 1
+bciStackUse ALLOC_AP_NOUPD{}      = 1
 bciStackUse ALLOC_PAP{}           = 1
 bciStackUse (UNPACK sz)           = sz
 bciStackUse LABEL{}              = 0