[project @ 2004-01-09 12:36:54 by simonmar]
[ghc-hetmet.git] / ghc / includes / ClosureMacros.h
index 35140fc..b977851 100644 (file)
@@ -1,5 +1,5 @@
 /* ----------------------------------------------------------------------------
- * $Id: ClosureMacros.h,v 1.36 2003/05/14 09:14:01 simonmar Exp $
+ * $Id: ClosureMacros.h,v 1.38 2003/11/12 17:27:00 sof Exp $
  *
  * (c) The GHC Team, 1998-1999
  *
@@ -70,7 +70,7 @@
 #define RET_INFO_PTR_TO_STRUCT(info) ((StgRetInfoTable *)(info) - 1)
 #define FUN_INFO_PTR_TO_STRUCT(info) ((StgFunInfoTable *)(info) - 1)
 #define THUNK_INFO_PTR_TO_STRUCT(info) ((StgThunkInfoTable *)(info) - 1)
-static __inline__ StgFunPtr get_entry(const StgInfoTable *itbl) {
+INLINE_HEADER StgFunPtr get_entry(const StgInfoTable *itbl) {
     return (StgFunPtr)(itbl+1);
 }
 #define itbl_to_fun_itbl(i) ((StgFunInfoTable *)(((StgInfoTable *)(i) + 1)) - 1)
@@ -83,7 +83,7 @@ static __inline__ StgFunPtr get_entry(const StgInfoTable *itbl) {
 #define RET_INFO_PTR_TO_STRUCT(info) ((StgRetInfoTable *)info)
 #define FUN_INFO_PTR_TO_STRUCT(info) ((StgFunInfoTable *)info)
 #define THUNK_INFO_PTR_TO_STRUCT(info) ((StgThunkInfoTable *)info)
-static __inline__ StgFunPtr get_entry(const StgInfoTable *itbl) {
+INLINE_HEADER StgFunPtr get_entry(const StgInfoTable *itbl) {
     return itbl->entry;
 }
 #define itbl_to_fun_itbl(i) ((StgFunInfoTable *)(i))
@@ -207,6 +207,13 @@ extern StgWord flip;
 /* These macros are optimised versions of the above for certain
  * closure types.  They *must* be equivalent to the generic
  * STATIC_LINK.
+ *
+ * You may be surprised that the STATIC_LINK field for a THUNK_STATIC
+ * is at offset 2; that's because a THUNK_STATIC always has two words
+ * of (non-ptr) padding, to make room for the IND_STATIC that is
+ * going to overwrite it.  It doesn't do any harm, because a
+ * THUNK_STATIC needs this extra word for the IND_STATIC's saved_info
+ * field anyhow.  Hmm, this is all rather delicate. --SDM
  */
 #define FUN_STATIC_LINK(p)   ((p)->payload[0])
 #define THUNK_STATIC_LINK(p) ((p)->payload[2])