X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fincludes%2FClosures.h;h=982b28f70f1784cb1b901f0b238c8156d64bb852;hb=74a395c2cd036a82a17b3a6f3d33477ebadb66c2;hp=5f4eada7e1350c62f8b1c8a7de0fea94adf30ba3;hpb=dd4c28a9c706cce09ecc2c6f532969efa925532f;p=ghc-hetmet.git diff --git a/ghc/includes/Closures.h b/ghc/includes/Closures.h index 5f4eada..982b28f 100644 --- a/ghc/includes/Closures.h +++ b/ghc/includes/Closures.h @@ -1,5 +1,5 @@ /* ---------------------------------------------------------------------------- - * $Id: Closures.h,v 1.17 2000/03/31 03:09:35 hwloidl Exp $ + * $Id: Closures.h,v 1.27 2001/08/29 17:24:25 qrczak 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; + struct StgClosure_ *payload[FLEXIBLE_ARRAY]; +}; /* 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,9 +150,9 @@ typedef struct StgClosure_ { typedef struct StgMutClosure_ { StgHeader header; - StgPtr *padding; + StgWord padding; struct StgMutClosure_ *mut_link; - struct StgClosure_ *payload[0]; + struct StgClosure_ *payload[FLEXIBLE_ARRAY]; } StgMutClosure; typedef struct { @@ -164,26 +164,17 @@ typedef struct { StgHeader header; StgWord n_args; StgClosure *fun; - StgPtr payload[0]; + StgClosure *payload[FLEXIBLE_ARRAY]; } StgPAP; typedef struct { StgHeader header; StgWord n_args; StgClosure *fun; - StgPtr payload[0]; + StgClosure *payload[FLEXIBLE_ARRAY]; } 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,30 +186,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 { @@ -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 @@ -305,7 +297,7 @@ typedef struct { const struct _StgInfoTable* info; StgWord liveness; StgWord ret_addr; - StgWord payload[0]; + StgWord payload[FLEXIBLE_ARRAY]; } StgRetDyn; /* Concurrent communication objects */ @@ -334,7 +326,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 */ @@ -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[FLEXIBLE_ARRAY]; /* 2 words ripped out of the guts of the */ } StgRBHSave; /* closure holding the blocking queue */ typedef struct StgRBH_ {