[project @ 1999-07-14 11:33:10 by simonmar]
[ghc-hetmet.git] / ghc / includes / Closures.h
index e2e2932..541c6ad 100644 (file)
@@ -1,5 +1,7 @@
 /* ----------------------------------------------------------------------------
- * $Id: Closures.h,v 1.5 1999/01/26 11:12:55 simonm Exp $
+ * $Id: Closures.h,v 1.13 1999/05/11 16:47:40 keithw Exp $
+ *
+ * (c) The GHC Team, 1998-1999
  *
  * Closures
  *
@@ -68,19 +70,19 @@ typedef struct {
    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
@@ -91,9 +93,15 @@ typedef struct {
 
 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))
@@ -150,6 +158,7 @@ typedef struct {
     StgWord    n_ptrs;
     StgWord    n_words;
     StgWord    n_instrs;
+    StgWord    stgexpr;
     StgPtr     payload[0];
 } StgBCO;
 
@@ -171,9 +180,10 @@ typedef struct {
 } StgIndStatic;
 
 typedef struct StgCAF_ {
-    StgHeader   header;
-    StgClosure *body;
-    StgClosure *value;
+    StgHeader     header;
+    StgClosure    *body;
+    StgMutClosure *mut_link;
+    StgClosure    *value;
     struct StgCAF_ *link;
 } StgCAF;
 
@@ -252,17 +262,22 @@ 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];