import ClosureInfo ( closurePtrsSize,
closureNonHdrSize, closureSMRep,
infoTableLabelFromCI,
- infoTblNeedsSRT, getSRTInfo
+ infoTblNeedsSRT, getSRTInfo, closureSemiTag
)
import PrimRep ( PrimRep(..) )
import SMRep ( SMRep(..), getSMRepClosureTypeInt )
import Stix -- all of it
import UniqSupply ( returnUs, UniqSM )
-import Outputable ( int )
import BitSet ( intBS )
+import Maybes ( maybeToBool )
import Bits
import Word
-- ToDo: do this using .byte and .word directives.
type_info :: Word32
#ifdef WORDS_BIGENDIAN
- type_info = (fromInt flags `shiftL` 24) .|.
- (fromInt closure_type `shiftL` 16) .|.
+ type_info = (fromInt closure_type `shiftL` 16) .|.
(fromInt srt_len)
#else
- type_info = (fromInt flags) .|.
- (fromInt closure_type `shiftL` 8) .|.
+ type_info = (fromInt closure_type) .|.
(fromInt srt_len `shiftL` 16)
#endif
srt = getSRTInfo cl_info
(srt_label,srt_len)
+ | is_constr
+ = (StInt 0, tag)
| needs_srt
= case srt of
(lbl, SRT off len) ->
| otherwise
= (StInt 0, 0)
+ maybe_tag = closureSemiTag cl_info
+ is_constr = maybeToBool maybe_tag
+ (Just tag) = maybe_tag
+
layout_info :: Word32
#ifdef WORDS_BIGENDIAN
layout_info = (fromInt ptrs `shiftL` 16) .|. fromInt nptrs
closure_type = getSMRepClosureTypeInt (closureSMRep cl_info)
- flags = 0 -- for now
genBitmapInfoTable
type_info :: Word32
#ifdef WORDS_BIGENDIAN
- type_info = (fromInt flags `shiftL` 24) .|.
- (fromInt closure_type `shiftL` 16) .|.
+ type_info = (fromInt closure_type `shiftL` 16) .|.
(fromInt srt_len)
#else
- type_info = (fromInt flags) .|.
- (fromInt closure_type `shiftL` 8) .|.
+ type_info = (fromInt closure_type) .|.
(fromInt srt_len `shiftL` 16)
#endif
(lbl, SRT off len) ->
(StIndex DataPtrRep (StCLbl lbl)
(StInt (toInteger off)), len)
-
- flags = 0 -- for now
\end{code}