summaryrefslogtreecommitdiff
path: root/rts/ClosureFlags.c
blob: 3eff82f3ffbdf0bb2a8e328c4dc8c781cda85b9b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
/* -----------------------------------------------------------------------------
 *
 * (c) The GHC Team 1998-1999
 *
 * Closure type flags
 *
 * ---------------------------------------------------------------------------*/

#include "rts/PosixSource.h"
#include "Rts.h"

const StgWord16 closure_flags[] = {

/* ToDo: some of these flags seem to be duplicated.
 *       - NS is the same as HNF, and the negation of THU
 * (however, we set NS for indirections, which is probably the
 *  right thing to do, since we never get indirections pointing
 *  to thunks.)
 */

/* See InfoTables.h for the meaning of these flags */

/*                            0    1    2    4   5    6   7     8   9  */
/*                          HNF  BTM   NS  THU MUT  UPT SRT   IND FRM  */

 [INVALID_OBJECT]       =  ( 0                                          ),
 [CONSTR]               =  (_HNF|     _NS                               ),
 [CONSTR_1_0]           =  (_HNF|     _NS                               ),
 [CONSTR_0_1]           =  (_HNF|     _NS                               ),
 [CONSTR_2_0]           =  (_HNF|     _NS                               ),
 [CONSTR_1_1]           =  (_HNF|     _NS                               ),
 [CONSTR_0_2]           =  (_HNF|     _NS                               ),
 [CONSTR_NOCAF]         =  (_HNF|     _NS                               ),
 [FUN]                  =  (_HNF|     _NS|             _SRT             ),
 [FUN_1_0]              =  (_HNF|     _NS|             _SRT             ),
 [FUN_0_1]              =  (_HNF|     _NS|             _SRT             ),
 [FUN_2_0]              =  (_HNF|     _NS|             _SRT             ),
 [FUN_1_1]              =  (_HNF|     _NS|             _SRT             ),
 [FUN_0_2]              =  (_HNF|     _NS|             _SRT             ),
 [FUN_STATIC]           =  (_HNF|     _NS|             _SRT             ),
 [THUNK]                =  (              _THU|        _SRT             ),
 [THUNK_1_0]            =  (              _THU|        _SRT             ),
 [THUNK_0_1]            =  (              _THU|        _SRT             ),
 [THUNK_2_0]            =  (              _THU|        _SRT             ),
 [THUNK_1_1]            =  (              _THU|        _SRT             ),
 [THUNK_0_2]            =  (              _THU|        _SRT             ),
 [THUNK_STATIC]         =  (              _THU|        _SRT             ),
 [THUNK_SELECTOR]       =  (              _THU|        _SRT             ),
 [BCO]                  =  (_HNF|     _NS                               ),
 [AP]                   =  (              _THU                          ),
 [PAP]                  =  (_HNF|     _NS                               ),
 [AP_STACK]             =  (              _THU                          ),
 [IND]                  =  (          _NS|                   _IND       ),
 [IND_STATIC]           =  (          _NS|                   _IND       ),
 [RET_BCO]              =  (                                       _FRM ),
 [RET_SMALL]            =  (     _BTM|                  _SRT|      _FRM ),
 [RET_BIG]              =  (                            _SRT|      _FRM ),
 [RET_FUN]              =  (                                       _FRM ),
 [UPDATE_FRAME]         =  (     _BTM|                             _FRM ),
 [CATCH_FRAME]          =  (     _BTM|                             _FRM ),
 [UNDERFLOW_FRAME]      =  (     _BTM|                             _FRM ),
 [STOP_FRAME]           =  (     _BTM|                             _FRM ),
 [BLACKHOLE]            =  (          _NS|         _UPT                 ),
 [BLOCKING_QUEUE]       =  (          _NS|    _MUT|_UPT                 ),
 [MVAR_CLEAN]           =  (_HNF|     _NS|    _MUT|_UPT                 ),
 [MVAR_DIRTY]           =  (_HNF|     _NS|    _MUT|_UPT                 ),
 [TVAR]                 =  (_HNF|     _NS|    _MUT|_UPT                 ),
 [ARR_WORDS]            =  (_HNF|     _NS|         _UPT                 ),
 [MUT_ARR_PTRS_CLEAN]   =  (_HNF|     _NS|    _MUT|_UPT                 ),
 [MUT_ARR_PTRS_DIRTY]   =  (_HNF|     _NS|    _MUT|_UPT                 ),
 [MUT_ARR_PTRS_FROZEN_DIRTY] =  (_HNF|     _NS|    _MUT|_UPT            ),
 [MUT_ARR_PTRS_FROZEN_CLEAN] =  (_HNF|     _NS|         _UPT            ),
 [MUT_VAR_CLEAN]        =  (_HNF|     _NS|    _MUT|_UPT                 ),
 [MUT_VAR_DIRTY]        =  (_HNF|     _NS|    _MUT|_UPT                 ),
 [WEAK]                 =  (_HNF|     _NS|         _UPT                 ),
 [PRIM]                 =  (_HNF|     _NS|         _UPT                 ),
 [MUT_PRIM]             =  (_HNF|     _NS|    _MUT|_UPT                 ),
 [TSO]                  =  (_HNF|     _NS|    _MUT|_UPT                 ),
 [STACK]                =  (_HNF|     _NS|    _MUT|_UPT                 ),
 [TREC_CHUNK]           =  (          _NS|    _MUT|_UPT                 ),
 [ATOMICALLY_FRAME]     =  (     _BTM|                             _FRM ),
 [CATCH_RETRY_FRAME]    =  (     _BTM|                             _FRM ),
 [CATCH_STM_FRAME]      =  (     _BTM|                             _FRM ),
 [WHITEHOLE]            =  ( 0                                          ),
 [SMALL_MUT_ARR_PTRS_CLEAN] =  (_HNF|     _NS|     _MUT|_UPT            ),
 [SMALL_MUT_ARR_PTRS_DIRTY] =  (_HNF|     _NS|     _MUT|_UPT            ),
 [SMALL_MUT_ARR_PTRS_FROZEN_DIRTY] =  (_HNF|     _NS|     _MUT|_UPT     ),
 [SMALL_MUT_ARR_PTRS_FROZEN_CLEAN] =  (_HNF|     _NS|          _UPT     ),
 [COMPACT_NFDATA]       =  (_HNF|     _NS                               ),
 [CONTINUATION]         =  (_HNF|     _NS|         _UPT                 ),
};

#if N_CLOSURE_TYPES != 65
#error Closure types changed: update ClosureFlags.c!
#endif