X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2FcodeGen%2FClosureInfo.lhs;h=d0d2ed98b2b414253d6c638fcb90f340168c3d6e;hb=f83010b119096699d1efef2f7bb45460719c48f9;hp=e6319898db041ba7662eba5eb9967c7964636fab;hpb=c128930dc98c73e2459a4610539fee73ca941247;p=ghc-hetmet.git diff --git a/compiler/codeGen/ClosureInfo.lhs b/compiler/codeGen/ClosureInfo.lhs index e631989..d0d2ed9 100644 --- a/compiler/codeGen/ClosureInfo.lhs +++ b/compiler/codeGen/ClosureInfo.lhs @@ -13,8 +13,9 @@ the STG paper. \begin{code} module ClosureInfo ( - ClosureInfo, LambdaFormInfo, SMRep, -- all abstract - StandardFormInfo, + ClosureInfo(..), LambdaFormInfo(..), -- would be abstract but + StandardFormInfo(..), -- mkCmmInfo looks inside + SMRep, ArgDescr(..), Liveness(..), C_SRT(..), needsSRT, @@ -123,10 +124,15 @@ data ClosureInfo data C_SRT = NoC_SRT | C_SRT !CLabel !WordOff !StgHalfWord {-bitmap or escape-} + deriving (Eq) needsSRT :: C_SRT -> Bool needsSRT NoC_SRT = False needsSRT (C_SRT _ _ _) = True + +instance Outputable C_SRT where + ppr (NoC_SRT) = ptext SLIT("_no_srt_") + ppr (C_SRT label off bitmap) = parens (ppr label <> comma <> ppr off <> comma <> text (show bitmap)) \end{code} %************************************************************************ @@ -184,7 +190,7 @@ data LambdaFormInfo data ArgDescr = ArgSpec -- Fits one of the standard patterns - !Int -- RTS type identifier ARG_P, ARG_N, ... + !StgHalfWord -- RTS type identifier ARG_P, ARG_N, ... | ArgGen -- General case Liveness -- Details about the arguments @@ -594,7 +600,13 @@ getCallMethod this_pkg name (LFThunk _ _ updatable std_form_info is_fun) n_args if we enter the same thunk multiple times, so the optimisation of jumping directly to the entry code is still valid. --SDM -} - = ASSERT2( n_args == 0, ppr name ) EnterIt + = EnterIt + -- We used to have ASSERT( n_args == 0 ), but actually it is + -- possible for the optimiser to generate + -- let bot :: Int = error Int "urk" + -- in (bot `cast` unsafeCoerce Int (Int -> Int)) 3 + -- This happens as a result of the case-of-error transformation + -- So the right thing to do is just to enter the thing | otherwise -- Jump direct to code for single-entry thunks = ASSERT( n_args == 0 ) @@ -947,5 +959,3 @@ getTyDescription ty getPredTyDescription (ClassP cl tys) = getOccString cl getPredTyDescription (IParam ip ty) = getOccString (ipNameName ip) \end{code} - -