[project @ 1999-07-03 18:39:40 by sof]
[ghc-hetmet.git] / ghc / includes / Closures.h
index f77ce9a..541c6ad 100644 (file)
@@ -1,5 +1,7 @@
 /* ----------------------------------------------------------------------------
- * $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
  *
@@ -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,16 +180,18 @@ 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;
 
 typedef struct {
     StgHeader  header;
     struct StgTSO_ *blocking_queue;
-} StgBlackHole;
+    StgMutClosure *mut_link;
+} StgBlockingQueue;
 
 typedef struct {
     StgHeader  header;
@@ -242,21 +253,31 @@ typedef struct _StgForeignObj {
   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];