X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fghci%2FByteCodeInstr.lhs;h=3f57d187dc4825308e22b6b3b87969a17034e327;hb=23db9fc03dc87d8389fb4a096c33a1b8db95cd05;hp=b76207e2e7defb09241b7808ac76937a2ca0e046;hpb=ab22f4e6456820c1b5169d75f5975a94e61f54ce;p=ghc-hetmet.git diff --git a/compiler/ghci/ByteCodeInstr.lhs b/compiler/ghci/ByteCodeInstr.lhs index b76207e..3f57d18 100644 --- a/compiler/ghci/ByteCodeInstr.lhs +++ b/compiler/ghci/ByteCodeInstr.lhs @@ -5,12 +5,14 @@ ByteCodeInstrs: Bytecode instruction definitions \begin{code} module ByteCodeInstr ( - BCInstr(..), ProtoBCO(..), bciStackUse + BCInstr(..), ProtoBCO(..), bciStackUse, BreakInfo (..) ) where #include "HsVersions.h" #include "../includes/MachDeps.h" +import ByteCodeItbls ( ItblPtr ) + import Outputable import Name import Id @@ -24,6 +26,10 @@ import SMRep import GHC.Ptr +import Module (Module) +import GHC.Prim + + -- ---------------------------------------------------------------------------- -- Bytecode instructions @@ -38,7 +44,7 @@ data ProtoBCO a -- what the BCO came from protoBCOExpr :: Either [AnnAlt Id VarSet] (AnnExpr Id VarSet), -- malloc'd pointers - protoBCOPtrs :: [Ptr ()] + protoBCOPtrs :: [Either ItblPtr (Ptr ())] } type LocalLabel = Int @@ -127,6 +133,22 @@ data BCInstr | RETURN -- return a lifted value | RETURN_UBX CgRep -- return an unlifted value, here's its rep + -- Breakpoints + | BRK_FUN (MutableByteArray# RealWorld) Int BreakInfo + +data BreakInfo + = BreakInfo + { breakInfo_module :: Module + , breakInfo_number :: Int + , breakInfo_vars :: [(Id,Int)] + } + +instance Outputable BreakInfo where + ppr info = text "BreakInfo" <+> + parens (ppr (breakInfo_module info) <+> + ppr (breakInfo_number info) <+> + ppr (breakInfo_vars info)) + -- ----------------------------------------------------------------------------- -- Printing bytecode instructions @@ -171,6 +193,8 @@ instance Outputable BCInstr where 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" + ppr (MKPAP offset sz) = text "MKPAP " <+> int sz <+> text "words," + <+> int offset <+> text "stkoff" ppr (UNPACK sz) = text "UNPACK " <+> int sz ppr (PACK dcon sz) = text "PACK " <+> ppr dcon <+> ppr sz ppr (LABEL lab) = text "__" <> int lab <> colon @@ -182,16 +206,17 @@ instance Outputable BCInstr where ppr (TESTEQ_D d lab) = text "TESTEQ_D" <+> double d <+> text "__" <> int lab ppr (TESTLT_P i lab) = text "TESTLT_P" <+> int i <+> text "__" <> int lab ppr (TESTEQ_P i lab) = text "TESTEQ_P" <+> int i <+> text "__" <> int lab - ppr (JMP lab) = text "JMP" <+> int lab ppr CASEFAIL = text "CASEFAIL" - ppr ENTER = text "ENTER" - ppr RETURN = text "RETURN" - ppr (RETURN_UBX pk) = text "RETURN_UBX " <+> ppr pk + ppr (JMP lab) = text "JMP" <+> int lab ppr (CCALL off marshall_addr) = text "CCALL " <+> int off <+> text "marshall code at" <+> text (show marshall_addr) ppr (SWIZZLE stkoff n) = text "SWIZZLE " <+> text "stkoff" <+> int stkoff <+> text "by" <+> int n + 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 "" <+> int index <+> ppr info -- ----------------------------------------------------------------------------- -- The stack use, in words, of each bytecode insn. These _must_ be @@ -247,6 +272,7 @@ bciStackUse RETURN{} = 0 bciStackUse RETURN_UBX{} = 1 bciStackUse CCALL{} = 0 bciStackUse SWIZZLE{} = 0 +bciStackUse BRK_FUN{} = 0 -- These insns actually reduce stack use, but we need the high-tide level, -- so can't use this info. Not that it matters much.