[project @ 2001-10-27 21:44:54 by sof]
[ghc-hetmet.git] / ghc / includes / Closures.h
index 2c38541..5f0b570 100644 (file)
@@ -1,5 +1,5 @@
 /* ----------------------------------------------------------------------------
- * $Id: Closures.h,v 1.24 2000/12/19 16:48:58 sewardj Exp $
+ * $Id: Closures.h,v 1.28 2001/10/03 13:57:42 simonmar Exp $
  *
  * (c) The GHC Team, 1998-1999
  *
    The profiling header
    -------------------------------------------------------------------------- */
 
-#ifdef PROFILING
-
 typedef struct {
    CostCentreStack *ccs;
 } StgProfHeader;
 
-#else /* !PROFILING */
-
-typedef struct {
-       /* empty */
-} StgProfHeader;
-
-#endif /* PROFILING */
-
 /* -----------------------------------------------------------------------------
    The parallel header
    -------------------------------------------------------------------------- */
 
-#ifdef PAR
-
 typedef struct {
   /* StgWord ga; */  /* nope! global addresses are managed via a hash table */
 } StgParHeader;
 
-#else /* !PAR */
-
-typedef struct {
-  /* empty */
-} StgParHeader;
-
-#endif /* PAR */
-
 /* -----------------------------------------------------------------------------
    The GranSim header
    -------------------------------------------------------------------------- */
 
-#if defined(GRAN)
-
 typedef struct {
   StgWord procs; /* bitmask indicating on which PEs this closure resides */
 } StgGranHeader;
 
-#else /* !GRAN */
-
-typedef struct {
-  /* empty */
-} StgGranHeader;
-
-#endif /* GRAN */
-
 /* -----------------------------------------------------------------------------
    The ticky-ticky header
 
@@ -88,20 +58,10 @@ typedef struct {
    info tables to be @_Evacuate_1@ and @_Scavenge_1_0@.
    -------------------------------------------------------------------------- */
 
-#ifdef TICKY_TICKY
-
 typedef struct {
   /* old: W_ updated; */
 } StgTickyHeader;
 
-#else /* !TICKY_TICKY */
-
-typedef struct {
-       /* empty */
-} StgTickyHeader;
-
-#endif /* TICKY_TICKY */
-
 /* -----------------------------------------------------------------------------
    The full fixed-size closure header
 
@@ -139,7 +99,7 @@ typedef struct {
 
 struct StgClosure_ {
     StgHeader   header;
-    struct StgClosure_ *payload[0];
+    struct StgClosure_ *payload[FLEXIBLE_ARRAY];
 };
 
 /* What a stroke of luck - all our mutable closures follow the same
@@ -152,7 +112,7 @@ typedef struct StgMutClosure_ {
     StgHeader   header;
     StgWord     padding;
     struct StgMutClosure_ *mut_link;
-    struct StgClosure_ *payload[0];
+    struct StgClosure_ *payload[FLEXIBLE_ARRAY];
 } StgMutClosure;
 
 typedef struct {
@@ -164,14 +124,14 @@ typedef struct {
     StgHeader   header;
     StgWord     n_args;
     StgClosure *fun;
-    StgClosure *payload[0];
+    StgClosure *payload[FLEXIBLE_ARRAY];
 } StgPAP;
 
 typedef struct {
     StgHeader   header;
     StgWord     n_args;
     StgClosure *fun;
-    StgClosure *payload[0];
+    StgClosure *payload[FLEXIBLE_ARRAY];
 } StgAP_UPD;
 
 typedef struct {
@@ -186,30 +146,23 @@ 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;
     StgWord    words;
-    StgWord    payload[0];
+    StgWord    payload[FLEXIBLE_ARRAY];
 } StgArrWords;
 
 typedef struct {
     StgHeader   header;
     StgWord     ptrs;
     StgMutClosure *mut_link;   /* mutable list */
-    StgClosure *payload[0];
+    StgClosure *payload[FLEXIBLE_ARRAY];
 } StgMutArrPtrs;
 
 typedef struct {
@@ -304,7 +257,7 @@ typedef struct {
   const struct _StgInfoTable* info;
   StgWord        liveness;
   StgWord        ret_addr;
-  StgWord        payload[0];
+  StgWord        payload[FLEXIBLE_ARRAY];
 } StgRetDyn;
 
 /* Concurrent communication objects */
@@ -333,7 +286,7 @@ typedef struct StgBlockingQueueElement_ {
   StgHeader                         header;
   struct StgBlockingQueueElement_  *link;      /* next elem in BQ */
   StgMutClosure                    *mut_link;  /* next elem in mutable list */
-  struct StgClosure_               *payload[0];/* contents of the closure */
+  struct StgClosure_               *payload[FLEXIBLE_ARRAY];/* contents of the closure */
 } StgBlockingQueueElement;
 
 /* only difference to std code is type of the elem in the BQ */
@@ -346,7 +299,7 @@ typedef struct StgBlockingQueue_ {
 /* this closure is hanging at the end of a blocking queue in (see RBH.c) */
 typedef struct StgRBHSave_ {
   StgHeader    header;
-  StgClosure  *payload[0];     /* 2 words ripped out of the guts of the */
+  StgClosure  *payload[FLEXIBLE_ARRAY];     /* 2 words ripped out of the guts of the */
 } StgRBHSave;                  /*  closure holding the blocking queue */
  
 typedef struct StgRBH_ {