module GHC.Vacuum.ClosureType (
closureType
,ClosureType(..)
,isFun,isThunk,isCon
) where
import GHC.Vacuum.GHC as GHC
closureType :: a -> IO ClosureType
closureType a = a `seq` do
c <- GHC.getClosureData a
let itab = GHC.infoTable c
tag = (fromIntegral . GHC.tipe) itab
ctype = (toEnum . fromIntegral) tag
return ctype
isFun :: ClosureType -> Bool
isFun FUN = True
isFun FUN_1_0 = True
isFun FUN_0_1 = True
isFun FUN_2_0 = True
isFun FUN_1_1 = True
isFun FUN_0_2 = True
isFun FUN_STATIC = True
isFun _ = False
isThunk :: ClosureType -> Bool
isThunk THUNK = True
isThunk THUNK_1_0 = True
isThunk THUNK_0_1 = True
isThunk THUNK_2_0 = True
isThunk THUNK_1_1 = True
isThunk THUNK_0_2 = True
isThunk THUNK_STATIC = True
isThunk THUNK_SELECTOR = True
isThunk _ = False
isCon :: ClosureType -> Bool
isCon CONSTR = True
isCon CONSTR_1_0 = True
isCon CONSTR_0_1 = True
isCon CONSTR_2_0 = True
isCon CONSTR_1_1 = True
isCon CONSTR_0_2 = True
isCon CONSTR_STATIC = True
isCon CONSTR_NOCAF_STATIC = True
isCon _ = False
data ClosureType
= INVALID_OBJECT
| CONSTR
| CONSTR_1_0
| CONSTR_0_1
| CONSTR_2_0
| CONSTR_1_1
| CONSTR_0_2
| CONSTR_STATIC
| CONSTR_NOCAF_STATIC
| FUN
| FUN_1_0
| FUN_0_1
| FUN_2_0
| FUN_1_1
| FUN_0_2
| FUN_STATIC
| THUNK
| THUNK_1_0
| THUNK_0_1
| THUNK_2_0
| THUNK_1_1
| THUNK_0_2
| THUNK_STATIC
| THUNK_SELECTOR
| BCO
| AP
| PAP
| AP_STACK
| IND
| IND_OLDGEN
| IND_PERM
| IND_OLDGEN_PERM
| IND_STATIC
| RET_BCO
| RET_SMALL
| RET_BIG
| RET_DYN
| RET_FUN
| UPDATE_FRAME
| CATCH_FRAME
| STOP_FRAME
| CAF_BLACKHOLE
| BLACKHOLE
| MVAR_CLEAN
| MVAR_DIRTY
| ARR_WORDS
| MUT_ARR_PTRS_CLEAN
| MUT_ARR_PTRS_DIRTY
| MUT_ARR_PTRS_FROZEN0
| MUT_ARR_PTRS_FROZEN
| MUT_VAR_CLEAN
| MUT_VAR_DIRTY
| WEAK
| STABLE_NAME
| TSO
| BLOCKED_FETCH
| FETCH_ME
| FETCH_ME_BQ
| RBH
| REMOTE_REF
| TVAR_WATCH_QUEUE
| INVARIANT_CHECK_QUEUE
| ATOMIC_INVARIANT
| TVAR
| TREC_CHUNK
| TREC_HEADER
| ATOMICALLY_FRAME
| CATCH_RETRY_FRAME
| CATCH_STM_FRAME
| WHITEHOLE
| N_CLOSURE_TYPES
deriving (Eq,Ord,Read,Show)
instance Enum ClosureType where
fromEnum INVALID_OBJECT = 0
fromEnum CONSTR = 1
fromEnum CONSTR_1_0 = 2
fromEnum CONSTR_0_1 = 3
fromEnum CONSTR_2_0 = 4
fromEnum CONSTR_1_1 = 5
fromEnum CONSTR_0_2 = 6
fromEnum CONSTR_STATIC = 7
fromEnum CONSTR_NOCAF_STATIC = 8
fromEnum FUN = 9
fromEnum FUN_1_0 = 10
fromEnum FUN_0_1 = 11
fromEnum FUN_2_0 = 12
fromEnum FUN_1_1 = 13
fromEnum FUN_0_2 = 14
fromEnum FUN_STATIC = 15
fromEnum THUNK = 16
fromEnum THUNK_1_0 = 17
fromEnum THUNK_0_1 = 18
fromEnum THUNK_2_0 = 19
fromEnum THUNK_1_1 = 20
fromEnum THUNK_0_2 = 21
fromEnum THUNK_STATIC = 22
fromEnum THUNK_SELECTOR = 23
fromEnum BCO = 24
fromEnum AP = 25
fromEnum PAP = 26
fromEnum AP_STACK = 27
fromEnum IND = 28
fromEnum IND_OLDGEN = 29
fromEnum IND_PERM = 30
fromEnum IND_OLDGEN_PERM = 31
fromEnum IND_STATIC = 32
fromEnum RET_BCO = 33
fromEnum RET_SMALL = 34
fromEnum RET_BIG = 35
fromEnum RET_DYN = 36
fromEnum RET_FUN = 37
fromEnum UPDATE_FRAME = 38
fromEnum CATCH_FRAME = 39
fromEnum STOP_FRAME = 40
fromEnum CAF_BLACKHOLE = 41
fromEnum BLACKHOLE = 42
fromEnum MVAR_CLEAN = 43
fromEnum MVAR_DIRTY = 44
fromEnum ARR_WORDS = 45
fromEnum MUT_ARR_PTRS_CLEAN = 46
fromEnum MUT_ARR_PTRS_DIRTY = 47
fromEnum MUT_ARR_PTRS_FROZEN0 = 48
fromEnum MUT_ARR_PTRS_FROZEN = 49
fromEnum MUT_VAR_CLEAN = 50
fromEnum MUT_VAR_DIRTY = 51
fromEnum WEAK = 52
fromEnum STABLE_NAME = 53
fromEnum TSO = 54
fromEnum BLOCKED_FETCH = 55
fromEnum FETCH_ME = 56
fromEnum FETCH_ME_BQ = 57
fromEnum RBH = 58
fromEnum REMOTE_REF = 59
fromEnum TVAR_WATCH_QUEUE = 60
fromEnum INVARIANT_CHECK_QUEUE = 61
fromEnum ATOMIC_INVARIANT = 62
fromEnum TVAR = 63
fromEnum TREC_CHUNK = 64
fromEnum TREC_HEADER = 65
fromEnum ATOMICALLY_FRAME = 66
fromEnum CATCH_RETRY_FRAME = 67
fromEnum CATCH_STM_FRAME = 68
fromEnum WHITEHOLE = 69
fromEnum N_CLOSURE_TYPES = 70
toEnum 0 = INVALID_OBJECT
toEnum 1 = CONSTR
toEnum 2 = CONSTR_1_0
toEnum 3 = CONSTR_0_1
toEnum 4 = CONSTR_2_0
toEnum 5 = CONSTR_1_1
toEnum 6 = CONSTR_0_2
toEnum 7 = CONSTR_STATIC
toEnum 8 = CONSTR_NOCAF_STATIC
toEnum 9 = FUN
toEnum 10 = FUN_1_0
toEnum 11 = FUN_0_1
toEnum 12 = FUN_2_0
toEnum 13 = FUN_1_1
toEnum 14 = FUN_0_2
toEnum 15 = FUN_STATIC
toEnum 16 = THUNK
toEnum 17 = THUNK_1_0
toEnum 18 = THUNK_0_1
toEnum 19 = THUNK_2_0
toEnum 20 = THUNK_1_1
toEnum 21 = THUNK_0_2
toEnum 22 = THUNK_STATIC
toEnum 23 = THUNK_SELECTOR
toEnum 24 = BCO
toEnum 25 = AP
toEnum 26 = PAP
toEnum 27 = AP_STACK
toEnum 28 = IND
toEnum 29 = IND_OLDGEN
toEnum 30 = IND_PERM
toEnum 31 = IND_OLDGEN_PERM
toEnum 32 = IND_STATIC
toEnum 33 = RET_BCO
toEnum 34 = RET_SMALL
toEnum 35 = RET_BIG
toEnum 36 = RET_DYN
toEnum 37 = RET_FUN
toEnum 38 = UPDATE_FRAME
toEnum 39 = CATCH_FRAME
toEnum 40 = STOP_FRAME
toEnum 41 = CAF_BLACKHOLE
toEnum 42 = BLACKHOLE
toEnum 43 = MVAR_CLEAN
toEnum 44 = MVAR_DIRTY
toEnum 45 = ARR_WORDS
toEnum 46 = MUT_ARR_PTRS_CLEAN
toEnum 47 = MUT_ARR_PTRS_DIRTY
toEnum 48 = MUT_ARR_PTRS_FROZEN0
toEnum 49 = MUT_ARR_PTRS_FROZEN
toEnum 50 = MUT_VAR_CLEAN
toEnum 51 = MUT_VAR_DIRTY
toEnum 52 = WEAK
toEnum 53 = STABLE_NAME
toEnum 54 = TSO
toEnum 55 = BLOCKED_FETCH
toEnum 56 = FETCH_ME
toEnum 57 = FETCH_ME_BQ
toEnum 58 = RBH
toEnum 59 = REMOTE_REF
toEnum 60 = TVAR_WATCH_QUEUE
toEnum 61 = INVARIANT_CHECK_QUEUE
toEnum 62 = ATOMIC_INVARIANT
toEnum 63 = TVAR
toEnum 64 = TREC_CHUNK
toEnum 65 = TREC_HEADER
toEnum 66 = ATOMICALLY_FRAME
toEnum 67 = CATCH_RETRY_FRAME
toEnum 68 = CATCH_STM_FRAME
toEnum 69 = WHITEHOLE
toEnum 70 = N_CLOSURE_TYPES
toEnum _ = error "toEnum: ClosureType: invalid ClosureType"