Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC Commits: 12f64118 by Wolfgang Jeltsch at 2026-08-15T06:31:12-04:00 Add support for textual output of bytecode file content - - - - - 16 changed files: - + changelog.d/show-byte-code - compiler/GHC/ByteCode/Serialize.hs - + compiler/GHC/ByteCode/Show.hs - compiler/ghc.cabal.in - docs/users_guide/using.rst - ghc/GHC/Driver/Session/Mode.hs - ghc/Main.hs - + testsuite/tests/show-bytecode/Example.hs - + testsuite/tests/show-bytecode/Makefile - + testsuite/tests/show-bytecode/all.T - + testsuite/tests/show-bytecode/normalize - + testsuite/tests/show-bytecode/show-bytecode-breakpoints.stdout - + testsuite/tests/show-bytecode/show-bytecode-breakpoints.stdout-javascript-unknown-ghcjs - + testsuite/tests/show-bytecode/show-bytecode-hpc.stdout - + testsuite/tests/show-bytecode/show-bytecode-vanilla.stdout - + testsuite/tests/show-bytecode/show-bytecode-vanilla.stdout-javascript-unknown-ghcjs Changes: ===================================== changelog.d/show-byte-code ===================================== @@ -0,0 +1,8 @@ +section: bytecode +synopsis: Add support for textual output of bytecode file content +issues: #26909 +mrs: !16386 +description: { + There is now an option `--show-byte-code` for outputting relevant + content of a bytecode file in textual form. +} ===================================== compiler/GHC/ByteCode/Serialize.hs ===================================== @@ -6,7 +6,7 @@ {- | This module implements the serialization of bytecode objects to and from disk. -} module GHC.ByteCode.Serialize - ( writeBinByteCode, readBinByteCode + ( writeBinByteCode, readBinByteCode, readOnDiskModuleByteCode , ModuleByteCode(..) , BytecodeLibX(..) , BytecodeLib ===================================== compiler/GHC/ByteCode/Show.hs ===================================== @@ -0,0 +1,577 @@ +{-# LANGUAGE MagicHash #-} +{-# LANGUAGE ImportQualifiedPost #-} +{-# LANGUAGE RecordWildCards #-} + +-- | This module implements the output of textual information about the contents +-- of bytecode files. It is the backbone of the @--show-byte-code@ option. +module GHC.ByteCode.Show (showByteCode) where + +-- The output generated by 'showByteCode' shall follow some general guidelines. +-- See Note [Guidelines for the output of @--show-byte-code@] for details. + +-- Prelude +import GHC.Prelude + +-- Bytecode +import GHC.ByteCode.Types + ( + FFIInfo (..), + BCONPtr (..), + BCOPtr (..), + UnlinkedBCO (..), + ByteCodeHpcInfo (..), + CompiledByteCode (..) + ) +import GHC.ByteCode.Breakpoints + ( + InternalBreakpointId (..), + InternalBreakLoc (..), + CgBreakInfo (..), + InternalModBreaks (..) + ) +import GHC.ByteCode.Binary (OnDiskModuleByteCode (..)) +import GHC.ByteCode.Serialize (readOnDiskModuleByteCode) + +-- GHC apart from bytecode +import GHC.Data.Strict qualified as Strict (Maybe, maybe) +import GHC.Data.FastString (unpackFS) +import GHC.Data.FlatBag (FlatBag, elemsFlatBag) +import GHC.Fingerprint (Fingerprint) +import GHC.Types.SrcLoc (noSrcSpan) +import GHC.Types.Name (Name) +import GHC.Types.Name.Occurrence (OccName, HasOccName, occName, parenSymOcc) +import GHC.Types.Tickish (BreakTickIndex, BreakpointId (..)) +import GHC.Types.SptEntry (SptEntry (..)) +import GHC.Types.Error (MessageClass (MCDump)) +import GHC.Utils.Panic.Plain (assert) +import GHC.Utils.Encoding.UTF8 (utf8DecodeShortByteString, utf8DecodeByteString) +import GHC.Utils.Logger (Logger, logMsg) +import GHC.Utils.Binary (BinSrcSpan (..)) +import GHC.Utils.Outputable + ( + Outputable, + defaultDumpStyle, + SDoc, + text, + (<>), + (<+>), + hsep, + quotes, + vcat, + hang, + ppr, + withPprStyle + ) +import GHC.Unit.Types (Module, moduleName) +import GHC.Iface.Type (IfaceType, IfaceTvBndr, IfaceIdBndr) +import GHC.HsToCore.Breakpoints (ModBreaks (..)) +import GHC.Driver.Env.Types (HscEnv) +import GHCi.FFI (FFIType) +import GHCi.Message (ConInfoTable (..)) +import Language.Haskell.Syntax.Module.Name (moduleNameString) + +-- Basic things +import Control.Arrow ((>>>)) +import Data.Bool (bool) +import Data.List (zipWith4) +import Data.ByteString (ByteString) +import Data.ByteString.Short (ShortByteString) +import Data.IntMap (IntMap) +import Data.IntMap qualified as IntMap (toList) +import Data.Array (bounds, indices, elems) +import Numeric (showHex) +import GHC.Exts (Int (I#), Word (W#), int2Word#) + +{- + +Note [Guidelines for the output of @--show-byte-code@] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The output of @--show-byte-code@ shall be shaped according to the following +rules: + + * The output is not a complete textual representation of the contents of a + bytecode file. Parts that are likely of little or no interest to a human + reader are left out. An example of such a “missing” part is the array of + instructions in a bytecode object. + + * The shape of the output corresponds to a forest, whose structure closely + follows the structure of the bytecode representation within the compiler. + The textual representation of each subtree of this forest is generated using + the 'entry' operation defined in this module. + + * Single quotes are put around items (using the 'quotes' operation) where this + makes it easier to distinguish the items from surrounding text. Examples of + items with quotes around them are names and types. Integer and string + literals are output without quotes, because they stick out by themselves. + + * Infix operators are output with parentheses around them. To ensure that this + is always the case, all textual representations of 'OccName' and 'Name' + values are generated using the 'pprNameProperly' operation, defined in this + module, instead of the 'pprNameProperly' operation. + +-} + +-- | Outputs textual information about the contents of a bytecode file. +showByteCode :: Logger -> HscEnv -> FilePath -> IO () +showByteCode logger env path = do + byteCode <- readOnDiskModuleByteCode env path + logMsg logger + MCDump + noSrcSpan + (withPprStyle defaultDumpStyle $ pprOnDiskModuleByteCode byteCode) + +-- | Constructs textual information about the contents of a bytecode file. +pprOnDiskModuleByteCode :: OnDiskModuleByteCode -> SDoc +pprOnDiskModuleByteCode OnDiskModuleByteCode {..} + = vcat [ + pprModule $ odgbc_module, + pprOnDiskModuleByteCodeHash $ odgbc_hash, + pprCompiledByteCode odgbc_module $ odgbc_compiled_byte_code + ] + +-- | Constructs textual information about a module. +pprModule :: Module -> SDoc +pprModule = entry (text "module") . ppr + +-- | Constructs textual information about the hash of a module. +pprOnDiskModuleByteCodeHash :: Fingerprint -> SDoc +pprOnDiskModuleByteCodeHash = entry (text "hash") . ppr + +-- | Constructs textual information about bytecode. +pprCompiledByteCode :: Module -- ^ The enclosing module + -> CompiledByteCode -- ^ The bytecode + -> SDoc -- ^ The textual information +pprCompiledByteCode enclosing_module CompiledByteCode {..} + = vcat [ + pprByteCodeObjects enclosing_module $ bc_bcos, + pprDataConstructorInfoTables $ bc_itbls, + pprTopLevelStrings $ bc_strs, + pprBreakpoints enclosing_module $ bc_breaks, + pprStaticPointerTableEntries $ bc_spt_entries, + pprHPCInfo enclosing_module $ bc_hpc_info + ] + +-- | Constructs textual information about bytecode objects. +pprByteCodeObjects :: Module -- ^ The enlosing module + -> FlatBag UnlinkedBCO -- ^ The bytecode objects + -> SDoc -- ^ The textual information +pprByteCodeObjects enclosing_module = entry (text "objects") . + vcatOrNone . + map (pprByteCodeObject enclosing_module) . + elemsFlatBag + +-- | Constructs textual information about a single bytecode object. +pprByteCodeObject :: Module -- ^ The enclosing module + -> UnlinkedBCO -- ^ The bytecode object + -> SDoc -- ^ The textual information +pprByteCodeObject enclosing_module byte_code_object = case byte_code_object of + UnlinkedBCO {..} + -> entry (text "object" <+> quotes (pprNameProperly unlinkedBCOName)) $ + vcat [ + pprArity $ unlinkedBCOArity, + pprLiterals enclosing_module $ unlinkedBCOLits, + pprUsedItems enclosing_module $ unlinkedBCOPtrs + ] + UnlinkedStaticCon {..} + -> entry ( + text "static-construction object" <+> + quotes (pprNameProperly unlinkedStaticConName) + ) + $ + vcat [ + pprDataConstructor $ unlinkedStaticConDataConName, + pprLiftedness $ not unlinkedStaticConIsUnlifted, + pprLiterals enclosing_module $ unlinkedStaticConLits, + pprUsedItems enclosing_module $ unlinkedStaticConPtrs + ] + +-- | Constructs textual information about the arity of a bytecode object. +pprArity :: Int -> SDoc +pprArity = entry (text "arity") . ppr + +-- | Constructs textual information about the data constructor of a +-- static-construction bytecode object. +pprDataConstructor :: Name -> SDoc +pprDataConstructor = entry (text "data constructor") . pprNameProperly + +-- | Constructs textual information about the liftedness of a +-- static-construction bytecode object. +pprLiftedness :: Bool -> SDoc +pprLiftedness = entry (text "lifted") . noOrYes + +-- | Constructs textual information about literals. +pprLiterals :: Module -- ^ The enclosing module + -> FlatBag BCONPtr -- ^ The literals + -> SDoc -- ^ The textual information +pprLiterals enclosing_module = entry (text "literals") . + vcatOrNone . + map (pprLiteral enclosing_module) . + elemsFlatBag + +-- | Constructs textual information about a single literal. +pprLiteral :: Module -- ^ The enclosing module + -> BCONPtr -- ^ The literal + -> SDoc -- ^ The textual information +pprLiteral enclosing_module literal = case literal of + BCONPtrWord word + -> text "word" <+> + ppr word + BCONPtrLbl label + -> text "label" <+> + quotes (ppr label) + BCONPtrItbl infoTableName + -> text "info table of" <+> + quotes (pprNameProperly infoTableName) + BCONPtrAddr addrName + -> text "address" <+> + quotes (pprNameProperly addrName) + BCONPtrStr encoded_string + -> text "top-level string" <+> + text (show (utf8DecodeByteString encoded_string)) + BCONPtrFS string + -> text "top-level string" <+> + text (show (unpackFS string)) + BCONPtrFFIInfo ffiInfo + -> text "foreign function of type" <+> + quotes (pprFFIInfo ffiInfo) + BCONPtrCostCentre breakpointID + -> text "cost center of breakpoint" <+> + pprInternalBreakpointID enclosing_module breakpointID + +-- | Constructs textual information about FFI info. +pprFFIInfo :: FFIInfo -> SDoc +pprFFIInfo FFIInfo {..} + = hsep (map (pprFFIType >>> (<+> text "->")) ffiInfoArgs) <+> + pprFFIType ffiInfoRet + +-- | Constructs textual information about an FFI type. +pprFFIType :: FFIType -> SDoc +pprFFIType ffi_type = assert (take 3 ident == "FFI") $ text (drop 3 ident) where + + ident :: String + ident = show ffi_type + +-- | Constructs textual information about the ID of a bytecode breakpoint. +pprInternalBreakpointID + :: Module -- ^ The enclosing module + -> InternalBreakpointId -- ^ The ID of the bytecode breakpoint + -> SDoc -- ^ The textual information +pprInternalBreakpointID enclosing_module InternalBreakpointId {..} + | ibi_info_mod == enclosing_module = index_doc + | otherwise = index_doc <+> + text "in" <+> + quotes (ppr ibi_info_mod) + where + + index_doc :: SDoc + index_doc = ppr ibi_info_index + +-- | Constructs textual information about used items. +pprUsedItems :: Module -- ^ The enclosing module + -> FlatBag BCOPtr -- ^ The used items + -> SDoc -- ^ The textual information +pprUsedItems enclosing_module = entry (text "used items") . + vcatOrNone . + map (pprUsedItem enclosing_module) . + elemsFlatBag + +-- | Constructs textual information about a single used item. +pprUsedItem :: Module -- ^ The enclosing module + -> BCOPtr -- ^ The used item + -> SDoc -- ^ The textual information +pprUsedItem enclosing_module used_item = case used_item of + BCOPtrName name + -> text "named item" <+> quotes (pprNameProperly name) + BCOPtrPrimOp primOp + -> text "primitive operation" <+> quotes (ppr primOp) + BCOPtrBCO byte_code_object + -> pprByteCodeObject enclosing_module byte_code_object + BCOPtrBreakArray breakArrayModule + -> text "break array of module" <+> quotes (ppr breakArrayModule) + +-- | Constructs textual information about data constructor info tables. +pprDataConstructorInfoTables :: [(Name, ConInfoTable)] -> SDoc +pprDataConstructorInfoTables = entry (text "data constructor info tables") . + vcatOrNone . + map (uncurry pprDataConstructorInfoTable) + +-- | Constructs textual information about a single data constructor info table. +pprDataConstructorInfoTable :: Name -> ConInfoTable -> SDoc +pprDataConstructorInfoTable data_constr_name ConInfoTable {..} + = entry (text "info table of" <+> quotes (pprNameProperly data_constr_name)) $ + vcat [ + pprPointerWordCount $ conItblPtrs, + pprNonPointerWordCount $ conItblNPtrs + ] + +-- | Constructs textual information about a number of pointer words. +pprPointerWordCount :: Int -> SDoc +pprPointerWordCount = entry (text "number of words for pointers") . ppr + +-- | Constructs textual information about a number of non-pointer words. +pprNonPointerWordCount :: Int -> SDoc +pprNonPointerWordCount = entry (text "number of words for non-pointers") . ppr + +-- | Constructs textual information about top-level strings. +pprTopLevelStrings :: [(Name, ByteString)] -> SDoc +pprTopLevelStrings = entry (text "top-level strings") . + vcatOrNone . + map (uncurry pprTopLevelString) + +-- | Constructs textual information about a single top-level string. +pprTopLevelString :: Name -> ByteString -> SDoc +pprTopLevelString string_name encoded_string + = entry (pprNameProperly string_name) $ + text $ + show $ + utf8DecodeByteString $ + encoded_string + +-- | Constructs textual information about breakpoints. +pprBreakpoints :: Module -- ^ The enclosing module + -> Maybe InternalModBreaks -- ^ The breakpoints + -> SDoc -- ^ The textual information +pprBreakpoints enclosing_module + = entry (text "breakpoints") . + maybe (text "<none>") (pprActualBreakpoints enclosing_module) + +-- | Constructs textual information about actual breakpoints. +pprActualBreakpoints :: Module -- ^ The enclosing module + -> InternalModBreaks -- ^ The actual breakpoints + -> SDoc -- ^ The textual information +pprActualBreakpoints enclosing_module InternalModBreaks {..} + = vcat [ + pprSourceBreakpoints enclosing_module $ imodBreaks_modBreaks, + pprByteCodeBreakpoints enclosing_module $ imodBreaks_breakInfo + ] + +-- | Constructs textual information about source breakpoints. +pprSourceBreakpoints :: Module -- ^ The enclosing module + -> ModBreaks -- ^ The source breakpoints + -> SDoc -- ^ The textual information +pprSourceBreakpoints enclosing_module ModBreaks {..} + = entry (text "source breakpoints") $ + assert (modBreaks_module == enclosing_module) $ + assert (bounds modBreaks_locs_ == bounds modBreaks_decls) $ + assert (bounds modBreaks_locs_ == bounds modBreaks_vars) $ + vcatOrNone $ + zipWith4 pprSourceBreakpoint (indices modBreaks_locs_) + (elems modBreaks_locs_) + (elems modBreaks_decls) + (elems modBreaks_vars) + -- The cost center infos in 'modBreaks_ccs', when present, just contain + -- textual representations of the declaration paths in 'modBreaks_decls' and + -- the source spans in 'modBreaks_locs_' and are therefore never shown. + +-- | Constructs textual information about a single source breakpoint. +pprSourceBreakpoint + :: BreakTickIndex -- ^ The index of the source breakpoint + -> BinSrcSpan -- ^ The source span of the source breakpoint + -> [String] -- ^ The names declared by the surrounding declarations + -> [OccName] -- ^ The free variables of the source breakpoint + -> SDoc -- ^ The textual information +pprSourceBreakpoint ix src_span declaration_path free_vars + = entry (text "source breakpoint" <+> ppr ix) $ + vcat [ + pprSrcSpan $ src_span, + pprDeclarationPath $ declaration_path, + pprFreeVariables $ free_vars + ] + +-- | Constructs textual information about a source span. +pprSrcSpan :: BinSrcSpan -> SDoc +pprSrcSpan = entry (text "source span") . ppr . unBinSrcSpan + +-- | Constructs textual information about a declaration path, which is the list +-- of names declared by the declarations surrounding a source breakpoint. +pprDeclarationPath :: [String] -> SDoc +pprDeclarationPath = entry (text "declaration path") . vcatOrEmpty . map text + +-- | Constructs textual information about free variables. +pprFreeVariables :: [OccName] -> SDoc +pprFreeVariables = entry (text "free variables") . + vcatOrNone . + map pprNameProperly + +-- | Constructs textual information about bytecode breakpoints. +pprByteCodeBreakpoints :: Module -- ^ The enclosing module + -> IntMap CgBreakInfo -- ^ The bytecode breakpoints + -> SDoc -- ^ The textual information +pprByteCodeBreakpoints enclosing_module + = entry (text "bytecode breakpoints") . + vcatOrNone . + map (uncurry (pprByteCodeBreakpoint enclosing_module)) . + IntMap.toList + +-- | Constructs textual information about a single bytecode breakpoint. +pprByteCodeBreakpoint :: Module -- ^ The enclosing module + -> Int -- ^ The index of the bytecode breakpoint + -> CgBreakInfo -- ^ The bytecode breakpoint + -> SDoc -- ^ The textual information +pprByteCodeBreakpoint enclosing_module ix CgBreakInfo {..} + = entry (text "bytecode breakpoint" <+> ppr ix) $ + vcat [ + pprType $ cgb_resty, + pprTypeVariables $ cgb_tyvars, + pprVariables $ cgb_vars, + pprCorrespondingSourceBreakpoint enclosing_module $ cgb_tick_id + ] + -- That the 'cgb_resty' field holds the type of the breakpoint is apparent + -- from the fact that this field is set by + -- 'GHC.StgToByteCode.dehydrateCgBreakInfo' using one of its arguments and + -- 'GHC.StgToByteCode.dehydrateCgBreakInfo' is always invoked with this + -- argument set to the extension field of 'Breakpoint', which in turn holds + -- the type of the breakpoint according to Note [Tickish passes] and the + -- comment on the instance declaration of @XBreakpoint 'TickishPassStg@. + +-- | Constructs textual information about a type. +pprType :: IfaceType -> SDoc +pprType = entry (text "type") . ppr + +-- | Constructs textual information about type variables. +pprTypeVariables :: [IfaceTvBndr] -> SDoc +pprTypeVariables = entry (text "type variables") . + vcatOrNone . + map pprTypeVariableBinder + +-- | Constructs textual information about a type variable binder. +pprTypeVariableBinder :: IfaceTvBndr -> SDoc +pprTypeVariableBinder (name, kind) = ppr name <+> text "::" <+> ppr kind + +-- | Constructs textual information about variables. +pprVariables :: [Maybe (IfaceIdBndr, Word)] -> SDoc +pprVariables = entry (text "variables") . vcatOrNone . map pprVariable + +-- | Constructs textual information about a single variable. +pprVariable :: Maybe (IfaceIdBndr, Word) -> SDoc +pprVariable = maybe (text "<unknown>") (pprVariableBinder . fst) + +-- | Constructs textual information about a variable binder. +pprVariableBinder :: IfaceIdBndr -> SDoc +pprVariableBinder (multiplicity, name, type_) + = text "%" <> ppr multiplicity <+> + ppr name <+> text "::" <+> ppr type_ + +-- | Constructs textual information about a source breakpoint corresponding to a +-- bytecode breakpoint. +pprCorrespondingSourceBreakpoint :: Module + -- ^ The enclosing module + -> Either InternalBreakLoc BreakpointId + -- ^ A reference to the source breakpoint + -> SDoc + -- ^ The textual information +pprCorrespondingSourceBreakpoint enclosing_module + = entry (text "corresponding source breakpoint") . + pprBreakpointID enclosing_module . + either internalBreakLoc id + +-- | Constructs textual information about the ID of a source breakpoint. +pprBreakpointID :: Module -- ^ The enclosing module + -> BreakpointId -- ^ The ID of the source breakpoint + -> SDoc -- ^ The textual information +pprBreakpointID enclosing_module BreakpointId {..} + | bi_tick_mod == enclosing_module = index_doc + | otherwise = index_doc <+> + text "in" <+> + quotes (ppr bi_tick_mod) + where + + index_doc :: SDoc + index_doc = ppr bi_tick_index + +-- | Constructs textual information about static-pointer table entries. +pprStaticPointerTableEntries :: [SptEntry] -> SDoc +pprStaticPointerTableEntries = entry (text "static-pointer table entries") . + vcatOrNone . + map pprStaticPointerTableEntry + +-- | Constructs textual information about a single static-pointer table entry. +pprStaticPointerTableEntry :: SptEntry -> SDoc +pprStaticPointerTableEntry (SptEntry name fingerprint) + = entry (ppr fingerprint) (pprNameProperly name) + +-- | Constructs textual information about HPC info. +pprHPCInfo :: Module -- ^ The enclosing module + -> Strict.Maybe ByteCodeHpcInfo -- ^ The HPC info + -> SDoc -- ^ The textual information +pprHPCInfo enclosing_module + = entry (text "HPC information") . + Strict.maybe (text "<none>") (pprActualHPCInfo enclosing_module) + +-- | Constructs textual information about actual HPC info. +pprActualHPCInfo :: Module -- ^ The enclosing module + -> ByteCodeHpcInfo -- ^ The actual HPC info + -> SDoc -- ^ The textual information +pprActualHPCInfo enclosing_module ByteCodeHpcInfo {..} + = assert ( + utf8DecodeShortByteString bchi_module_name + == + moduleNameString (moduleName enclosing_module) + ) + $ + vcat [ + pprHPCInfoHash $ bchi_hash, + pprTickBox $ bchi_tickbox_name, + pprTickCount $ bchi_tick_count + ] + +-- | Constructs textual information about the hash of HPC info. +pprHPCInfoHash :: Int -> SDoc +pprHPCInfoHash = entry (text "hash") . pprFixedSizeNatural . intToWord + +-- | Constructs textual information about a tick box. +pprTickBox :: ShortByteString -> SDoc +pprTickBox = entry (text "tick box") . text . utf8DecodeShortByteString + +-- | Constructs textual information about a number of ticks. +pprTickCount :: Int -> SDoc +pprTickCount = entry (text "number of ticks") . ppr + +-- | Constructs the Haskell representation of a name. This includes putting +-- parentheses around operators. The given name is supposed to be of type +-- 'OccName' or 'Name'. +pprNameProperly :: (HasOccName a, Outputable a) => a -> SDoc +pprNameProperly name = parenSymOcc (occName name) (ppr name) + +-- | Constructs a hexadecimal representation of a natural number such that the +-- number of hexadecimal digits fits the number of bits used to represent the +-- natural number. +pprFixedSizeNatural :: (Integral a, FiniteBits a) => a -> SDoc +pprFixedSizeNatural num + = assert (num >= 0) $ + text $ replicate (digit_count - length unpadded) '0' ++ unpadded + where + + digit_count :: Int + digit_count = (finiteBitSize num + 3) `div` 4 + + unpadded :: String + unpadded = showHex num "" + +-- | Turns an 'Int' value into the 'Word' value with the same representation. +intToWord :: Int -> Word +intToWord (I# int#) = W# (int2Word# int#) + +-- | Constructs a textual representation of a boolean, interpreting 'True' and +-- 'False' as “yes” and “no”, respectively. +noOrYes :: Bool -> SDoc +noOrYes = text . bool "no" "yes" + +-- | Constructs an entry in a list of textual data representations. +entry :: SDoc -- ^ The title of the entry + -> SDoc -- ^ The contents of the entry + -> SDoc -- ^ The entry +entry title contents = hang (title <> text ":") 2 contents + +-- | Composes documents vertically in general, but presents an empty document +-- list as @<none>@. +vcatOrNone :: [SDoc] -> SDoc +vcatOrNone [] = text "<none>" +vcatOrNone docs = vcat docs + +-- | Composes documents vertically in general, but presents an empty document +-- list as @<empty>@. +vcatOrEmpty :: [SDoc] -> SDoc +vcatOrEmpty [] = text "<empty>" +vcatOrEmpty docs = vcat docs ===================================== compiler/ghc.cabal.in ===================================== @@ -220,6 +220,7 @@ Library GHC.ByteCode.Linker GHC.ByteCode.Recomp.Binary GHC.ByteCode.Serialize + GHC.ByteCode.Show GHC.ByteCode.Types GHC.Cmm GHC.Cmm.BlockId ===================================== docs/users_guide/using.rst ===================================== @@ -453,6 +453,13 @@ The available mode flags are: Read an interface file and dump relevent parts of it as text to ``stdout``. +.. ghc-flag:: --show-byte-code ⟨file⟩ + :shortdesc: display contents of a bytecode file. + :type: mode + :category: modes + + Read a bytecode file and dump relevant parts of it as text to ``stdout``. + .. ghc-flag:: --supported-extensions --supported-languages :shortdesc: display the supported language extensions ===================================== ghc/GHC/Driver/Session/Mode.hs ===================================== @@ -77,6 +77,7 @@ isShowGhciUsageMode _ = False data PostLoadMode = ShowInterface FilePath -- ghc --show-iface + | ShowByteCode FilePath -- ghc --show-byte-code | DoMkDependHS -- ghc -M | StopBefore StopPhase -- ghc -E | -C | -S -- StopBefore StopLn is the default @@ -101,6 +102,9 @@ showUnitsMode = mkPostLoadMode ShowPackages showInterfaceMode :: FilePath -> Mode showInterfaceMode fp = mkPostLoadMode (ShowInterface fp) +showByteCodeMode :: FilePath -> Mode +showByteCodeMode fp = mkPostLoadMode (ShowByteCode fp) + stopBeforeMode :: StopPhase -> Mode stopBeforeMode phase = mkPostLoadMode (StopBefore phase) @@ -231,9 +235,11 @@ mode_flags = replaceSpace ' ' = '-' replaceSpace c = c ] ++ - ------- interfaces ---------------------------------------------------- - [ defFlag "-show-iface" (HasArg (\f -> setMode (showInterfaceMode f) + ------- textual output of generated data ----------------------------- + [ defFlag "-show-iface" (HasArg (\f -> setMode (showInterfaceMode f) "--show-iface")) + , defFlag "-show-byte-code" (HasArg (\f -> setMode (showByteCodeMode f) + "--show-byte-code")) ------- primary modes ------------------------------------------------ , defFlag "c" (PassFlag (\f -> do setMode (stopBeforeMode NoStop) f ===================================== ghc/Main.hs ===================================== @@ -73,6 +73,8 @@ import GHC.SysTools.BaseDir import GHC.Iface.Load import GHC.Iface.Recomp.Binary ( fingerprintBinMem ) +import GHC.ByteCode.Show ( showByteCode ) + import GHC.Tc.Utils.Monad ( initIfaceCheck ) import GHC.Iface.Errors.Ppr @@ -267,6 +269,7 @@ main' postLoadMode units dflags0 args flagWarnings = do (hsc_units hsc_env) (hsc_NC hsc_env) f + ShowByteCode f -> liftIO $ showByteCode logger hsc_env f DoMake -> doMake units srcs DoMkDependHS -> doMkDependHS (map fst srcs) StopBefore p -> liftIO (oneShot hsc_env p srcs) ===================================== testsuite/tests/show-bytecode/Example.hs ===================================== @@ -0,0 +1,45 @@ +{-# LANGUAGE StaticPointers #-} + +-- | This module uses in particular the following features: +-- +-- * Local variables defined in `where` clauses +-- * Integer literals +-- * Infix operators +-- * Recursion +-- * Static pointers +-- * Algebraic-datatype declarations +-- * Foreign import declarations +module Example where + +import Numeric.Natural (Natural) +import Foreign.Ptr (Ptr) +import Foreign.C.Types (CChar, CSize (CSize)) +import GHC.StaticPtr (StaticPtr) + +fibonaccis :: [Natural] +fibonaccis = 0 : positiveFibonaccis where + + positiveFibonaccis :: [Natural] + positiveFibonaccis = 1 : zipWith (+) fibonaccis positiveFibonaccis + +fibonaccisPtr :: StaticPtr [Natural] +fibonaccisPtr = static fibonaccis + +divides :: Integral a => a -> a -> Bool +k `divides` n = n `mod` k == 0 + +primes :: [Natural] +primes = 2 : filter isPrime [3 ..] where + + isPrime :: Natural -> Bool + isPrime n = not (any (`divides` n) (takeWhile ((<= n) . (^ 2)) primes)) + +primesPtr :: StaticPtr [Natural] +primesPtr = static primes + +data BinTree a b = Leaf a | Node (BinTree a b) b (BinTree a b) + +data PerfectTree a = PerfectTree a | Nested (PerfectTree (a, a)) + +foreign import ccall "string.h strlen" + cstrlen :: Ptr CChar -> IO CSize ===================================== testsuite/tests/show-bytecode/Makefile ===================================== @@ -0,0 +1,18 @@ +TOP=../.. +include $(TOP)/mk/boilerplate.mk +include $(TOP)/mk/test.mk + +compile = '$(TEST_HC)' $(TEST_HC_OPTS) -fbyte-code -fwrite-byte-code -no-link +show = '$(TEST_HC)' $(TEST_HC_OPTS) --show-byte-code + +show-bytecode-vanilla: + $(compile) Example.hs + $(show) Example.gbc | ./normalize + +show-bytecode-breakpoints: + $(compile) -fbreak-points Example.hs + $(show) Example.gbc | ./normalize + +show-bytecode-hpc: + $(compile) -fhpc Example.hs + $(show) Example.gbc | ./normalize ===================================== testsuite/tests/show-bytecode/all.T ===================================== @@ -0,0 +1,18 @@ +test( + 'show-bytecode-vanilla', + extra_files(['Example.hs', 'normalize']), + makefile_test, + [] +) +test( + 'show-bytecode-breakpoints', + extra_files(['Example.hs', 'normalize']), + makefile_test, + [] +) +test( + 'show-bytecode-hpc', + [js_skip, extra_files(['Example.hs', 'normalize'])], + makefile_test, + [] +) ===================================== testsuite/tests/show-bytecode/normalize ===================================== @@ -0,0 +1,29 @@ +#!/usr/bin/env bash + +set -e -o pipefail + +# Make the test output independent of unstable compiler-generated data +stabilize () +{ + sed -E -e ' + s/_r[[:alnum:]]+/_@name_suffix@/g + s/^( *hash: )[[:xdigit:]]+/\1@hash@/ + s/^( *)[[:xdigit:]]+:/\1@hash@:/ + s/word [[:digit:]]{2}[[:digit:]]*/word @large_word@/g + ' +} + +# Make the test output independent of the word size +universalize () +{ + sed -E -e ' + s/W[[:digit:]]+#/W@word_size@#/ + s/UInt[[:digit:]]+/UInt@word_size@/ + ' | + uniq + # The invocation of `uniq` is merely for collapsing adjacent entries of + # `word @large_word@`, whose number may depend on the word size. +} + +# Run all phases +stabilize | universalize ===================================== testsuite/tests/show-bytecode/show-bytecode-breakpoints.stdout ===================================== @@ -0,0 +1,828 @@ +[1 of 1] Compiling Example ( Example.hs, Example.gbc ) +module: Example +hash: @hash@ +objects: + object ‘primesPtr’: + arity: 0 + literals: + top-level string "Example" + top-level string "main" + cost center of breakpoint 0 + used items: + break array of module ‘Example’ + named item ‘static_ptr1’ + named item ‘$dTypeable2_@name_suffix@’ + named item ‘$fIsStaticStaticPtr’ + static-construction object ‘static_ptr1’: + data constructor: StaticPtr + lifted: yes + literals: + word @large_word@ + used items: + named item ‘static_ptr1_sat_@name_suffix@’ + named item ‘primes’ + static-construction object ‘static_ptr1_sat_@name_suffix@’: + data constructor: StaticPtrInfo + lifted: yes + literals: <none> + used items: + named item ‘static_ptr1_sat_@name_suffix@’ + object ‘static_ptr1_sat_@name_suffix@’: + arity: 0 + literals: top-level string "main" + used items: + object ‘static_ptr1_sat_@name_suffix@’: + arity: 0 + literals: <none> + used items: named item ‘unpackCString#’ + object ‘static_ptr1_sat_@name_suffix@’: + arity: 0 + literals: top-level string "Example" + used items: + object ‘static_ptr1_sat_@name_suffix@’: + arity: 0 + literals: <none> + used items: named item ‘unpackCString#’ + static-construction object ‘static_ptr1_sat_@name_suffix@’: + data constructor: (,) + lifted: yes + literals: <none> + used items: + named item ‘static_ptr1_sat_@name_suffix@’ + static-construction object ‘static_ptr1_sat_@name_suffix@’: + data constructor: I# + lifted: yes + literals: word @large_word@ + used items: <none> + static-construction object ‘static_ptr1_sat_@name_suffix@’: + data constructor: I# + lifted: yes + literals: word @large_word@ + used items: <none> + object ‘primes’: + arity: 0 + literals: + top-level string "Example" + top-level string "main" + cost center of breakpoint 2 + info table of ‘(:)’ + used items: + break array of module ‘Example’ + object ‘primes_sat_@name_suffix@’: + arity: 0 + literals: + top-level string "Example" + top-level string "main" + cost center of breakpoint 1 + used items: + break array of module ‘Example’ + object ‘primes_sat_@name_suffix@’: + arity: 0 + literals: <none> + used items: + object ‘primes_sat_@name_suffix@’: + arity: 0 + literals: + word 3 + info table of ‘IS’ + used items: + named item ‘$fNumNatural’ + named item ‘fromInteger’ + named item ‘$fEnumNatural’ + named item ‘enumFrom’ + named item ‘isPrime_@name_suffix@’ + named item ‘filter’ + object ‘primes_sat_@name_suffix@’: + arity: 0 + literals: + word 2 + info table of ‘IS’ + used items: + named item ‘$fNumNatural’ + named item ‘fromInteger’ + object ‘isPrime_@name_suffix@’: + arity: 1 + literals: + top-level string "Example" + top-level string "main" + cost center of breakpoint 9 + used items: + break array of module ‘Example’ + object ‘isPrime_sat_@name_suffix@’: + arity: 1 + literals: + top-level string "Example" + top-level string "main" + cost center of breakpoint 8 + used items: + break array of module ‘Example’ + object ‘isPrime_sat_@name_suffix@’: + arity: 1 + literals: + top-level string "Example" + top-level string "main" + cost center of breakpoint 7 + used items: + break array of module ‘Example’ + object ‘isPrime_sat_@name_suffix@’: + arity: 1 + literals: + top-level string "Example" + top-level string "main" + cost center of breakpoint 6 + used items: + break array of module ‘Example’ + object ‘isPrime_sat_@name_suffix@’: + arity: 0 + literals: + top-level string "Example" + top-level string "main" + cost center of breakpoint 5 + word 2 + info table of ‘IS’ + used items: + break array of module ‘Example’ + object ‘v_@name_suffix@’: + arity: 0 + literals: <none> + used items: + named item ‘$fIntegralInteger’ + named item ‘$fNumNatural’ + named item ‘(^)’ + object ‘pap_@name_suffix@’: + arity: 3 + literals: <none> + used items: <none> + object ‘isPrime_sat_@name_suffix@’: + arity: 1 + literals: + top-level string "Example" + top-level string "main" + cost center of breakpoint 4 + used items: + break array of module ‘Example’ + object ‘v_@name_suffix@’: + arity: 0 + literals: <none> + used items: + named item ‘$fOrdNatural’ + named item ‘(<=)’ + object ‘pap_@name_suffix@’: + arity: 3 + literals: <none> + used items: <none> + named item ‘(.)’ + named item ‘primes’ + named item ‘takeWhile’ + object ‘isPrime_sat_@name_suffix@’: + arity: 1 + literals: + top-level string "Example" + top-level string "main" + cost center of breakpoint 3 + used items: + break array of module ‘Example’ + object ‘pap_@name_suffix@’: + arity: 2 + literals: <none> + used items: + named item ‘$fIntegralNatural’ + named item ‘divides’ + named item ‘$fFoldableList’ + named item ‘any’ + named item ‘not’ + object ‘fibonaccisPtr’: + arity: 0 + literals: + top-level string "Example" + top-level string "main" + cost center of breakpoint 10 + used items: + break array of module ‘Example’ + named item ‘static_ptr’ + named item ‘$dTypeable2_@name_suffix@’ + named item ‘$fIsStaticStaticPtr’ + static-construction object ‘static_ptr’: + data constructor: StaticPtr + lifted: yes + literals: + word @large_word@ + used items: + named item ‘static_ptr_sat_@name_suffix@’ + named item ‘fibonaccis’ + static-construction object ‘static_ptr_sat_@name_suffix@’: + data constructor: StaticPtrInfo + lifted: yes + literals: <none> + used items: + named item ‘static_ptr_sat_@name_suffix@’ + object ‘static_ptr_sat_@name_suffix@’: + arity: 0 + literals: top-level string "main" + used items: + object ‘static_ptr_sat_@name_suffix@’: + arity: 0 + literals: <none> + used items: named item ‘unpackCString#’ + object ‘static_ptr_sat_@name_suffix@’: + arity: 0 + literals: top-level string "Example" + used items: + object ‘static_ptr_sat_@name_suffix@’: + arity: 0 + literals: <none> + used items: named item ‘unpackCString#’ + static-construction object ‘static_ptr_sat_@name_suffix@’: + data constructor: (,) + lifted: yes + literals: <none> + used items: + named item ‘static_ptr_sat_@name_suffix@’ + static-construction object ‘static_ptr_sat_@name_suffix@’: + data constructor: I# + lifted: yes + literals: word @large_word@ + used items: <none> + static-construction object ‘static_ptr_sat_@name_suffix@’: + data constructor: I# + lifted: yes + literals: word @large_word@ + used items: <none> + object ‘fibonaccis’: + arity: 0 + literals: + top-level string "Example" + top-level string "main" + cost center of breakpoint 11 + info table of ‘(:)’ + used items: + break array of module ‘Example’ + object ‘fibonaccis_sat_@name_suffix@’: + arity: 0 + literals: + word 0 + info table of ‘IS’ + used items: + named item ‘$fNumNatural’ + named item ‘fromInteger’ + named item ‘positiveFibonaccis_@name_suffix@’ + object ‘positiveFibonaccis_@name_suffix@’: + arity: 0 + literals: + top-level string "Example" + top-level string "main" + cost center of breakpoint 13 + info table of ‘(:)’ + used items: + break array of module ‘Example’ + object ‘positiveFibonaccis_sat_@name_suffix@’: + arity: 0 + literals: + top-level string "Example" + top-level string "main" + cost center of breakpoint 12 + used items: + break array of module ‘Example’ + object ‘positiveFibonaccis_sat_@name_suffix@’: + arity: 0 + literals: <none> + used items: + named item ‘$fNumNatural’ + named item ‘(+)’ + named item ‘positiveFibonaccis_@name_suffix@’ + named item ‘fibonaccis’ + named item ‘zipWith’ + object ‘positiveFibonaccis_sat_@name_suffix@’: + arity: 0 + literals: + word 1 + info table of ‘IS’ + used items: + named item ‘$fNumNatural’ + named item ‘fromInteger’ + object ‘$dTypeable2_@name_suffix@’: + arity: 0 + literals: <none> + used items: + named item ‘$dTypeable_@name_suffix@’ + named item ‘$dTypeable1_@name_suffix@’ + named item ‘mkTrAppChecked’ + object ‘$dTypeable1_@name_suffix@’: + arity: 0 + literals: info table of ‘[]’ + used items: + named item ‘$tcList’ + named item ‘mkTrCon’ + object ‘$dTypeable_@name_suffix@’: + arity: 0 + literals: info table of ‘[]’ + used items: + named item ‘$tcNatural’ + named item ‘mkTrCon’ + object ‘cstrlen’: + arity: 2 + literals: <none> + used items: + object ‘ds1_@name_suffix@’: + arity: 0 + literals: + label ‘strlen’ + word 0 + foreign function of type ‘Pointer -> UInt@word_size@’ + used items: + object ‘wild_@name_suffix@’: + arity: 0 + literals: info table of ‘W@word_size@#’ + used items: <none> + static-construction object ‘$tc'Nested’: + data constructor: TyCon + lifted: yes + literals: + word @large_word@ + word 1 + used items: + named item ‘$trModule’ + named item ‘$tc'Nested2_@name_suffix@’ + named item ‘$krep17_@name_suffix@’ + static-construction object ‘$tc'Nested2_@name_suffix@’: + data constructor: TrNameS + lifted: yes + literals: address ‘$tc'Nested1_@name_suffix@’ + used items: <none> + static-construction object ‘$krep17_@name_suffix@’: + data constructor: KindRepFun + lifted: yes + literals: <none> + used items: + named item ‘$krep16_@name_suffix@’ + named item ‘$krep13_@name_suffix@’ + static-construction object ‘$krep16_@name_suffix@’: + data constructor: KindRepTyConApp + lifted: yes + literals: <none> + used items: + named item ‘$tcPerfectTree’ + named item ‘$krep15_@name_suffix@’ + static-construction object ‘$krep15_@name_suffix@’: + data constructor: (:) + lifted: yes + literals: <none> + used items: + named item ‘$krep4_@name_suffix@’ + named item ‘[]’ + static-construction object ‘$tc'PerfectTree’: + data constructor: TyCon + lifted: yes + literals: + word @large_word@ + word 1 + used items: + named item ‘$trModule’ + named item ‘$tc'PerfectTree2_@name_suffix@’ + named item ‘$krep14_@name_suffix@’ + static-construction object ‘$tc'PerfectTree2_@name_suffix@’: + data constructor: TrNameS + lifted: yes + literals: address ‘$tc'PerfectTree1_@name_suffix@’ + used items: <none> + static-construction object ‘$krep14_@name_suffix@’: + data constructor: KindRepFun + lifted: yes + literals: <none> + used items: + named item ‘$krep1_@name_suffix@’ + named item ‘$krep13_@name_suffix@’ + static-construction object ‘$krep13_@name_suffix@’: + data constructor: KindRepTyConApp + lifted: yes + literals: <none> + used items: + named item ‘$tcPerfectTree’ + named item ‘$krep12_@name_suffix@’ + static-construction object ‘$krep12_@name_suffix@’: + data constructor: (:) + lifted: yes + literals: <none> + used items: + named item ‘$krep1_@name_suffix@’ + named item ‘[]’ + static-construction object ‘$tcPerfectTree’: + data constructor: TyCon + lifted: yes + literals: + word @large_word@ + word 0 + used items: + named item ‘$trModule’ + named item ‘$tcPerfectTree2_@name_suffix@’ + named item ‘krepStarArr’ + static-construction object ‘$tcPerfectTree2_@name_suffix@’: + data constructor: TrNameS + lifted: yes + literals: address ‘$tcPerfectTree1_@name_suffix@’ + used items: <none> + static-construction object ‘$tc'Node’: + data constructor: TyCon + lifted: yes + literals: + word @large_word@ + word 2 + used items: + named item ‘$trModule’ + named item ‘$tc'Node2_@name_suffix@’ + named item ‘$krep11_@name_suffix@’ + static-construction object ‘$tc'Node2_@name_suffix@’: + data constructor: TrNameS + lifted: yes + literals: address ‘$tc'Node1_@name_suffix@’ + used items: <none> + static-construction object ‘$krep11_@name_suffix@’: + data constructor: KindRepFun + lifted: yes + literals: <none> + used items: + named item ‘$krep7_@name_suffix@’ + named item ‘$krep10_@name_suffix@’ + static-construction object ‘$krep10_@name_suffix@’: + data constructor: KindRepFun + lifted: yes + literals: <none> + used items: + named item ‘$krep_@name_suffix@’ + named item ‘$krep9_@name_suffix@’ + static-construction object ‘$krep9_@name_suffix@’: + data constructor: KindRepFun + lifted: yes + literals: <none> + used items: + named item ‘$krep7_@name_suffix@’ + static-construction object ‘$tc'Leaf’: + data constructor: TyCon + lifted: yes + literals: + word @large_word@ + word 2 + used items: + named item ‘$trModule’ + named item ‘$tc'Leaf2_@name_suffix@’ + named item ‘$krep8_@name_suffix@’ + static-construction object ‘$tc'Leaf2_@name_suffix@’: + data constructor: TrNameS + lifted: yes + literals: address ‘$tc'Leaf1_@name_suffix@’ + used items: <none> + static-construction object ‘$krep8_@name_suffix@’: + data constructor: KindRepFun + lifted: yes + literals: <none> + used items: + named item ‘$krep1_@name_suffix@’ + named item ‘$krep7_@name_suffix@’ + static-construction object ‘$krep7_@name_suffix@’: + data constructor: KindRepTyConApp + lifted: yes + literals: <none> + used items: + named item ‘$tcBinTree’ + named item ‘$krep6_@name_suffix@’ + static-construction object ‘$krep6_@name_suffix@’: + data constructor: (:) + lifted: yes + literals: <none> + used items: + named item ‘$krep1_@name_suffix@’ + named item ‘$krep5_@name_suffix@’ + static-construction object ‘$krep5_@name_suffix@’: + data constructor: (:) + lifted: yes + literals: <none> + used items: + named item ‘$krep_@name_suffix@’ + named item ‘[]’ + static-construction object ‘$tcBinTree’: + data constructor: TyCon + lifted: yes + literals: + word @large_word@ + word 0 + used items: + named item ‘$trModule’ + named item ‘$tcBinTree2_@name_suffix@’ + named item ‘krepStarArrStarArr’ + static-construction object ‘$tcBinTree2_@name_suffix@’: + data constructor: TrNameS + lifted: yes + literals: address ‘$tcBinTree1_@name_suffix@’ + used items: <none> + static-construction object ‘$krep4_@name_suffix@’: + data constructor: KindRepTyConApp + lifted: yes + literals: <none> + used items: + named item ‘$tcTuple2’ + named item ‘$krep3_@name_suffix@’ + static-construction object ‘$krep3_@name_suffix@’: + data constructor: (:) + lifted: yes + literals: <none> + used items: + named item ‘$krep1_@name_suffix@’ + named item ‘$krep2_@name_suffix@’ + static-construction object ‘$krep2_@name_suffix@’: + data constructor: (:) + lifted: yes + literals: <none> + used items: + named item ‘$krep1_@name_suffix@’ + named item ‘[]’ + static-construction object ‘$krep1_@name_suffix@’: + data constructor: KindRepVar + lifted: yes + literals: word 0 + used items: <none> + static-construction object ‘$krep_@name_suffix@’: + data constructor: KindRepVar + lifted: yes + literals: word 1 + used items: <none> + static-construction object ‘$trModule’: + data constructor: Module + lifted: yes + literals: <none> + used items: + named item ‘$trModule2_@name_suffix@’ + named item ‘$trModule4_@name_suffix@’ + static-construction object ‘$trModule4_@name_suffix@’: + data constructor: TrNameS + lifted: yes + literals: address ‘$trModule3_@name_suffix@’ + used items: <none> + static-construction object ‘$trModule2_@name_suffix@’: + data constructor: TrNameS + lifted: yes + literals: address ‘$trModule1_@name_suffix@’ + used items: <none> + object ‘divides’: + arity: 3 + literals: <none> + used items: + object ‘$dReal_@name_suffix@’: + arity: 0 + literals: <none> + used items: + object ‘$dNum_@name_suffix@’: + arity: 0 + literals: <none> + used items: + object ‘$dEq_@name_suffix@’: + arity: 0 + literals: <none> + used items: + object ‘$dEq1_@name_suffix@’: + arity: 0 + literals: <none> + used items: + object ‘bcprep_@name_suffix@’: + arity: 5 + literals: + top-level string "Example" + top-level string "main" + cost center of breakpoint 15 + used items: + break array of module ‘Example’ + object ‘divides_sat_@name_suffix@’: + arity: 1 + literals: + word 0 + info table of ‘IS’ + used items: named item ‘fromInteger’ + object ‘divides_sat_@name_suffix@’: + arity: 3 + literals: + top-level string "Example" + top-level string "main" + cost center of breakpoint 14 + used items: + break array of module ‘Example’ + named item ‘mod’ + named item ‘(==)’ + named item ‘$p1Ord’ + named item ‘$p2Real’ + named item ‘$p1Real’ + named item ‘$p1Integral’ + object ‘Node’: + arity: 3 + literals: info table of ‘Node’ + used items: <none> + object ‘Leaf’: + arity: 1 + literals: info table of ‘Leaf’ + used items: <none> + object ‘Nested’: + arity: 1 + literals: info table of ‘Nested’ + used items: <none> + object ‘PerfectTree’: + arity: 1 + literals: info table of ‘PerfectTree’ + used items: <none> +data constructor info tables: + info table of ‘PerfectTree’: + number of words for pointers: 1 + number of words for non-pointers: 0 + info table of ‘Nested’: + number of words for pointers: 1 + number of words for non-pointers: 0 + info table of ‘Leaf’: + number of words for pointers: 1 + number of words for non-pointers: 0 + info table of ‘Node’: + number of words for pointers: 3 + number of words for non-pointers: 0 +top-level strings: + $tc'Nested1_@name_suffix@: "'Nested" + $tc'PerfectTree1_@name_suffix@: "'PerfectTree" + $tcPerfectTree1_@name_suffix@: "PerfectTree" + $tc'Node1_@name_suffix@: "'Node" + $tc'Leaf1_@name_suffix@: "'Leaf" + $tcBinTree1_@name_suffix@: "BinTree" + $trModule3_@name_suffix@: "Example" + $trModule1_@name_suffix@: "main" +breakpoints: + source breakpoints: + source breakpoint 0: + source span: Example.hs:29:17-25 + declaration path: divides + free variables: + k + n + source breakpoint 1: + source span: Example.hs:29:17-30 + declaration path: divides + free variables: + k + n + source breakpoint 2: + source span: Example.hs:35:27-37 + declaration path: + primes + isPrime + free variables: n + source breakpoint 3: + source span: Example.hs:35:53-56 + declaration path: + primes + isPrime + free variables: n + source breakpoint 4: + source span: Example.hs:35:62-64 + declaration path: + primes + isPrime + free variables: <none> + source breakpoint 5: + source span: Example.hs:35:52-65 + declaration path: + primes + isPrime + free variables: n + source breakpoint 6: + source span: Example.hs:35:41-73 + declaration path: + primes + isPrime + free variables: n + source breakpoint 7: + source span: Example.hs:35:22-74 + declaration path: + primes + isPrime + free variables: n + source breakpoint 8: + source span: Example.hs:35:17-75 + declaration path: + primes + isPrime + free variables: n + source breakpoint 9: + source span: Example.hs:32:14-34 + declaration path: primes + free variables: isPrime + source breakpoint 10: + source span: Example.hs:32:10-34 + declaration path: primes + free variables: isPrime + source breakpoint 11: + source span: Example.hs:38:13-25 + declaration path: primesPtr + free variables: <none> + source breakpoint 12: + source span: Example.hs:23:30-70 + declaration path: + fibonaccis + positiveFibonaccis + free variables: positiveFibonaccis + source breakpoint 13: + source span: Example.hs:23:26-70 + declaration path: + fibonaccis + positiveFibonaccis + free variables: positiveFibonaccis + source breakpoint 14: + source span: Example.hs:20:14-35 + declaration path: fibonaccis + free variables: positiveFibonaccis + source breakpoint 15: + source span: Example.hs:26:17-33 + declaration path: fibonaccisPtr + free variables: <none> + bytecode breakpoints: + bytecode breakpoint 0: + type: StaticPtr [Natural] + type variables: <none> + variables: <none> + corresponding source breakpoint: 11 + bytecode breakpoint 1: + type: [Natural] + type variables: <none> + variables: <unknown> + corresponding source breakpoint: 9 + bytecode breakpoint 2: + type: [Natural] + type variables: <none> + variables: <unknown> + corresponding source breakpoint: 10 + bytecode breakpoint 3: + type: Natural -> Bool + type variables: <none> + variables: %'Many n :: Natural + corresponding source breakpoint: 2 + bytecode breakpoint 4: + type: Natural -> Bool + type variables: <none> + variables: %'Many n :: Natural + corresponding source breakpoint: 3 + bytecode breakpoint 5: + type: Natural -> Natural + type variables: <none> + variables: <none> + corresponding source breakpoint: 4 + bytecode breakpoint 6: + type: Natural -> Bool + type variables: <none> + variables: %'Many n :: Natural + corresponding source breakpoint: 5 + bytecode breakpoint 7: + type: [Natural] + type variables: <none> + variables: %'Many n :: Natural + corresponding source breakpoint: 6 + bytecode breakpoint 8: + type: Bool + type variables: <none> + variables: %'Many n :: Natural + corresponding source breakpoint: 7 + bytecode breakpoint 9: + type: Bool + type variables: <none> + variables: %'Many n :: Natural + corresponding source breakpoint: 8 + bytecode breakpoint 10: + type: StaticPtr [Natural] + type variables: <none> + variables: <none> + corresponding source breakpoint: 15 + bytecode breakpoint 11: + type: [Natural] + type variables: <none> + variables: <unknown> + corresponding source breakpoint: 14 + bytecode breakpoint 12: + type: [Natural] + type variables: <none> + variables: <unknown> + corresponding source breakpoint: 12 + bytecode breakpoint 13: + type: [Natural] + type variables: <none> + variables: <unknown> + corresponding source breakpoint: 13 + bytecode breakpoint 14: + type: a + type variables: a :: * + variables: + %'Many eta :: a + %'Many eta1 :: a + corresponding source breakpoint: 0 + bytecode breakpoint 15: + type: Bool + type variables: a :: * + variables: + %'Many eta :: a + %'Many eta1 :: a + corresponding source breakpoint: 1 +static-pointer table entries: + @hash@: static_ptr + @hash@: static_ptr1 +HPC information: <none> + ===================================== testsuite/tests/show-bytecode/show-bytecode-breakpoints.stdout-javascript-unknown-ghcjs ===================================== @@ -0,0 +1,832 @@ +[1 of 1] Compiling Example ( Example.hs, Example.gbc ) +module: Example +hash: @hash@ +objects: + object ‘primesPtr’: + arity: 0 + literals: + top-level string "Example" + top-level string "main" + cost center of breakpoint 0 + used items: + break array of module ‘Example’ + named item ‘static_ptr1’ + named item ‘$dTypeable2_@name_suffix@’ + named item ‘$fIsStaticStaticPtr’ + static-construction object ‘static_ptr1’: + data constructor: StaticPtr + lifted: yes + literals: + word @large_word@ + used items: + named item ‘static_ptr1_sat_@name_suffix@’ + named item ‘primes’ + static-construction object ‘static_ptr1_sat_@name_suffix@’: + data constructor: StaticPtrInfo + lifted: yes + literals: <none> + used items: + named item ‘static_ptr1_sat_@name_suffix@’ + object ‘static_ptr1_sat_@name_suffix@’: + arity: 0 + literals: top-level string "main" + used items: + object ‘static_ptr1_sat_@name_suffix@’: + arity: 0 + literals: <none> + used items: named item ‘unpackCString#’ + object ‘static_ptr1_sat_@name_suffix@’: + arity: 0 + literals: top-level string "Example" + used items: + object ‘static_ptr1_sat_@name_suffix@’: + arity: 0 + literals: <none> + used items: named item ‘unpackCString#’ + static-construction object ‘static_ptr1_sat_@name_suffix@’: + data constructor: (,) + lifted: yes + literals: <none> + used items: + named item ‘static_ptr1_sat_@name_suffix@’ + static-construction object ‘static_ptr1_sat_@name_suffix@’: + data constructor: I# + lifted: yes + literals: word @large_word@ + used items: <none> + static-construction object ‘static_ptr1_sat_@name_suffix@’: + data constructor: I# + lifted: yes + literals: word @large_word@ + used items: <none> + object ‘primes’: + arity: 0 + literals: + top-level string "Example" + top-level string "main" + cost center of breakpoint 2 + info table of ‘(:)’ + used items: + break array of module ‘Example’ + object ‘primes_sat_@name_suffix@’: + arity: 0 + literals: + top-level string "Example" + top-level string "main" + cost center of breakpoint 1 + used items: + break array of module ‘Example’ + object ‘primes_sat_@name_suffix@’: + arity: 0 + literals: <none> + used items: + object ‘primes_sat_@name_suffix@’: + arity: 0 + literals: + word 3 + info table of ‘IS’ + used items: + named item ‘$fNumNatural’ + named item ‘fromInteger’ + named item ‘$fEnumNatural’ + named item ‘enumFrom’ + named item ‘isPrime_@name_suffix@’ + named item ‘filter’ + object ‘primes_sat_@name_suffix@’: + arity: 0 + literals: + word 2 + info table of ‘IS’ + used items: + named item ‘$fNumNatural’ + named item ‘fromInteger’ + object ‘isPrime_@name_suffix@’: + arity: 1 + literals: + top-level string "Example" + top-level string "main" + cost center of breakpoint 9 + used items: + break array of module ‘Example’ + object ‘isPrime_sat_@name_suffix@’: + arity: 1 + literals: + top-level string "Example" + top-level string "main" + cost center of breakpoint 8 + used items: + break array of module ‘Example’ + object ‘isPrime_sat_@name_suffix@’: + arity: 1 + literals: + top-level string "Example" + top-level string "main" + cost center of breakpoint 7 + used items: + break array of module ‘Example’ + object ‘isPrime_sat_@name_suffix@’: + arity: 1 + literals: + top-level string "Example" + top-level string "main" + cost center of breakpoint 6 + used items: + break array of module ‘Example’ + object ‘isPrime_sat_@name_suffix@’: + arity: 0 + literals: + top-level string "Example" + top-level string "main" + cost center of breakpoint 5 + word 2 + info table of ‘IS’ + used items: + break array of module ‘Example’ + object ‘v_@name_suffix@’: + arity: 0 + literals: <none> + used items: + named item ‘$fIntegralInteger’ + named item ‘$fNumNatural’ + named item ‘(^)’ + object ‘pap_@name_suffix@’: + arity: 3 + literals: <none> + used items: <none> + object ‘isPrime_sat_@name_suffix@’: + arity: 1 + literals: + top-level string "Example" + top-level string "main" + cost center of breakpoint 4 + used items: + break array of module ‘Example’ + object ‘v_@name_suffix@’: + arity: 0 + literals: <none> + used items: + named item ‘$fOrdNatural’ + named item ‘(<=)’ + object ‘pap_@name_suffix@’: + arity: 3 + literals: <none> + used items: <none> + named item ‘(.)’ + named item ‘primes’ + named item ‘takeWhile’ + object ‘isPrime_sat_@name_suffix@’: + arity: 1 + literals: + top-level string "Example" + top-level string "main" + cost center of breakpoint 3 + used items: + break array of module ‘Example’ + object ‘pap_@name_suffix@’: + arity: 2 + literals: <none> + used items: + named item ‘$fIntegralNatural’ + named item ‘divides’ + named item ‘$fFoldableList’ + named item ‘any’ + named item ‘not’ + object ‘fibonaccisPtr’: + arity: 0 + literals: + top-level string "Example" + top-level string "main" + cost center of breakpoint 10 + used items: + break array of module ‘Example’ + named item ‘static_ptr’ + named item ‘$dTypeable2_@name_suffix@’ + named item ‘$fIsStaticStaticPtr’ + static-construction object ‘static_ptr’: + data constructor: StaticPtr + lifted: yes + literals: + word @large_word@ + used items: + named item ‘static_ptr_sat_@name_suffix@’ + named item ‘fibonaccis’ + static-construction object ‘static_ptr_sat_@name_suffix@’: + data constructor: StaticPtrInfo + lifted: yes + literals: <none> + used items: + named item ‘static_ptr_sat_@name_suffix@’ + object ‘static_ptr_sat_@name_suffix@’: + arity: 0 + literals: top-level string "main" + used items: + object ‘static_ptr_sat_@name_suffix@’: + arity: 0 + literals: <none> + used items: named item ‘unpackCString#’ + object ‘static_ptr_sat_@name_suffix@’: + arity: 0 + literals: top-level string "Example" + used items: + object ‘static_ptr_sat_@name_suffix@’: + arity: 0 + literals: <none> + used items: named item ‘unpackCString#’ + static-construction object ‘static_ptr_sat_@name_suffix@’: + data constructor: (,) + lifted: yes + literals: <none> + used items: + named item ‘static_ptr_sat_@name_suffix@’ + static-construction object ‘static_ptr_sat_@name_suffix@’: + data constructor: I# + lifted: yes + literals: word @large_word@ + used items: <none> + static-construction object ‘static_ptr_sat_@name_suffix@’: + data constructor: I# + lifted: yes + literals: word @large_word@ + used items: <none> + object ‘fibonaccis’: + arity: 0 + literals: + top-level string "Example" + top-level string "main" + cost center of breakpoint 11 + info table of ‘(:)’ + used items: + break array of module ‘Example’ + object ‘fibonaccis_sat_@name_suffix@’: + arity: 0 + literals: + word 0 + info table of ‘IS’ + used items: + named item ‘$fNumNatural’ + named item ‘fromInteger’ + named item ‘positiveFibonaccis_@name_suffix@’ + object ‘positiveFibonaccis_@name_suffix@’: + arity: 0 + literals: + top-level string "Example" + top-level string "main" + cost center of breakpoint 13 + info table of ‘(:)’ + used items: + break array of module ‘Example’ + object ‘positiveFibonaccis_sat_@name_suffix@’: + arity: 0 + literals: + top-level string "Example" + top-level string "main" + cost center of breakpoint 12 + used items: + break array of module ‘Example’ + object ‘positiveFibonaccis_sat_@name_suffix@’: + arity: 0 + literals: <none> + used items: + named item ‘$fNumNatural’ + named item ‘(+)’ + named item ‘positiveFibonaccis_@name_suffix@’ + named item ‘fibonaccis’ + named item ‘zipWith’ + object ‘positiveFibonaccis_sat_@name_suffix@’: + arity: 0 + literals: + word 1 + info table of ‘IS’ + used items: + named item ‘$fNumNatural’ + named item ‘fromInteger’ + object ‘$dTypeable2_@name_suffix@’: + arity: 0 + literals: <none> + used items: + named item ‘$dTypeable_@name_suffix@’ + named item ‘$dTypeable1_@name_suffix@’ + named item ‘mkTrAppChecked’ + object ‘$dTypeable1_@name_suffix@’: + arity: 0 + literals: info table of ‘[]’ + used items: + named item ‘$tcList’ + named item ‘mkTrCon’ + object ‘$dTypeable_@name_suffix@’: + arity: 0 + literals: info table of ‘[]’ + used items: + named item ‘$tcNatural’ + named item ‘mkTrCon’ + object ‘cstrlen’: + arity: 2 + literals: <none> + used items: named item ‘cstrlen1_@name_suffix@’ + object ‘cstrlen1_@name_suffix@’: + arity: 2 + literals: <none> + used items: + object ‘ds1_@name_suffix@’: + arity: 0 + literals: + label ‘strlen’ + word 0 + foreign function of type ‘Pointer -> UInt@word_size@’ + used items: + object ‘wild_@name_suffix@’: + arity: 0 + literals: info table of ‘W@word_size@#’ + used items: <none> + static-construction object ‘$tc'Nested’: + data constructor: TyCon + lifted: yes + literals: + word @large_word@ + word 1 + used items: + named item ‘$trModule’ + named item ‘$tc'Nested2_@name_suffix@’ + named item ‘$krep17_@name_suffix@’ + static-construction object ‘$tc'Nested2_@name_suffix@’: + data constructor: TrNameS + lifted: yes + literals: address ‘$tc'Nested1_@name_suffix@’ + used items: <none> + static-construction object ‘$krep17_@name_suffix@’: + data constructor: KindRepFun + lifted: yes + literals: <none> + used items: + named item ‘$krep16_@name_suffix@’ + named item ‘$krep13_@name_suffix@’ + static-construction object ‘$krep16_@name_suffix@’: + data constructor: KindRepTyConApp + lifted: yes + literals: <none> + used items: + named item ‘$tcPerfectTree’ + named item ‘$krep15_@name_suffix@’ + static-construction object ‘$krep15_@name_suffix@’: + data constructor: (:) + lifted: yes + literals: <none> + used items: + named item ‘$krep4_@name_suffix@’ + named item ‘[]’ + static-construction object ‘$tc'PerfectTree’: + data constructor: TyCon + lifted: yes + literals: + word @large_word@ + word 1 + used items: + named item ‘$trModule’ + named item ‘$tc'PerfectTree2_@name_suffix@’ + named item ‘$krep14_@name_suffix@’ + static-construction object ‘$tc'PerfectTree2_@name_suffix@’: + data constructor: TrNameS + lifted: yes + literals: address ‘$tc'PerfectTree1_@name_suffix@’ + used items: <none> + static-construction object ‘$krep14_@name_suffix@’: + data constructor: KindRepFun + lifted: yes + literals: <none> + used items: + named item ‘$krep1_@name_suffix@’ + named item ‘$krep13_@name_suffix@’ + static-construction object ‘$krep13_@name_suffix@’: + data constructor: KindRepTyConApp + lifted: yes + literals: <none> + used items: + named item ‘$tcPerfectTree’ + named item ‘$krep12_@name_suffix@’ + static-construction object ‘$krep12_@name_suffix@’: + data constructor: (:) + lifted: yes + literals: <none> + used items: + named item ‘$krep1_@name_suffix@’ + named item ‘[]’ + static-construction object ‘$tcPerfectTree’: + data constructor: TyCon + lifted: yes + literals: + word @large_word@ + word 0 + used items: + named item ‘$trModule’ + named item ‘$tcPerfectTree2_@name_suffix@’ + named item ‘krepStarArr’ + static-construction object ‘$tcPerfectTree2_@name_suffix@’: + data constructor: TrNameS + lifted: yes + literals: address ‘$tcPerfectTree1_@name_suffix@’ + used items: <none> + static-construction object ‘$tc'Node’: + data constructor: TyCon + lifted: yes + literals: + word @large_word@ + word 2 + used items: + named item ‘$trModule’ + named item ‘$tc'Node2_@name_suffix@’ + named item ‘$krep11_@name_suffix@’ + static-construction object ‘$tc'Node2_@name_suffix@’: + data constructor: TrNameS + lifted: yes + literals: address ‘$tc'Node1_@name_suffix@’ + used items: <none> + static-construction object ‘$krep11_@name_suffix@’: + data constructor: KindRepFun + lifted: yes + literals: <none> + used items: + named item ‘$krep7_@name_suffix@’ + named item ‘$krep10_@name_suffix@’ + static-construction object ‘$krep10_@name_suffix@’: + data constructor: KindRepFun + lifted: yes + literals: <none> + used items: + named item ‘$krep_@name_suffix@’ + named item ‘$krep9_@name_suffix@’ + static-construction object ‘$krep9_@name_suffix@’: + data constructor: KindRepFun + lifted: yes + literals: <none> + used items: + named item ‘$krep7_@name_suffix@’ + static-construction object ‘$tc'Leaf’: + data constructor: TyCon + lifted: yes + literals: + word @large_word@ + word 2 + used items: + named item ‘$trModule’ + named item ‘$tc'Leaf2_@name_suffix@’ + named item ‘$krep8_@name_suffix@’ + static-construction object ‘$tc'Leaf2_@name_suffix@’: + data constructor: TrNameS + lifted: yes + literals: address ‘$tc'Leaf1_@name_suffix@’ + used items: <none> + static-construction object ‘$krep8_@name_suffix@’: + data constructor: KindRepFun + lifted: yes + literals: <none> + used items: + named item ‘$krep1_@name_suffix@’ + named item ‘$krep7_@name_suffix@’ + static-construction object ‘$krep7_@name_suffix@’: + data constructor: KindRepTyConApp + lifted: yes + literals: <none> + used items: + named item ‘$tcBinTree’ + named item ‘$krep6_@name_suffix@’ + static-construction object ‘$krep6_@name_suffix@’: + data constructor: (:) + lifted: yes + literals: <none> + used items: + named item ‘$krep1_@name_suffix@’ + named item ‘$krep5_@name_suffix@’ + static-construction object ‘$krep5_@name_suffix@’: + data constructor: (:) + lifted: yes + literals: <none> + used items: + named item ‘$krep_@name_suffix@’ + named item ‘[]’ + static-construction object ‘$tcBinTree’: + data constructor: TyCon + lifted: yes + literals: + word @large_word@ + word 0 + used items: + named item ‘$trModule’ + named item ‘$tcBinTree2_@name_suffix@’ + named item ‘krepStarArrStarArr’ + static-construction object ‘$tcBinTree2_@name_suffix@’: + data constructor: TrNameS + lifted: yes + literals: address ‘$tcBinTree1_@name_suffix@’ + used items: <none> + static-construction object ‘$krep4_@name_suffix@’: + data constructor: KindRepTyConApp + lifted: yes + literals: <none> + used items: + named item ‘$tcTuple2’ + named item ‘$krep3_@name_suffix@’ + static-construction object ‘$krep3_@name_suffix@’: + data constructor: (:) + lifted: yes + literals: <none> + used items: + named item ‘$krep1_@name_suffix@’ + named item ‘$krep2_@name_suffix@’ + static-construction object ‘$krep2_@name_suffix@’: + data constructor: (:) + lifted: yes + literals: <none> + used items: + named item ‘$krep1_@name_suffix@’ + named item ‘[]’ + static-construction object ‘$krep1_@name_suffix@’: + data constructor: KindRepVar + lifted: yes + literals: word 0 + used items: <none> + static-construction object ‘$krep_@name_suffix@’: + data constructor: KindRepVar + lifted: yes + literals: word 1 + used items: <none> + static-construction object ‘$trModule’: + data constructor: Module + lifted: yes + literals: <none> + used items: + named item ‘$trModule2_@name_suffix@’ + named item ‘$trModule4_@name_suffix@’ + static-construction object ‘$trModule4_@name_suffix@’: + data constructor: TrNameS + lifted: yes + literals: address ‘$trModule3_@name_suffix@’ + used items: <none> + static-construction object ‘$trModule2_@name_suffix@’: + data constructor: TrNameS + lifted: yes + literals: address ‘$trModule1_@name_suffix@’ + used items: <none> + object ‘divides’: + arity: 3 + literals: <none> + used items: + object ‘$dReal_@name_suffix@’: + arity: 0 + literals: <none> + used items: + object ‘$dNum_@name_suffix@’: + arity: 0 + literals: <none> + used items: + object ‘$dEq_@name_suffix@’: + arity: 0 + literals: <none> + used items: + object ‘$dEq1_@name_suffix@’: + arity: 0 + literals: <none> + used items: + object ‘bcprep_@name_suffix@’: + arity: 5 + literals: + top-level string "Example" + top-level string "main" + cost center of breakpoint 15 + used items: + break array of module ‘Example’ + object ‘divides_sat_@name_suffix@’: + arity: 1 + literals: + word 0 + info table of ‘IS’ + used items: named item ‘fromInteger’ + object ‘divides_sat_@name_suffix@’: + arity: 3 + literals: + top-level string "Example" + top-level string "main" + cost center of breakpoint 14 + used items: + break array of module ‘Example’ + named item ‘mod’ + named item ‘(==)’ + named item ‘$p1Ord’ + named item ‘$p2Real’ + named item ‘$p1Real’ + named item ‘$p1Integral’ + object ‘Node’: + arity: 3 + literals: info table of ‘Node’ + used items: <none> + object ‘Leaf’: + arity: 1 + literals: info table of ‘Leaf’ + used items: <none> + object ‘Nested’: + arity: 1 + literals: info table of ‘Nested’ + used items: <none> + object ‘PerfectTree’: + arity: 1 + literals: info table of ‘PerfectTree’ + used items: <none> +data constructor info tables: + info table of ‘PerfectTree’: + number of words for pointers: 1 + number of words for non-pointers: 0 + info table of ‘Nested’: + number of words for pointers: 1 + number of words for non-pointers: 0 + info table of ‘Leaf’: + number of words for pointers: 1 + number of words for non-pointers: 0 + info table of ‘Node’: + number of words for pointers: 3 + number of words for non-pointers: 0 +top-level strings: + $tc'Nested1_@name_suffix@: "'Nested" + $tc'PerfectTree1_@name_suffix@: "'PerfectTree" + $tcPerfectTree1_@name_suffix@: "PerfectTree" + $tc'Node1_@name_suffix@: "'Node" + $tc'Leaf1_@name_suffix@: "'Leaf" + $tcBinTree1_@name_suffix@: "BinTree" + $trModule3_@name_suffix@: "Example" + $trModule1_@name_suffix@: "main" +breakpoints: + source breakpoints: + source breakpoint 0: + source span: Example.hs:29:17-25 + declaration path: divides + free variables: + k + n + source breakpoint 1: + source span: Example.hs:29:17-30 + declaration path: divides + free variables: + k + n + source breakpoint 2: + source span: Example.hs:35:27-37 + declaration path: + primes + isPrime + free variables: n + source breakpoint 3: + source span: Example.hs:35:53-56 + declaration path: + primes + isPrime + free variables: n + source breakpoint 4: + source span: Example.hs:35:62-64 + declaration path: + primes + isPrime + free variables: <none> + source breakpoint 5: + source span: Example.hs:35:52-65 + declaration path: + primes + isPrime + free variables: n + source breakpoint 6: + source span: Example.hs:35:41-73 + declaration path: + primes + isPrime + free variables: n + source breakpoint 7: + source span: Example.hs:35:22-74 + declaration path: + primes + isPrime + free variables: n + source breakpoint 8: + source span: Example.hs:35:17-75 + declaration path: + primes + isPrime + free variables: n + source breakpoint 9: + source span: Example.hs:32:14-34 + declaration path: primes + free variables: isPrime + source breakpoint 10: + source span: Example.hs:32:10-34 + declaration path: primes + free variables: isPrime + source breakpoint 11: + source span: Example.hs:38:13-25 + declaration path: primesPtr + free variables: <none> + source breakpoint 12: + source span: Example.hs:23:30-70 + declaration path: + fibonaccis + positiveFibonaccis + free variables: positiveFibonaccis + source breakpoint 13: + source span: Example.hs:23:26-70 + declaration path: + fibonaccis + positiveFibonaccis + free variables: positiveFibonaccis + source breakpoint 14: + source span: Example.hs:20:14-35 + declaration path: fibonaccis + free variables: positiveFibonaccis + source breakpoint 15: + source span: Example.hs:26:17-33 + declaration path: fibonaccisPtr + free variables: <none> + bytecode breakpoints: + bytecode breakpoint 0: + type: StaticPtr [Natural] + type variables: <none> + variables: <none> + corresponding source breakpoint: 11 + bytecode breakpoint 1: + type: [Natural] + type variables: <none> + variables: <unknown> + corresponding source breakpoint: 9 + bytecode breakpoint 2: + type: [Natural] + type variables: <none> + variables: <unknown> + corresponding source breakpoint: 10 + bytecode breakpoint 3: + type: Natural -> Bool + type variables: <none> + variables: %'Many n :: Natural + corresponding source breakpoint: 2 + bytecode breakpoint 4: + type: Natural -> Bool + type variables: <none> + variables: %'Many n :: Natural + corresponding source breakpoint: 3 + bytecode breakpoint 5: + type: Natural -> Natural + type variables: <none> + variables: <none> + corresponding source breakpoint: 4 + bytecode breakpoint 6: + type: Natural -> Bool + type variables: <none> + variables: %'Many n :: Natural + corresponding source breakpoint: 5 + bytecode breakpoint 7: + type: [Natural] + type variables: <none> + variables: %'Many n :: Natural + corresponding source breakpoint: 6 + bytecode breakpoint 8: + type: Bool + type variables: <none> + variables: %'Many n :: Natural + corresponding source breakpoint: 7 + bytecode breakpoint 9: + type: Bool + type variables: <none> + variables: %'Many n :: Natural + corresponding source breakpoint: 8 + bytecode breakpoint 10: + type: StaticPtr [Natural] + type variables: <none> + variables: <none> + corresponding source breakpoint: 15 + bytecode breakpoint 11: + type: [Natural] + type variables: <none> + variables: <unknown> + corresponding source breakpoint: 14 + bytecode breakpoint 12: + type: [Natural] + type variables: <none> + variables: <unknown> + corresponding source breakpoint: 12 + bytecode breakpoint 13: + type: [Natural] + type variables: <none> + variables: <unknown> + corresponding source breakpoint: 13 + bytecode breakpoint 14: + type: a + type variables: a :: * + variables: + %'Many eta :: a + %'Many eta1 :: a + corresponding source breakpoint: 0 + bytecode breakpoint 15: + type: Bool + type variables: a :: * + variables: + %'Many eta :: a + %'Many eta1 :: a + corresponding source breakpoint: 1 +static-pointer table entries: + @hash@: static_ptr + @hash@: static_ptr1 +HPC information: <none> + ===================================== testsuite/tests/show-bytecode/show-bytecode-hpc.stdout ===================================== @@ -0,0 +1,658 @@ +[1 of 1] Compiling Example ( Example.hs, Example.gbc ) +module: Example +hash: @hash@ +objects: + object ‘primesPtr’: + arity: 0 + literals: + label ‘_hpc_tickboxes_Example_hpc’ + used items: + named item ‘static_ptr1’ + named item ‘$dTypeable2_@name_suffix@’ + named item ‘$fIsStaticStaticPtr’ + static-construction object ‘static_ptr1’: + data constructor: StaticPtr + lifted: yes + literals: + word @large_word@ + used items: + named item ‘static_ptr1_sat_@name_suffix@’ + static-construction object ‘static_ptr1_sat_@name_suffix@’: + data constructor: StaticPtrInfo + lifted: yes + literals: <none> + used items: + named item ‘static_ptr1_sat_@name_suffix@’ + object ‘static_ptr1_sat_@name_suffix@’: + arity: 0 + literals: top-level string "main" + used items: + object ‘static_ptr1_sat_@name_suffix@’: + arity: 0 + literals: <none> + used items: named item ‘unpackCString#’ + object ‘static_ptr1_sat_@name_suffix@’: + arity: 0 + literals: top-level string "Example" + used items: + object ‘static_ptr1_sat_@name_suffix@’: + arity: 0 + literals: <none> + used items: named item ‘unpackCString#’ + static-construction object ‘static_ptr1_sat_@name_suffix@’: + data constructor: (,) + lifted: yes + literals: <none> + used items: + named item ‘static_ptr1_sat_@name_suffix@’ + static-construction object ‘static_ptr1_sat_@name_suffix@’: + data constructor: I# + lifted: yes + literals: word @large_word@ + used items: <none> + static-construction object ‘static_ptr1_sat_@name_suffix@’: + data constructor: I# + lifted: yes + literals: word @large_word@ + used items: <none> + object ‘static_ptr1_sat_@name_suffix@’: + arity: 0 + literals: label ‘_hpc_tickboxes_Example_hpc’ + used items: named item ‘primes’ + object ‘primes2_@name_suffix@’: + arity: 0 + literals: label ‘_hpc_tickboxes_Example_hpc’ + used items: + object ‘primes2_sat_@name_suffix@’: + arity: 0 + literals: label ‘_hpc_tickboxes_Example_hpc’ + used items: + object ‘primes2_sat_@name_suffix@’: + arity: 0 + literals: + label ‘_hpc_tickboxes_Example_hpc’ + word 3 + info table of ‘IS’ + used items: + named item ‘$fNumNatural’ + named item ‘fromInteger’ + named item ‘$fEnumNatural’ + named item ‘enumFrom’ + object ‘primes2_sat_@name_suffix@’: + arity: 0 + literals: label ‘_hpc_tickboxes_Example_hpc’ + used items: named item ‘isPrime_@name_suffix@’ + named item ‘filter’ + object ‘isPrime_@name_suffix@’: + arity: 1 + literals: + label ‘_hpc_tickboxes_Example_hpc’ + used items: + object ‘isPrime_sat_@name_suffix@’: + arity: 1 + literals: label ‘_hpc_tickboxes_Example_hpc’ + used items: + object ‘isPrime_sat_@name_suffix@’: + arity: 1 + literals: label ‘_hpc_tickboxes_Example_hpc’ + used items: + object ‘isPrime_sat_@name_suffix@’: + arity: 0 + literals: label ‘_hpc_tickboxes_Example_hpc’ + used items: named item ‘primes’ + object ‘isPrime_sat_@name_suffix@’: + arity: 1 + literals: label ‘_hpc_tickboxes_Example_hpc’ + used items: + object ‘isPrime_sat_@name_suffix@’: + arity: 0 + literals: label ‘_hpc_tickboxes_Example_hpc’ + used items: + object ‘v_@name_suffix@’: + arity: 0 + literals: label ‘_hpc_tickboxes_Example_hpc’ + used items: + named item ‘$fIntegralInteger’ + named item ‘$fNumNatural’ + named item ‘(^)’ + object ‘v1_@name_suffix@’: + arity: 0 + literals: + label ‘_hpc_tickboxes_Example_hpc’ + word 2 + info table of ‘IS’ + used items: <none> + object ‘pap_@name_suffix@’: + arity: 3 + literals: <none> + used items: <none> + object ‘isPrime_sat_@name_suffix@’: + arity: 1 + literals: label ‘_hpc_tickboxes_Example_hpc’ + used items: + object ‘v_@name_suffix@’: + arity: 0 + literals: label ‘_hpc_tickboxes_Example_hpc’ + used items: + named item ‘$fOrdNatural’ + named item ‘(<=)’ + object ‘v1_@name_suffix@’: + arity: 1 + literals: label ‘_hpc_tickboxes_Example_hpc’ + used items: <none> + object ‘pap_@name_suffix@’: + arity: 3 + literals: <none> + used items: <none> + named item ‘(.)’ + named item ‘takeWhile’ + object ‘isPrime_sat_@name_suffix@’: + arity: 1 + literals: label ‘_hpc_tickboxes_Example_hpc’ + used items: + object ‘v_@name_suffix@’: + arity: 0 + literals: label ‘_hpc_tickboxes_Example_hpc’ + used items: + object ‘pap_@name_suffix@’: + arity: 2 + literals: <none> + used items: + named item ‘$fIntegralNatural’ + named item ‘divides’ + object ‘v1_@name_suffix@’: + arity: 1 + literals: label ‘_hpc_tickboxes_Example_hpc’ + used items: <none> + object ‘pap_@name_suffix@’: + arity: 3 + literals: <none> + used items: <none> + named item ‘$fFoldableList’ + named item ‘any’ + named item ‘not’ + object ‘primes’: + arity: 0 + literals: + label ‘_hpc_tickboxes_Example_hpc’ + info table of ‘(:)’ + used items: + named item ‘primes2_@name_suffix@’ + named item ‘primes1_@name_suffix@’ + object ‘primes1_@name_suffix@’: + arity: 0 + literals: + label ‘_hpc_tickboxes_Example_hpc’ + word 2 + info table of ‘IS’ + used items: + named item ‘$fNumNatural’ + named item ‘fromInteger’ + object ‘fibonaccisPtr’: + arity: 0 + literals: + label ‘_hpc_tickboxes_Example_hpc’ + used items: + named item ‘static_ptr’ + named item ‘$dTypeable2_@name_suffix@’ + named item ‘$fIsStaticStaticPtr’ + static-construction object ‘static_ptr’: + data constructor: StaticPtr + lifted: yes + literals: + word @large_word@ + used items: + named item ‘static_ptr_sat_@name_suffix@’ + static-construction object ‘static_ptr_sat_@name_suffix@’: + data constructor: StaticPtrInfo + lifted: yes + literals: <none> + used items: + named item ‘static_ptr_sat_@name_suffix@’ + object ‘static_ptr_sat_@name_suffix@’: + arity: 0 + literals: top-level string "main" + used items: + object ‘static_ptr_sat_@name_suffix@’: + arity: 0 + literals: <none> + used items: named item ‘unpackCString#’ + object ‘static_ptr_sat_@name_suffix@’: + arity: 0 + literals: top-level string "Example" + used items: + object ‘static_ptr_sat_@name_suffix@’: + arity: 0 + literals: <none> + used items: named item ‘unpackCString#’ + static-construction object ‘static_ptr_sat_@name_suffix@’: + data constructor: (,) + lifted: yes + literals: <none> + used items: + named item ‘static_ptr_sat_@name_suffix@’ + static-construction object ‘static_ptr_sat_@name_suffix@’: + data constructor: I# + lifted: yes + literals: word @large_word@ + used items: <none> + static-construction object ‘static_ptr_sat_@name_suffix@’: + data constructor: I# + lifted: yes + literals: word @large_word@ + used items: <none> + object ‘static_ptr_sat_@name_suffix@’: + arity: 0 + literals: label ‘_hpc_tickboxes_Example_hpc’ + used items: named item ‘fibonaccis’ + object ‘positiveFibonaccis1_@name_suffix@’: + arity: 0 + literals: + label ‘_hpc_tickboxes_Example_hpc’ + info table of ‘(:)’ + used items: + named item ‘positiveFibonaccis2_@name_suffix@’ + named item ‘positiveFibonaccis_@name_suffix@’ + object ‘positiveFibonaccis2_@name_suffix@’: + arity: 0 + literals: label ‘_hpc_tickboxes_Example_hpc’ + used items: + object ‘positiveFibonaccis2_sat_@name_suffix@’: + arity: 0 + literals: label ‘_hpc_tickboxes_Example_hpc’ + used items: named item ‘positiveFibonaccis1_@name_suffix@’ + object ‘positiveFibonaccis2_sat_@name_suffix@’: + arity: 0 + literals: label ‘_hpc_tickboxes_Example_hpc’ + used items: named item ‘fibonaccis’ + object ‘positiveFibonaccis2_sat_@name_suffix@’: + arity: 0 + literals: label ‘_hpc_tickboxes_Example_hpc’ + used items: + named item ‘$fNumNatural’ + named item ‘(+)’ + named item ‘zipWith’ + object ‘fibonaccis’: + arity: 0 + literals: + label ‘_hpc_tickboxes_Example_hpc’ + info table of ‘(:)’ + used items: + named item ‘fibonaccis2_@name_suffix@’ + named item ‘fibonaccis1_@name_suffix@’ + object ‘fibonaccis2_@name_suffix@’: + arity: 0 + literals: label ‘_hpc_tickboxes_Example_hpc’ + used items: named item ‘positiveFibonaccis1_@name_suffix@’ + object ‘positiveFibonaccis_@name_suffix@’: + arity: 0 + literals: + label ‘_hpc_tickboxes_Example_hpc’ + word 1 + info table of ‘IS’ + used items: + named item ‘$fNumNatural’ + named item ‘fromInteger’ + object ‘fibonaccis1_@name_suffix@’: + arity: 0 + literals: + label ‘_hpc_tickboxes_Example_hpc’ + word 0 + info table of ‘IS’ + used items: + named item ‘$fNumNatural’ + named item ‘fromInteger’ + object ‘$dTypeable2_@name_suffix@’: + arity: 0 + literals: <none> + used items: + named item ‘$dTypeable_@name_suffix@’ + named item ‘$dTypeable1_@name_suffix@’ + named item ‘mkTrAppChecked’ + object ‘$dTypeable1_@name_suffix@’: + arity: 0 + literals: info table of ‘[]’ + used items: + named item ‘$tcList’ + named item ‘mkTrCon’ + object ‘$dTypeable_@name_suffix@’: + arity: 0 + literals: info table of ‘[]’ + used items: + named item ‘$tcNatural’ + named item ‘mkTrCon’ + object ‘cstrlen’: + arity: 2 + literals: <none> + used items: + object ‘ds1_@name_suffix@’: + arity: 0 + literals: + label ‘strlen’ + word 0 + foreign function of type ‘Pointer -> UInt@word_size@’ + used items: + object ‘wild_@name_suffix@’: + arity: 0 + literals: info table of ‘W@word_size@#’ + used items: <none> + static-construction object ‘$tc'Nested’: + data constructor: TyCon + lifted: yes + literals: + word @large_word@ + word 1 + used items: + named item ‘$trModule’ + named item ‘$tc'Nested2_@name_suffix@’ + named item ‘$krep17_@name_suffix@’ + static-construction object ‘$tc'Nested2_@name_suffix@’: + data constructor: TrNameS + lifted: yes + literals: address ‘$tc'Nested1_@name_suffix@’ + used items: <none> + static-construction object ‘$krep17_@name_suffix@’: + data constructor: KindRepFun + lifted: yes + literals: <none> + used items: + named item ‘$krep16_@name_suffix@’ + named item ‘$krep13_@name_suffix@’ + static-construction object ‘$krep16_@name_suffix@’: + data constructor: KindRepTyConApp + lifted: yes + literals: <none> + used items: + named item ‘$tcPerfectTree’ + named item ‘$krep15_@name_suffix@’ + static-construction object ‘$krep15_@name_suffix@’: + data constructor: (:) + lifted: yes + literals: <none> + used items: + named item ‘$krep4_@name_suffix@’ + named item ‘[]’ + static-construction object ‘$tc'PerfectTree’: + data constructor: TyCon + lifted: yes + literals: + word @large_word@ + word 1 + used items: + named item ‘$trModule’ + named item ‘$tc'PerfectTree2_@name_suffix@’ + named item ‘$krep14_@name_suffix@’ + static-construction object ‘$tc'PerfectTree2_@name_suffix@’: + data constructor: TrNameS + lifted: yes + literals: address ‘$tc'PerfectTree1_@name_suffix@’ + used items: <none> + static-construction object ‘$krep14_@name_suffix@’: + data constructor: KindRepFun + lifted: yes + literals: <none> + used items: + named item ‘$krep1_@name_suffix@’ + named item ‘$krep13_@name_suffix@’ + static-construction object ‘$krep13_@name_suffix@’: + data constructor: KindRepTyConApp + lifted: yes + literals: <none> + used items: + named item ‘$tcPerfectTree’ + named item ‘$krep12_@name_suffix@’ + static-construction object ‘$krep12_@name_suffix@’: + data constructor: (:) + lifted: yes + literals: <none> + used items: + named item ‘$krep1_@name_suffix@’ + named item ‘[]’ + static-construction object ‘$tcPerfectTree’: + data constructor: TyCon + lifted: yes + literals: + word @large_word@ + word 0 + used items: + named item ‘$trModule’ + named item ‘$tcPerfectTree2_@name_suffix@’ + named item ‘krepStarArr’ + static-construction object ‘$tcPerfectTree2_@name_suffix@’: + data constructor: TrNameS + lifted: yes + literals: address ‘$tcPerfectTree1_@name_suffix@’ + used items: <none> + static-construction object ‘$tc'Node’: + data constructor: TyCon + lifted: yes + literals: + word @large_word@ + word 2 + used items: + named item ‘$trModule’ + named item ‘$tc'Node2_@name_suffix@’ + named item ‘$krep11_@name_suffix@’ + static-construction object ‘$tc'Node2_@name_suffix@’: + data constructor: TrNameS + lifted: yes + literals: address ‘$tc'Node1_@name_suffix@’ + used items: <none> + static-construction object ‘$krep11_@name_suffix@’: + data constructor: KindRepFun + lifted: yes + literals: <none> + used items: + named item ‘$krep7_@name_suffix@’ + named item ‘$krep10_@name_suffix@’ + static-construction object ‘$krep10_@name_suffix@’: + data constructor: KindRepFun + lifted: yes + literals: <none> + used items: + named item ‘$krep_@name_suffix@’ + named item ‘$krep9_@name_suffix@’ + static-construction object ‘$krep9_@name_suffix@’: + data constructor: KindRepFun + lifted: yes + literals: <none> + used items: + named item ‘$krep7_@name_suffix@’ + static-construction object ‘$tc'Leaf’: + data constructor: TyCon + lifted: yes + literals: + word @large_word@ + word 2 + used items: + named item ‘$trModule’ + named item ‘$tc'Leaf2_@name_suffix@’ + named item ‘$krep8_@name_suffix@’ + static-construction object ‘$tc'Leaf2_@name_suffix@’: + data constructor: TrNameS + lifted: yes + literals: address ‘$tc'Leaf1_@name_suffix@’ + used items: <none> + static-construction object ‘$krep8_@name_suffix@’: + data constructor: KindRepFun + lifted: yes + literals: <none> + used items: + named item ‘$krep1_@name_suffix@’ + named item ‘$krep7_@name_suffix@’ + static-construction object ‘$krep7_@name_suffix@’: + data constructor: KindRepTyConApp + lifted: yes + literals: <none> + used items: + named item ‘$tcBinTree’ + named item ‘$krep6_@name_suffix@’ + static-construction object ‘$krep6_@name_suffix@’: + data constructor: (:) + lifted: yes + literals: <none> + used items: + named item ‘$krep1_@name_suffix@’ + named item ‘$krep5_@name_suffix@’ + static-construction object ‘$krep5_@name_suffix@’: + data constructor: (:) + lifted: yes + literals: <none> + used items: + named item ‘$krep_@name_suffix@’ + named item ‘[]’ + static-construction object ‘$tcBinTree’: + data constructor: TyCon + lifted: yes + literals: + word @large_word@ + word 0 + used items: + named item ‘$trModule’ + named item ‘$tcBinTree2_@name_suffix@’ + named item ‘krepStarArrStarArr’ + static-construction object ‘$tcBinTree2_@name_suffix@’: + data constructor: TrNameS + lifted: yes + literals: address ‘$tcBinTree1_@name_suffix@’ + used items: <none> + static-construction object ‘$krep4_@name_suffix@’: + data constructor: KindRepTyConApp + lifted: yes + literals: <none> + used items: + named item ‘$tcTuple2’ + named item ‘$krep3_@name_suffix@’ + static-construction object ‘$krep3_@name_suffix@’: + data constructor: (:) + lifted: yes + literals: <none> + used items: + named item ‘$krep1_@name_suffix@’ + named item ‘$krep2_@name_suffix@’ + static-construction object ‘$krep2_@name_suffix@’: + data constructor: (:) + lifted: yes + literals: <none> + used items: + named item ‘$krep1_@name_suffix@’ + named item ‘[]’ + static-construction object ‘$krep1_@name_suffix@’: + data constructor: KindRepVar + lifted: yes + literals: word 0 + used items: <none> + static-construction object ‘$krep_@name_suffix@’: + data constructor: KindRepVar + lifted: yes + literals: word 1 + used items: <none> + static-construction object ‘$trModule’: + data constructor: Module + lifted: yes + literals: <none> + used items: + named item ‘$trModule2_@name_suffix@’ + named item ‘$trModule4_@name_suffix@’ + static-construction object ‘$trModule4_@name_suffix@’: + data constructor: TrNameS + lifted: yes + literals: address ‘$trModule3_@name_suffix@’ + used items: <none> + static-construction object ‘$trModule2_@name_suffix@’: + data constructor: TrNameS + lifted: yes + literals: address ‘$trModule1_@name_suffix@’ + used items: <none> + object ‘divides’: + arity: 3 + literals: <none> + used items: + object ‘$dReal_@name_suffix@’: + arity: 0 + literals: + label ‘_hpc_tickboxes_Example_hpc’ + used items: + object ‘divides_sat_@name_suffix@’: + arity: 1 + literals: + label ‘_hpc_tickboxes_Example_hpc’ + word 0 + info table of ‘IS’ + used items: + object ‘divides_sat_@name_suffix@’: + arity: 0 + literals: <none> + used items: named item ‘fromInteger’ + named item ‘$p1Real’ + object ‘divides_sat_@name_suffix@’: + arity: 3 + literals: label ‘_hpc_tickboxes_Example_hpc’ + used items: + object ‘divides_sat_@name_suffix@’: + arity: 1 + literals: label ‘_hpc_tickboxes_Example_hpc’ + used items: <none> + object ‘divides_sat_@name_suffix@’: + arity: 1 + literals: label ‘_hpc_tickboxes_Example_hpc’ + used items: <none> + named item ‘mod’ + object ‘divides_sat_@name_suffix@’: + arity: 0 + literals: <none> + used items: + object ‘divides_sat_@name_suffix@’: + arity: 0 + literals: <none> + used items: named item ‘(==)’ + named item ‘$p1Ord’ + named item ‘$p2Real’ + named item ‘$p1Integral’ + object ‘Node’: + arity: 3 + literals: info table of ‘Node’ + used items: <none> + object ‘Leaf’: + arity: 1 + literals: info table of ‘Leaf’ + used items: <none> + object ‘Nested’: + arity: 1 + literals: info table of ‘Nested’ + used items: <none> + object ‘PerfectTree’: + arity: 1 + literals: info table of ‘PerfectTree’ + used items: <none> +data constructor info tables: + info table of ‘PerfectTree’: + number of words for pointers: 1 + number of words for non-pointers: 0 + info table of ‘Nested’: + number of words for pointers: 1 + number of words for non-pointers: 0 + info table of ‘Leaf’: + number of words for pointers: 1 + number of words for non-pointers: 0 + info table of ‘Node’: + number of words for pointers: 3 + number of words for non-pointers: 0 +top-level strings: + $tc'Nested1_@name_suffix@: "'Nested" + $tc'PerfectTree1_@name_suffix@: "'PerfectTree" + $tcPerfectTree1_@name_suffix@: "PerfectTree" + $tc'Node1_@name_suffix@: "'Node" + $tc'Leaf1_@name_suffix@: "'Leaf" + $tcBinTree1_@name_suffix@: "BinTree" + $trModule3_@name_suffix@: "Example" + $trModule1_@name_suffix@: "main" +breakpoints: <none> +static-pointer table entries: + @hash@: static_ptr + @hash@: static_ptr1 +HPC information: + hash: @hash@ + tick box: _hpc_tickboxes_Example_hpc + number of ticks: 45 + ===================================== testsuite/tests/show-bytecode/show-bytecode-vanilla.stdout ===================================== @@ -0,0 +1,593 @@ +[1 of 1] Compiling Example ( Example.hs, Example.gbc ) +module: Example +hash: @hash@ +objects: + object ‘primesPtr’: + arity: 0 + literals: <none> + used items: + named item ‘static_ptr1’ + named item ‘$dTypeable2_@name_suffix@’ + named item ‘$fIsStaticStaticPtr’ + static-construction object ‘static_ptr1’: + data constructor: StaticPtr + lifted: yes + literals: + word @large_word@ + used items: + named item ‘static_ptr1_sat_@name_suffix@’ + named item ‘primes’ + static-construction object ‘static_ptr1_sat_@name_suffix@’: + data constructor: StaticPtrInfo + lifted: yes + literals: <none> + used items: + named item ‘static_ptr1_sat_@name_suffix@’ + object ‘static_ptr1_sat_@name_suffix@’: + arity: 0 + literals: top-level string "main" + used items: + object ‘static_ptr1_sat_@name_suffix@’: + arity: 0 + literals: <none> + used items: named item ‘unpackCString#’ + object ‘static_ptr1_sat_@name_suffix@’: + arity: 0 + literals: top-level string "Example" + used items: + object ‘static_ptr1_sat_@name_suffix@’: + arity: 0 + literals: <none> + used items: named item ‘unpackCString#’ + static-construction object ‘static_ptr1_sat_@name_suffix@’: + data constructor: (,) + lifted: yes + literals: <none> + used items: + named item ‘static_ptr1_sat_@name_suffix@’ + static-construction object ‘static_ptr1_sat_@name_suffix@’: + data constructor: I# + lifted: yes + literals: word @large_word@ + used items: <none> + static-construction object ‘static_ptr1_sat_@name_suffix@’: + data constructor: I# + lifted: yes + literals: word @large_word@ + used items: <none> + object ‘primes2_@name_suffix@’: + arity: 0 + literals: <none> + used items: + named item ‘primes2_sat_@name_suffix@’ + named item ‘isPrime_@name_suffix@’ + named item ‘filter’ + object ‘isPrime_@name_suffix@’: + arity: 1 + literals: <none> + used items: + object ‘isPrime_sat_@name_suffix@’: + arity: 1 + literals: <none> + used items: + object ‘isPrime_sat_@name_suffix@’: + arity: 1 + literals: <none> + used items: + object ‘isPrime_sat_@name_suffix@’: + arity: 1 + literals: + word 2 + info table of ‘IS’ + used items: + object ‘v_@name_suffix@’: + arity: 0 + literals: <none> + used items: + named item ‘$fIntegralInteger’ + named item ‘$fNumNatural’ + named item ‘(^)’ + object ‘isPrime_sat_@name_suffix@’: + arity: 3 + literals: <none> + used items: <none> + object ‘v_@name_suffix@’: + arity: 0 + literals: <none> + used items: + named item ‘$fOrdNatural’ + named item ‘(<=)’ + object ‘isPrime_sat_@name_suffix@’: + arity: 3 + literals: <none> + used items: <none> + named item ‘(.)’ + named item ‘primes’ + named item ‘takeWhile’ + object ‘isPrime_sat_@name_suffix@’: + arity: 2 + literals: <none> + used items: + named item ‘$fIntegralNatural’ + named item ‘divides’ + named item ‘$fFoldableList’ + named item ‘any’ + named item ‘not’ + static-construction object ‘primes’: + data constructor: (:) + lifted: yes + literals: <none> + used items: + named item ‘primes1_@name_suffix@’ + named item ‘primes2_@name_suffix@’ + object ‘primes2_sat_@name_suffix@’: + arity: 0 + literals: <none> + used items: + object ‘primes2_sat_@name_suffix@’: + arity: 0 + literals: + word 3 + info table of ‘IS’ + used items: + named item ‘$fNumNatural’ + named item ‘fromInteger’ + named item ‘$fEnumNatural’ + named item ‘enumFrom’ + object ‘primes1_@name_suffix@’: + arity: 0 + literals: <none> + used items: + named item ‘primes1_sat_@name_suffix@’ + named item ‘$fNumNatural’ + named item ‘fromInteger’ + static-construction object ‘primes1_sat_@name_suffix@’: + data constructor: IS + lifted: yes + literals: word 2 + used items: <none> + object ‘fibonaccisPtr’: + arity: 0 + literals: <none> + used items: + named item ‘static_ptr’ + named item ‘$dTypeable2_@name_suffix@’ + named item ‘$fIsStaticStaticPtr’ + static-construction object ‘static_ptr’: + data constructor: StaticPtr + lifted: yes + literals: + word @large_word@ + used items: + named item ‘static_ptr_sat_@name_suffix@’ + named item ‘fibonaccis’ + static-construction object ‘static_ptr_sat_@name_suffix@’: + data constructor: StaticPtrInfo + lifted: yes + literals: <none> + used items: + named item ‘static_ptr_sat_@name_suffix@’ + object ‘static_ptr_sat_@name_suffix@’: + arity: 0 + literals: top-level string "main" + used items: + object ‘static_ptr_sat_@name_suffix@’: + arity: 0 + literals: <none> + used items: named item ‘unpackCString#’ + object ‘static_ptr_sat_@name_suffix@’: + arity: 0 + literals: top-level string "Example" + used items: + object ‘static_ptr_sat_@name_suffix@’: + arity: 0 + literals: <none> + used items: named item ‘unpackCString#’ + static-construction object ‘static_ptr_sat_@name_suffix@’: + data constructor: (,) + lifted: yes + literals: <none> + used items: + named item ‘static_ptr_sat_@name_suffix@’ + static-construction object ‘static_ptr_sat_@name_suffix@’: + data constructor: I# + lifted: yes + literals: word @large_word@ + used items: <none> + static-construction object ‘static_ptr_sat_@name_suffix@’: + data constructor: I# + lifted: yes + literals: word @large_word@ + used items: <none> + object ‘positiveFibonaccis2_@name_suffix@’: + arity: 0 + literals: <none> + used items: + named item ‘positiveFibonaccis1_@name_suffix@’ + named item ‘fibonaccis’ + named item ‘positiveFibonaccis2_sat_@name_suffix@’ + named item ‘zipWith’ + static-construction object ‘positiveFibonaccis1_@name_suffix@’: + data constructor: (:) + lifted: yes + literals: <none> + used items: + named item ‘positiveFibonaccis_@name_suffix@’ + named item ‘positiveFibonaccis2_@name_suffix@’ + static-construction object ‘fibonaccis’: + data constructor: (:) + lifted: yes + literals: <none> + used items: + named item ‘fibonaccis1_@name_suffix@’ + named item ‘positiveFibonaccis1_@name_suffix@’ + object ‘positiveFibonaccis2_sat_@name_suffix@’: + arity: 0 + literals: <none> + used items: + named item ‘$fNumNatural’ + named item ‘(+)’ + object ‘positiveFibonaccis_@name_suffix@’: + arity: 0 + literals: <none> + used items: + named item ‘positiveFibonaccis_sat_@name_suffix@’ + named item ‘$fNumNatural’ + named item ‘fromInteger’ + static-construction object ‘positiveFibonaccis_sat_@name_suffix@’: + data constructor: IS + lifted: yes + literals: word 1 + used items: <none> + object ‘fibonaccis1_@name_suffix@’: + arity: 0 + literals: <none> + used items: + named item ‘fibonaccis1_sat_@name_suffix@’ + named item ‘$fNumNatural’ + named item ‘fromInteger’ + static-construction object ‘fibonaccis1_sat_@name_suffix@’: + data constructor: IS + lifted: yes + literals: word 0 + used items: <none> + object ‘$dTypeable2_@name_suffix@’: + arity: 0 + literals: <none> + used items: + named item ‘$dTypeable_@name_suffix@’ + named item ‘$dTypeable1_@name_suffix@’ + named item ‘mkTrAppChecked’ + object ‘$dTypeable1_@name_suffix@’: + arity: 0 + literals: info table of ‘[]’ + used items: + named item ‘$tcList’ + named item ‘mkTrCon’ + object ‘$dTypeable_@name_suffix@’: + arity: 0 + literals: info table of ‘[]’ + used items: + named item ‘$tcNatural’ + named item ‘mkTrCon’ + object ‘cstrlen’: + arity: 2 + literals: <none> + used items: + object ‘ds1_@name_suffix@’: + arity: 0 + literals: + label ‘strlen’ + word 0 + foreign function of type ‘Pointer -> UInt@word_size@’ + used items: + object ‘wild_@name_suffix@’: + arity: 0 + literals: info table of ‘W@word_size@#’ + used items: <none> + static-construction object ‘$tc'Nested’: + data constructor: TyCon + lifted: yes + literals: + word @large_word@ + word 1 + used items: + named item ‘$trModule’ + named item ‘$tc'Nested2_@name_suffix@’ + named item ‘$krep17_@name_suffix@’ + static-construction object ‘$tc'Nested2_@name_suffix@’: + data constructor: TrNameS + lifted: yes + literals: address ‘$tc'Nested1_@name_suffix@’ + used items: <none> + static-construction object ‘$krep17_@name_suffix@’: + data constructor: KindRepFun + lifted: yes + literals: <none> + used items: + named item ‘$krep16_@name_suffix@’ + named item ‘$krep13_@name_suffix@’ + static-construction object ‘$krep16_@name_suffix@’: + data constructor: KindRepTyConApp + lifted: yes + literals: <none> + used items: + named item ‘$tcPerfectTree’ + named item ‘$krep15_@name_suffix@’ + static-construction object ‘$krep15_@name_suffix@’: + data constructor: (:) + lifted: yes + literals: <none> + used items: + named item ‘$krep4_@name_suffix@’ + named item ‘[]’ + static-construction object ‘$tc'PerfectTree’: + data constructor: TyCon + lifted: yes + literals: + word @large_word@ + word 1 + used items: + named item ‘$trModule’ + named item ‘$tc'PerfectTree2_@name_suffix@’ + named item ‘$krep14_@name_suffix@’ + static-construction object ‘$tc'PerfectTree2_@name_suffix@’: + data constructor: TrNameS + lifted: yes + literals: address ‘$tc'PerfectTree1_@name_suffix@’ + used items: <none> + static-construction object ‘$krep14_@name_suffix@’: + data constructor: KindRepFun + lifted: yes + literals: <none> + used items: + named item ‘$krep1_@name_suffix@’ + named item ‘$krep13_@name_suffix@’ + static-construction object ‘$krep13_@name_suffix@’: + data constructor: KindRepTyConApp + lifted: yes + literals: <none> + used items: + named item ‘$tcPerfectTree’ + named item ‘$krep12_@name_suffix@’ + static-construction object ‘$krep12_@name_suffix@’: + data constructor: (:) + lifted: yes + literals: <none> + used items: + named item ‘$krep1_@name_suffix@’ + named item ‘[]’ + static-construction object ‘$tcPerfectTree’: + data constructor: TyCon + lifted: yes + literals: + word @large_word@ + word 0 + used items: + named item ‘$trModule’ + named item ‘$tcPerfectTree2_@name_suffix@’ + named item ‘krepStarArr’ + static-construction object ‘$tcPerfectTree2_@name_suffix@’: + data constructor: TrNameS + lifted: yes + literals: address ‘$tcPerfectTree1_@name_suffix@’ + used items: <none> + static-construction object ‘$tc'Node’: + data constructor: TyCon + lifted: yes + literals: + word @large_word@ + word 2 + used items: + named item ‘$trModule’ + named item ‘$tc'Node2_@name_suffix@’ + named item ‘$krep11_@name_suffix@’ + static-construction object ‘$tc'Node2_@name_suffix@’: + data constructor: TrNameS + lifted: yes + literals: address ‘$tc'Node1_@name_suffix@’ + used items: <none> + static-construction object ‘$krep11_@name_suffix@’: + data constructor: KindRepFun + lifted: yes + literals: <none> + used items: + named item ‘$krep7_@name_suffix@’ + named item ‘$krep10_@name_suffix@’ + static-construction object ‘$krep10_@name_suffix@’: + data constructor: KindRepFun + lifted: yes + literals: <none> + used items: + named item ‘$krep_@name_suffix@’ + named item ‘$krep9_@name_suffix@’ + static-construction object ‘$krep9_@name_suffix@’: + data constructor: KindRepFun + lifted: yes + literals: <none> + used items: + named item ‘$krep7_@name_suffix@’ + static-construction object ‘$tc'Leaf’: + data constructor: TyCon + lifted: yes + literals: + word @large_word@ + word 2 + used items: + named item ‘$trModule’ + named item ‘$tc'Leaf2_@name_suffix@’ + named item ‘$krep8_@name_suffix@’ + static-construction object ‘$tc'Leaf2_@name_suffix@’: + data constructor: TrNameS + lifted: yes + literals: address ‘$tc'Leaf1_@name_suffix@’ + used items: <none> + static-construction object ‘$krep8_@name_suffix@’: + data constructor: KindRepFun + lifted: yes + literals: <none> + used items: + named item ‘$krep1_@name_suffix@’ + named item ‘$krep7_@name_suffix@’ + static-construction object ‘$krep7_@name_suffix@’: + data constructor: KindRepTyConApp + lifted: yes + literals: <none> + used items: + named item ‘$tcBinTree’ + named item ‘$krep6_@name_suffix@’ + static-construction object ‘$krep6_@name_suffix@’: + data constructor: (:) + lifted: yes + literals: <none> + used items: + named item ‘$krep1_@name_suffix@’ + named item ‘$krep5_@name_suffix@’ + static-construction object ‘$krep5_@name_suffix@’: + data constructor: (:) + lifted: yes + literals: <none> + used items: + named item ‘$krep_@name_suffix@’ + named item ‘[]’ + static-construction object ‘$tcBinTree’: + data constructor: TyCon + lifted: yes + literals: + word @large_word@ + word 0 + used items: + named item ‘$trModule’ + named item ‘$tcBinTree2_@name_suffix@’ + named item ‘krepStarArrStarArr’ + static-construction object ‘$tcBinTree2_@name_suffix@’: + data constructor: TrNameS + lifted: yes + literals: address ‘$tcBinTree1_@name_suffix@’ + used items: <none> + static-construction object ‘$krep4_@name_suffix@’: + data constructor: KindRepTyConApp + lifted: yes + literals: <none> + used items: + named item ‘$tcTuple2’ + named item ‘$krep3_@name_suffix@’ + static-construction object ‘$krep3_@name_suffix@’: + data constructor: (:) + lifted: yes + literals: <none> + used items: + named item ‘$krep1_@name_suffix@’ + named item ‘$krep2_@name_suffix@’ + static-construction object ‘$krep2_@name_suffix@’: + data constructor: (:) + lifted: yes + literals: <none> + used items: + named item ‘$krep1_@name_suffix@’ + named item ‘[]’ + static-construction object ‘$krep1_@name_suffix@’: + data constructor: KindRepVar + lifted: yes + literals: word 0 + used items: <none> + static-construction object ‘$krep_@name_suffix@’: + data constructor: KindRepVar + lifted: yes + literals: word 1 + used items: <none> + static-construction object ‘$trModule’: + data constructor: Module + lifted: yes + literals: <none> + used items: + named item ‘$trModule2_@name_suffix@’ + named item ‘$trModule4_@name_suffix@’ + static-construction object ‘$trModule4_@name_suffix@’: + data constructor: TrNameS + lifted: yes + literals: address ‘$trModule3_@name_suffix@’ + used items: <none> + static-construction object ‘$trModule2_@name_suffix@’: + data constructor: TrNameS + lifted: yes + literals: address ‘$trModule1_@name_suffix@’ + used items: <none> + object ‘divides’: + arity: 3 + literals: <none> + used items: + object ‘$dReal_@name_suffix@’: + arity: 0 + literals: <none> + used items: + object ‘divides_sat_@name_suffix@’: + arity: 1 + literals: + word 0 + info table of ‘IS’ + used items: + object ‘divides_sat_@name_suffix@’: + arity: 0 + literals: <none> + used items: named item ‘fromInteger’ + named item ‘$p1Real’ + object ‘divides_sat_@name_suffix@’: + arity: 3 + literals: <none> + used items: named item ‘mod’ + object ‘divides_sat_@name_suffix@’: + arity: 0 + literals: <none> + used items: + object ‘divides_sat_@name_suffix@’: + arity: 0 + literals: <none> + used items: named item ‘(==)’ + named item ‘$p1Ord’ + named item ‘$p2Real’ + named item ‘$p1Integral’ + object ‘Node’: + arity: 3 + literals: info table of ‘Node’ + used items: <none> + object ‘Leaf’: + arity: 1 + literals: info table of ‘Leaf’ + used items: <none> + object ‘Nested’: + arity: 1 + literals: info table of ‘Nested’ + used items: <none> + object ‘PerfectTree’: + arity: 1 + literals: info table of ‘PerfectTree’ + used items: <none> +data constructor info tables: + info table of ‘PerfectTree’: + number of words for pointers: 1 + number of words for non-pointers: 0 + info table of ‘Nested’: + number of words for pointers: 1 + number of words for non-pointers: 0 + info table of ‘Leaf’: + number of words for pointers: 1 + number of words for non-pointers: 0 + info table of ‘Node’: + number of words for pointers: 3 + number of words for non-pointers: 0 +top-level strings: + $tc'Nested1_@name_suffix@: "'Nested" + $tc'PerfectTree1_@name_suffix@: "'PerfectTree" + $tcPerfectTree1_@name_suffix@: "PerfectTree" + $tc'Node1_@name_suffix@: "'Node" + $tc'Leaf1_@name_suffix@: "'Leaf" + $tcBinTree1_@name_suffix@: "BinTree" + $trModule3_@name_suffix@: "Example" + $trModule1_@name_suffix@: "main" +breakpoints: <none> +static-pointer table entries: + @hash@: static_ptr + @hash@: static_ptr1 +HPC information: <none> + ===================================== testsuite/tests/show-bytecode/show-bytecode-vanilla.stdout-javascript-unknown-ghcjs ===================================== @@ -0,0 +1,597 @@ +[1 of 1] Compiling Example ( Example.hs, Example.gbc ) +module: Example +hash: @hash@ +objects: + object ‘primesPtr’: + arity: 0 + literals: <none> + used items: + named item ‘static_ptr1’ + named item ‘$dTypeable2_@name_suffix@’ + named item ‘$fIsStaticStaticPtr’ + static-construction object ‘static_ptr1’: + data constructor: StaticPtr + lifted: yes + literals: + word @large_word@ + used items: + named item ‘static_ptr1_sat_@name_suffix@’ + named item ‘primes’ + static-construction object ‘static_ptr1_sat_@name_suffix@’: + data constructor: StaticPtrInfo + lifted: yes + literals: <none> + used items: + named item ‘static_ptr1_sat_@name_suffix@’ + object ‘static_ptr1_sat_@name_suffix@’: + arity: 0 + literals: top-level string "main" + used items: + object ‘static_ptr1_sat_@name_suffix@’: + arity: 0 + literals: <none> + used items: named item ‘unpackCString#’ + object ‘static_ptr1_sat_@name_suffix@’: + arity: 0 + literals: top-level string "Example" + used items: + object ‘static_ptr1_sat_@name_suffix@’: + arity: 0 + literals: <none> + used items: named item ‘unpackCString#’ + static-construction object ‘static_ptr1_sat_@name_suffix@’: + data constructor: (,) + lifted: yes + literals: <none> + used items: + named item ‘static_ptr1_sat_@name_suffix@’ + static-construction object ‘static_ptr1_sat_@name_suffix@’: + data constructor: I# + lifted: yes + literals: word @large_word@ + used items: <none> + static-construction object ‘static_ptr1_sat_@name_suffix@’: + data constructor: I# + lifted: yes + literals: word @large_word@ + used items: <none> + object ‘primes2_@name_suffix@’: + arity: 0 + literals: <none> + used items: + named item ‘primes2_sat_@name_suffix@’ + named item ‘isPrime_@name_suffix@’ + named item ‘filter’ + object ‘isPrime_@name_suffix@’: + arity: 1 + literals: <none> + used items: + object ‘isPrime_sat_@name_suffix@’: + arity: 1 + literals: <none> + used items: + object ‘isPrime_sat_@name_suffix@’: + arity: 1 + literals: <none> + used items: + object ‘isPrime_sat_@name_suffix@’: + arity: 1 + literals: + word 2 + info table of ‘IS’ + used items: + object ‘v_@name_suffix@’: + arity: 0 + literals: <none> + used items: + named item ‘$fIntegralInteger’ + named item ‘$fNumNatural’ + named item ‘(^)’ + object ‘isPrime_sat_@name_suffix@’: + arity: 3 + literals: <none> + used items: <none> + object ‘v_@name_suffix@’: + arity: 0 + literals: <none> + used items: + named item ‘$fOrdNatural’ + named item ‘(<=)’ + object ‘isPrime_sat_@name_suffix@’: + arity: 3 + literals: <none> + used items: <none> + named item ‘(.)’ + named item ‘primes’ + named item ‘takeWhile’ + object ‘isPrime_sat_@name_suffix@’: + arity: 2 + literals: <none> + used items: + named item ‘$fIntegralNatural’ + named item ‘divides’ + named item ‘$fFoldableList’ + named item ‘any’ + named item ‘not’ + static-construction object ‘primes’: + data constructor: (:) + lifted: yes + literals: <none> + used items: + named item ‘primes1_@name_suffix@’ + named item ‘primes2_@name_suffix@’ + object ‘primes2_sat_@name_suffix@’: + arity: 0 + literals: <none> + used items: + object ‘primes2_sat_@name_suffix@’: + arity: 0 + literals: + word 3 + info table of ‘IS’ + used items: + named item ‘$fNumNatural’ + named item ‘fromInteger’ + named item ‘$fEnumNatural’ + named item ‘enumFrom’ + object ‘primes1_@name_suffix@’: + arity: 0 + literals: <none> + used items: + named item ‘primes1_sat_@name_suffix@’ + named item ‘$fNumNatural’ + named item ‘fromInteger’ + static-construction object ‘primes1_sat_@name_suffix@’: + data constructor: IS + lifted: yes + literals: word 2 + used items: <none> + object ‘fibonaccisPtr’: + arity: 0 + literals: <none> + used items: + named item ‘static_ptr’ + named item ‘$dTypeable2_@name_suffix@’ + named item ‘$fIsStaticStaticPtr’ + static-construction object ‘static_ptr’: + data constructor: StaticPtr + lifted: yes + literals: + word @large_word@ + used items: + named item ‘static_ptr_sat_@name_suffix@’ + named item ‘fibonaccis’ + static-construction object ‘static_ptr_sat_@name_suffix@’: + data constructor: StaticPtrInfo + lifted: yes + literals: <none> + used items: + named item ‘static_ptr_sat_@name_suffix@’ + object ‘static_ptr_sat_@name_suffix@’: + arity: 0 + literals: top-level string "main" + used items: + object ‘static_ptr_sat_@name_suffix@’: + arity: 0 + literals: <none> + used items: named item ‘unpackCString#’ + object ‘static_ptr_sat_@name_suffix@’: + arity: 0 + literals: top-level string "Example" + used items: + object ‘static_ptr_sat_@name_suffix@’: + arity: 0 + literals: <none> + used items: named item ‘unpackCString#’ + static-construction object ‘static_ptr_sat_@name_suffix@’: + data constructor: (,) + lifted: yes + literals: <none> + used items: + named item ‘static_ptr_sat_@name_suffix@’ + static-construction object ‘static_ptr_sat_@name_suffix@’: + data constructor: I# + lifted: yes + literals: word @large_word@ + used items: <none> + static-construction object ‘static_ptr_sat_@name_suffix@’: + data constructor: I# + lifted: yes + literals: word @large_word@ + used items: <none> + object ‘positiveFibonaccis2_@name_suffix@’: + arity: 0 + literals: <none> + used items: + named item ‘positiveFibonaccis1_@name_suffix@’ + named item ‘fibonaccis’ + named item ‘positiveFibonaccis2_sat_@name_suffix@’ + named item ‘zipWith’ + static-construction object ‘positiveFibonaccis1_@name_suffix@’: + data constructor: (:) + lifted: yes + literals: <none> + used items: + named item ‘positiveFibonaccis_@name_suffix@’ + named item ‘positiveFibonaccis2_@name_suffix@’ + static-construction object ‘fibonaccis’: + data constructor: (:) + lifted: yes + literals: <none> + used items: + named item ‘fibonaccis1_@name_suffix@’ + named item ‘positiveFibonaccis1_@name_suffix@’ + object ‘positiveFibonaccis2_sat_@name_suffix@’: + arity: 0 + literals: <none> + used items: + named item ‘$fNumNatural’ + named item ‘(+)’ + object ‘positiveFibonaccis_@name_suffix@’: + arity: 0 + literals: <none> + used items: + named item ‘positiveFibonaccis_sat_@name_suffix@’ + named item ‘$fNumNatural’ + named item ‘fromInteger’ + static-construction object ‘positiveFibonaccis_sat_@name_suffix@’: + data constructor: IS + lifted: yes + literals: word 1 + used items: <none> + object ‘fibonaccis1_@name_suffix@’: + arity: 0 + literals: <none> + used items: + named item ‘fibonaccis1_sat_@name_suffix@’ + named item ‘$fNumNatural’ + named item ‘fromInteger’ + static-construction object ‘fibonaccis1_sat_@name_suffix@’: + data constructor: IS + lifted: yes + literals: word 0 + used items: <none> + object ‘$dTypeable2_@name_suffix@’: + arity: 0 + literals: <none> + used items: + named item ‘$dTypeable_@name_suffix@’ + named item ‘$dTypeable1_@name_suffix@’ + named item ‘mkTrAppChecked’ + object ‘$dTypeable1_@name_suffix@’: + arity: 0 + literals: info table of ‘[]’ + used items: + named item ‘$tcList’ + named item ‘mkTrCon’ + object ‘$dTypeable_@name_suffix@’: + arity: 0 + literals: info table of ‘[]’ + used items: + named item ‘$tcNatural’ + named item ‘mkTrCon’ + object ‘cstrlen’: + arity: 2 + literals: <none> + used items: named item ‘cstrlen1_@name_suffix@’ + object ‘cstrlen1_@name_suffix@’: + arity: 2 + literals: <none> + used items: + object ‘ds1_@name_suffix@’: + arity: 0 + literals: + label ‘strlen’ + word 0 + foreign function of type ‘Pointer -> UInt@word_size@’ + used items: + object ‘wild_@name_suffix@’: + arity: 0 + literals: info table of ‘W@word_size@#’ + used items: <none> + static-construction object ‘$tc'Nested’: + data constructor: TyCon + lifted: yes + literals: + word @large_word@ + word 1 + used items: + named item ‘$trModule’ + named item ‘$tc'Nested2_@name_suffix@’ + named item ‘$krep17_@name_suffix@’ + static-construction object ‘$tc'Nested2_@name_suffix@’: + data constructor: TrNameS + lifted: yes + literals: address ‘$tc'Nested1_@name_suffix@’ + used items: <none> + static-construction object ‘$krep17_@name_suffix@’: + data constructor: KindRepFun + lifted: yes + literals: <none> + used items: + named item ‘$krep16_@name_suffix@’ + named item ‘$krep13_@name_suffix@’ + static-construction object ‘$krep16_@name_suffix@’: + data constructor: KindRepTyConApp + lifted: yes + literals: <none> + used items: + named item ‘$tcPerfectTree’ + named item ‘$krep15_@name_suffix@’ + static-construction object ‘$krep15_@name_suffix@’: + data constructor: (:) + lifted: yes + literals: <none> + used items: + named item ‘$krep4_@name_suffix@’ + named item ‘[]’ + static-construction object ‘$tc'PerfectTree’: + data constructor: TyCon + lifted: yes + literals: + word @large_word@ + word 1 + used items: + named item ‘$trModule’ + named item ‘$tc'PerfectTree2_@name_suffix@’ + named item ‘$krep14_@name_suffix@’ + static-construction object ‘$tc'PerfectTree2_@name_suffix@’: + data constructor: TrNameS + lifted: yes + literals: address ‘$tc'PerfectTree1_@name_suffix@’ + used items: <none> + static-construction object ‘$krep14_@name_suffix@’: + data constructor: KindRepFun + lifted: yes + literals: <none> + used items: + named item ‘$krep1_@name_suffix@’ + named item ‘$krep13_@name_suffix@’ + static-construction object ‘$krep13_@name_suffix@’: + data constructor: KindRepTyConApp + lifted: yes + literals: <none> + used items: + named item ‘$tcPerfectTree’ + named item ‘$krep12_@name_suffix@’ + static-construction object ‘$krep12_@name_suffix@’: + data constructor: (:) + lifted: yes + literals: <none> + used items: + named item ‘$krep1_@name_suffix@’ + named item ‘[]’ + static-construction object ‘$tcPerfectTree’: + data constructor: TyCon + lifted: yes + literals: + word @large_word@ + word 0 + used items: + named item ‘$trModule’ + named item ‘$tcPerfectTree2_@name_suffix@’ + named item ‘krepStarArr’ + static-construction object ‘$tcPerfectTree2_@name_suffix@’: + data constructor: TrNameS + lifted: yes + literals: address ‘$tcPerfectTree1_@name_suffix@’ + used items: <none> + static-construction object ‘$tc'Node’: + data constructor: TyCon + lifted: yes + literals: + word @large_word@ + word 2 + used items: + named item ‘$trModule’ + named item ‘$tc'Node2_@name_suffix@’ + named item ‘$krep11_@name_suffix@’ + static-construction object ‘$tc'Node2_@name_suffix@’: + data constructor: TrNameS + lifted: yes + literals: address ‘$tc'Node1_@name_suffix@’ + used items: <none> + static-construction object ‘$krep11_@name_suffix@’: + data constructor: KindRepFun + lifted: yes + literals: <none> + used items: + named item ‘$krep7_@name_suffix@’ + named item ‘$krep10_@name_suffix@’ + static-construction object ‘$krep10_@name_suffix@’: + data constructor: KindRepFun + lifted: yes + literals: <none> + used items: + named item ‘$krep_@name_suffix@’ + named item ‘$krep9_@name_suffix@’ + static-construction object ‘$krep9_@name_suffix@’: + data constructor: KindRepFun + lifted: yes + literals: <none> + used items: + named item ‘$krep7_@name_suffix@’ + static-construction object ‘$tc'Leaf’: + data constructor: TyCon + lifted: yes + literals: + word @large_word@ + word 2 + used items: + named item ‘$trModule’ + named item ‘$tc'Leaf2_@name_suffix@’ + named item ‘$krep8_@name_suffix@’ + static-construction object ‘$tc'Leaf2_@name_suffix@’: + data constructor: TrNameS + lifted: yes + literals: address ‘$tc'Leaf1_@name_suffix@’ + used items: <none> + static-construction object ‘$krep8_@name_suffix@’: + data constructor: KindRepFun + lifted: yes + literals: <none> + used items: + named item ‘$krep1_@name_suffix@’ + named item ‘$krep7_@name_suffix@’ + static-construction object ‘$krep7_@name_suffix@’: + data constructor: KindRepTyConApp + lifted: yes + literals: <none> + used items: + named item ‘$tcBinTree’ + named item ‘$krep6_@name_suffix@’ + static-construction object ‘$krep6_@name_suffix@’: + data constructor: (:) + lifted: yes + literals: <none> + used items: + named item ‘$krep1_@name_suffix@’ + named item ‘$krep5_@name_suffix@’ + static-construction object ‘$krep5_@name_suffix@’: + data constructor: (:) + lifted: yes + literals: <none> + used items: + named item ‘$krep_@name_suffix@’ + named item ‘[]’ + static-construction object ‘$tcBinTree’: + data constructor: TyCon + lifted: yes + literals: + word @large_word@ + word 0 + used items: + named item ‘$trModule’ + named item ‘$tcBinTree2_@name_suffix@’ + named item ‘krepStarArrStarArr’ + static-construction object ‘$tcBinTree2_@name_suffix@’: + data constructor: TrNameS + lifted: yes + literals: address ‘$tcBinTree1_@name_suffix@’ + used items: <none> + static-construction object ‘$krep4_@name_suffix@’: + data constructor: KindRepTyConApp + lifted: yes + literals: <none> + used items: + named item ‘$tcTuple2’ + named item ‘$krep3_@name_suffix@’ + static-construction object ‘$krep3_@name_suffix@’: + data constructor: (:) + lifted: yes + literals: <none> + used items: + named item ‘$krep1_@name_suffix@’ + named item ‘$krep2_@name_suffix@’ + static-construction object ‘$krep2_@name_suffix@’: + data constructor: (:) + lifted: yes + literals: <none> + used items: + named item ‘$krep1_@name_suffix@’ + named item ‘[]’ + static-construction object ‘$krep1_@name_suffix@’: + data constructor: KindRepVar + lifted: yes + literals: word 0 + used items: <none> + static-construction object ‘$krep_@name_suffix@’: + data constructor: KindRepVar + lifted: yes + literals: word 1 + used items: <none> + static-construction object ‘$trModule’: + data constructor: Module + lifted: yes + literals: <none> + used items: + named item ‘$trModule2_@name_suffix@’ + named item ‘$trModule4_@name_suffix@’ + static-construction object ‘$trModule4_@name_suffix@’: + data constructor: TrNameS + lifted: yes + literals: address ‘$trModule3_@name_suffix@’ + used items: <none> + static-construction object ‘$trModule2_@name_suffix@’: + data constructor: TrNameS + lifted: yes + literals: address ‘$trModule1_@name_suffix@’ + used items: <none> + object ‘divides’: + arity: 3 + literals: <none> + used items: + object ‘$dReal_@name_suffix@’: + arity: 0 + literals: <none> + used items: + object ‘divides_sat_@name_suffix@’: + arity: 1 + literals: + word 0 + info table of ‘IS’ + used items: + object ‘divides_sat_@name_suffix@’: + arity: 0 + literals: <none> + used items: named item ‘fromInteger’ + named item ‘$p1Real’ + object ‘divides_sat_@name_suffix@’: + arity: 3 + literals: <none> + used items: named item ‘mod’ + object ‘divides_sat_@name_suffix@’: + arity: 0 + literals: <none> + used items: + object ‘divides_sat_@name_suffix@’: + arity: 0 + literals: <none> + used items: named item ‘(==)’ + named item ‘$p1Ord’ + named item ‘$p2Real’ + named item ‘$p1Integral’ + object ‘Node’: + arity: 3 + literals: info table of ‘Node’ + used items: <none> + object ‘Leaf’: + arity: 1 + literals: info table of ‘Leaf’ + used items: <none> + object ‘Nested’: + arity: 1 + literals: info table of ‘Nested’ + used items: <none> + object ‘PerfectTree’: + arity: 1 + literals: info table of ‘PerfectTree’ + used items: <none> +data constructor info tables: + info table of ‘PerfectTree’: + number of words for pointers: 1 + number of words for non-pointers: 0 + info table of ‘Nested’: + number of words for pointers: 1 + number of words for non-pointers: 0 + info table of ‘Leaf’: + number of words for pointers: 1 + number of words for non-pointers: 0 + info table of ‘Node’: + number of words for pointers: 3 + number of words for non-pointers: 0 +top-level strings: + $tc'Nested1_@name_suffix@: "'Nested" + $tc'PerfectTree1_@name_suffix@: "'PerfectTree" + $tcPerfectTree1_@name_suffix@: "PerfectTree" + $tc'Node1_@name_suffix@: "'Node" + $tc'Leaf1_@name_suffix@: "'Leaf" + $tcBinTree1_@name_suffix@: "BinTree" + $trModule3_@name_suffix@: "Example" + $trModule1_@name_suffix@: "main" +breakpoints: <none> +static-pointer table entries: + @hash@: static_ptr + @hash@: static_ptr1 +HPC information: <none> + View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/12f64118fe35d429b7fb832670701456... -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/12f64118fe35d429b7fb832670701456... You're receiving this email because of your account on gitlab.haskell.org. Manage all notifications: https://gitlab.haskell.org/-/profile/notifications | Help: https://gitlab.haskell.org/help