/* ----------------------------------------------------------------------------
- * $Id: Closures.h,v 1.26 2001/02/11 17:51:08 simonmar Exp $
+ * $Id: Closures.h,v 1.27 2001/08/29 17:24:25 qrczak Exp $
*
* (c) The GHC Team, 1998-1999
*
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
StgHeader header;
StgWord padding;
struct StgMutClosure_ *mut_link;
- struct StgClosure_ *payload[0];
+ struct StgClosure_ *payload[FLEXIBLE_ARRAY];
} StgMutClosure;
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 {
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 {
const struct _StgInfoTable* info;
StgWord liveness;
StgWord ret_addr;
- StgWord payload[0];
+ StgWord payload[FLEXIBLE_ARRAY];
} StgRetDyn;
/* Concurrent communication objects */
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 */
/* 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_ {
/* ----------------------------------------------------------------------------
- * $Id: InfoTables.h,v 1.21 2001/03/22 03:51:09 hwloidl Exp $
+ * $Id: InfoTables.h,v 1.22 2001/08/29 17:24:25 qrczak Exp $
*
* (c) The GHC Team, 1998-1999
*
typedef struct {
StgWord size;
- StgWord bitmap[0];
+ StgWord bitmap[FLEXIBLE_ARRAY];
} StgLargeBitmap;
/*
StgWord srt_len : 16; /* } */
#endif
#ifdef TABLES_NEXT_TO_CODE
- StgCode code[0];
+ StgCode code[FLEXIBLE_ARRAY];
#else
StgFunPtr entry;
- StgFunPtr vector[0];
+ StgFunPtr vector[FLEXIBLE_ARRAY];
#endif
} StgInfoTable;
/* -----------------------------------------------------------------------------
- * $Id: Stg.h,v 1.37 2001/08/14 13:40:08 sewardj Exp $
+ * $Id: Stg.h,v 1.38 2001/08/29 17:24:25 qrczak Exp $
*
* (c) The GHC Team, 1998-1999
*
/* Configuration */
#include "config.h"
+#if __GNUC__ >= 3
+/* Assume that a flexible array member at the end of a struct
+ * can be defined thus: T arr[]; */
+#define FLEXIBLE_ARRAY
+#else
+/* Assume that it must be defined thus: T arr[0]; */
+#define FLEXIBLE_ARRAY 0
+#endif
+
/* Some macros to handle DLLing (Win32 only at the moment). */
#include "StgDLL.h"
/* -----------------------------------------------------------------------------
- * $Id: TSO.h,v 1.22 2001/07/23 23:26:14 ken Exp $
+ * $Id: TSO.h,v 1.23 2001/08/29 17:24:25 qrczak Exp $
*
* (c) The GHC Team, 1998-1999
*
StgPtr sp;
StgUpdateFrame* su;
- StgWord stack[0];
+ StgWord stack[FLEXIBLE_ARRAY];
} StgTSO;
/* -----------------------------------------------------------------------------