[project @ 2001-03-19 16:20:44 by simonpj]
[ghc-hetmet.git] / ghc / includes / Closures.h
index 5f4eada..855b728 100644 (file)
@@ -1,5 +1,5 @@
 /* ----------------------------------------------------------------------------
- * $Id: Closures.h,v 1.17 2000/03/31 03:09:35 hwloidl Exp $
+ * $Id: Closures.h,v 1.26 2001/02/11 17:51:08 simonmar Exp $
  *
  * (c) The GHC Team, 1998-1999
  *
@@ -137,10 +137,10 @@ typedef struct {
 
 /* All closures follow the generic format */
 
-typedef struct StgClosure_ {
+struct StgClosure_ {
     StgHeader   header;
     struct StgClosure_ *payload[0];
-} StgClosure;
+};
 
 /* What a stroke of luck - all our mutable closures follow the same
  * basic layout, with the mutable link field as the second field after
@@ -150,7 +150,7 @@ typedef struct StgClosure_ {
 
 typedef struct StgMutClosure_ {
     StgHeader   header;
-    StgPtr     *padding;
+    StgWord     padding;
     struct StgMutClosure_ *mut_link;
     struct StgClosure_ *payload[0];
 } StgMutClosure;
@@ -164,26 +164,17 @@ typedef struct {
     StgHeader   header;
     StgWord     n_args;
     StgClosure *fun;
-    StgPtr      payload[0];
+    StgClosure *payload[0];
 } StgPAP;
 
 typedef struct {
     StgHeader   header;
     StgWord     n_args;
     StgClosure *fun;
-    StgPtr      payload[0];
+    StgClosure *payload[0];
 } StgAP_UPD;
 
 typedef struct {
-    StgHeader  header;
-    StgWord    n_ptrs;
-    StgWord    n_words;
-    StgWord    n_instrs;
-    StgWord    stgexpr;
-    StgPtr     payload[0];
-} StgBCO;
-
-typedef struct {
     StgHeader   header;
     StgClosure *indirectee;
 } StgInd;
@@ -195,18 +186,11 @@ typedef struct {
 } StgIndOldGen;
 
 typedef struct {
-    StgHeader   header;
-    StgClosure *indirectee;
-    StgClosure *static_link;
-} StgIndStatic;
-
-typedef struct StgCAF_ {
     StgHeader     header;
-    StgClosure    *body;
-    StgMutClosure *mut_link;
-    StgClosure    *value;
-    struct StgCAF_ *link;
-} StgCAF;
+    StgClosure   *indirectee;
+    StgClosure   *static_link;
+    struct _StgInfoTable *saved_info;
+} StgIndStatic;
 
 typedef struct {
     StgHeader  header;
@@ -227,6 +211,14 @@ typedef struct {
     StgMutClosure *mut_link;
 } StgMutVar;
 
+typedef struct {
+    StgHeader      header;
+    StgArrWords   *instrs;     /* a pointer to an ArrWords */
+    StgArrWords   *literals;   /* a pointer to an ArrWords */
+    StgMutArrPtrs *ptrs;       /* a pointer to a MutArrPtrs */
+    StgArrWords   *itbls;      /* a pointer to an ArrWords */
+} StgBCO;
+
 /* 
    A collective typedef for all linkable stack frames i.e.
      StgUpdateFrame, StgSeqFrame, StgCatchFrame
@@ -347,7 +339,7 @@ typedef struct StgBlockingQueue_ {
 /* this closure is hanging at the end of a blocking queue in (see RBH.c) */
 typedef struct StgRBHSave_ {
   StgHeader    header;
-  StgPtr       payload[0];     /* 2 words ripped out of the guts of the */
+  StgClosure  *payload[0];     /* 2 words ripped out of the guts of the */
 } StgRBHSave;                  /*  closure holding the blocking queue */
  
 typedef struct StgRBH_ {