/* ----------------------------------------------------------------------------
- * $Id: InfoTables.h,v 1.29 2003/05/14 09:14:02 simonmar Exp $
+ * $Id: InfoTables.h,v 1.33 2004/08/13 13:09:17 simonmar Exp $
*
* (c) The GHC Team, 1998-2002
*
Ticky info
-------------------------------------------------------------------------- */
+#if defined(SUPPORTS_EMPTY_STRUCTS)
typedef struct {
/* empty */
} StgTickyInfo;
+#endif
/* -----------------------------------------------------------------------------
Debugging info
#else /* !DEBUG_CLOSURE */
-typedef struct {
+# if defined(SUPPORTS_EMPTY_STRUCTS)
+typedef struct StgDebugInfo {
/* empty */
} StgDebugInfo;
+# endif
#endif /* DEBUG_CLOSURE */
(usually on the stack) to the garbage collector. The two primary
uses are for stack frames, and functions (where we need to describe
the layout of a PAP to the GC).
+
+ In these bitmaps: 0 == ptr, 1 == non-ptr.
-------------------------------------------------------------------------- */
//
StgProfInfo prof;
#endif
#ifdef TICKY
- StgTickyInfo ticky;
+ MAYBE_EMPTY_STRUCT(StgTickyInfo,ticky)
#endif
#ifdef DEBUG_CLOSURE
- StgDebugInfo debug;
+ MAYBE_EMPTY_STRUCT(StgDebugInfo,debug)
#endif
StgClosureInfo layout; // closure layout info (one word)
bitmap fields have also been omitted.
-------------------------------------------------------------------------- */
-typedef struct _StgFunInfoTable {
-#if defined(TABLES_NEXT_TO_CODE)
+typedef struct _StgFunInfoExtraRev {
StgFun *slow_apply; // apply to args on the stack
StgWord bitmap; // arg ptr/nonptr bitmap
StgSRT *srt; // pointer to the SRT table
StgHalfWord fun_type; // function type
StgHalfWord arity; // function arity
- StgInfoTable i;
-#else
- StgInfoTable i;
+} StgFunInfoExtraRev;
+
+typedef struct _StgFunInfoExtraFwd {
StgHalfWord fun_type; // function type
StgHalfWord arity; // function arity
StgSRT *srt; // pointer to the SRT table
StgWord bitmap; // arg ptr/nonptr bitmap
StgFun *slow_apply; // apply to args on the stack
+} StgFunInfoExtraFwd;
+
+typedef struct {
+#if defined(TABLES_NEXT_TO_CODE)
+ StgFunInfoExtraRev f;
+ StgInfoTable i;
+#else
+ StgInfoTable i;
+ StgFunInfoExtraFwd f;
#endif
} StgFunInfoTable;
// When info tables are laid out backwards, we can omit the SRT
// pointer iff srt_bitmap is zero.
-typedef struct _StgRetInfoTable {
-#if !defined(TABLES_NEXT_TO_CODE)
- StgInfoTable i;
-#endif
- StgSRT *srt; // pointer to the SRT table
+typedef struct {
#if defined(TABLES_NEXT_TO_CODE)
+ StgSRT *srt; // pointer to the SRT table
StgInfoTable i;
-#endif
-#if !defined(TABLES_NEXT_TO_CODE)
+#else
+ StgInfoTable i;
+ StgSRT *srt; // pointer to the SRT table
StgFunPtr vector[FLEXIBLE_ARRAY];
#endif
} StgRetInfoTable;