/* ----------------------------------------------------------------------------
- * $Id: Closures.h,v 1.3 1999/01/13 17:25:53 simonm Exp $
+ * $Id: Closures.h,v 1.13 1999/05/11 16:47:40 keithw Exp $
+ *
+ * (c) The GHC Team, 1998-1999
*
* Closures
*
info tables to be @_Evacuate_1@ and @_Scavenge_1_0@.
-------------------------------------------------------------------------- */
-#ifdef TICKY
+#ifdef TICKY_TICKY
typedef struct {
- W_ updated;
+ /* old: W_ updated; */
} StgTickyHeader;
-#else /* !TICKY */
+#else /* !TICKY_TICKY */
typedef struct {
/* empty */
} StgTickyHeader;
-#endif /* TICKY */
+#endif /* TICKY_TICKY */
/* -----------------------------------------------------------------------------
The full fixed-size closure header
typedef struct {
const struct _StgInfoTable* info;
+#ifdef PROFILING
StgProfHeader prof;
+#endif
+#ifdef GRAN
StgGranHeader par;
+#endif
+#ifdef TICKY_TICKY
StgTickyHeader ticky;
+#endif
} StgHeader;
#define FIXED_HS (sizeof(StgHeader))
StgWord n_ptrs;
StgWord n_words;
StgWord n_instrs;
+ StgWord stgexpr;
StgPtr payload[0];
} StgBCO;
} StgIndStatic;
typedef struct StgCAF_ {
- StgHeader header;
- StgClosure *body;
- StgClosure *value;
+ StgHeader header;
+ StgClosure *body;
+ StgMutClosure *mut_link;
+ StgClosure *value;
struct StgCAF_ *link;
} StgCAF;
typedef struct {
StgHeader header;
struct StgTSO_ *blocking_queue;
-} StgBlackHole;
+ StgMutClosure *mut_link;
+} StgBlockingQueue;
typedef struct {
StgHeader header;
StgAddr data; /* pointer to data in non-haskell-land */
} StgForeignObj;
+typedef struct _StgStableName {
+ StgHeader header;
+ StgWord sn;
+} StgStableName;
+
typedef struct _StgWeak { /* Weak v */
StgHeader header;
StgClosure *key;
StgClosure *value; /* v */
- StgClosure *finaliser;
+ StgClosure *finalizer;
struct _StgWeak *link;
} StgWeak;
+typedef struct _StgDeadWeak { /* Weak v */
+ StgHeader header;
+ struct _StgWeak *link;
+} StgDeadWeak;
+
/* Dynamic stack frames - these have a liveness mask in the object
* itself, rather than in the info table. Useful for generic heap
* check code.
*/
typedef struct {
- StgHeader header;
+ const struct _StgInfoTable* info;
StgWord liveness;
StgWord ret_addr;
StgWord payload[0];