X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;ds=sidebyside;f=ghc%2Fincludes%2FClosureMacros.h;h=b9778518a6a20680be793a25ffacc23d97f04ff6;hb=49fabae45e348e93d25064e469dc777eb3bfc56d;hp=35140fce7dc377082c4efa99774408b5922b37ae;hpb=7a236a564b90cd060612e1e979ce7d552da61fa1;p=ghc-hetmet.git diff --git a/ghc/includes/ClosureMacros.h b/ghc/includes/ClosureMacros.h index 35140fc..b977851 100644 --- a/ghc/includes/ClosureMacros.h +++ b/ghc/includes/ClosureMacros.h @@ -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])