X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;ds=sidebyside;f=ghc%2Fincludes%2FUpdates.h;h=3b9b5c02f37f5d8de64cdbc8b65955ff8fda538b;hb=18074d6acde6d642b8fb10b1b49153f717c75446;hp=0820b50b9f736bdd5a4da0f3f1cec3466d1900d3;hpb=af13609607da81e7837a7c7c598de82452363ab5;p=ghc-hetmet.git diff --git a/ghc/includes/Updates.h b/ghc/includes/Updates.h index 0820b50..3b9b5c0 100644 --- a/ghc/includes/Updates.h +++ b/ghc/includes/Updates.h @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------------- - * $Id: Updates.h,v 1.29 2003/01/25 15:54:48 wolfgang Exp $ + * $Id: Updates.h,v 1.33 2003/07/28 16:05:38 simonmar Exp $ * * (c) The GHC Team, 1998-1999 * @@ -27,16 +27,22 @@ */ #ifdef TICKY_TICKY -# define UPD_IND(updclosure, heapptr) UPD_PERM_IND(updclosure,heapptr) +# define UPD_IND(updclosure, heapptr) \ + UPD_PERM_IND(updclosure,heapptr) +# define UPD_SPEC_IND(updclosure, ind_info, heapptr, and_then) \ + UPD_PERM_IND(updclosure,heapptr); and_then #else -# define UPD_IND(updclosure, heapptr) UPD_REAL_IND(updclosure,heapptr) +# define UPD_IND(updclosure, heapptr) \ + UPD_REAL_IND(updclosure,&stg_IND_info,heapptr,) +# define UPD_SPEC_IND(updclosure, ind_info, heapptr, and_then) \ + UPD_REAL_IND(updclosure,ind_info,heapptr,and_then) #endif /* UPD_IND actually does a PERM_IND if TICKY_TICKY is on; if you *really* need an IND use UPD_REAL_IND */ #ifdef SMP -#define UPD_REAL_IND(updclosure, heapptr) \ +#define UPD_REAL_IND(updclosure, ind_info, heapptr, and_then) \ { \ const StgInfoTable *info; \ if (Bdescr((P_)updclosure)->u.back != (bdescr *)BaseReg) { \ @@ -45,19 +51,21 @@ info = updclosure->header.info; \ } \ AWAKEN_BQ(info,updclosure); \ - updateWithIndirection(info, \ + updateWithIndirection(info, ind_info, \ (StgClosure *)updclosure, \ - (StgClosure *)heapptr); \ + (StgClosure *)heapptr, \ + and_then); \ } #else -#define UPD_REAL_IND(updclosure, heapptr) \ +#define UPD_REAL_IND(updclosure, ind_info, heapptr, and_then) \ { \ const StgInfoTable *info; \ info = ((StgClosure *)updclosure)->header.info; \ AWAKEN_BQ(info,updclosure); \ - updateWithIndirection(info, \ + updateWithIndirection(((StgClosure *)updclosure)->header.info, ind_info, \ (StgClosure *)updclosure, \ - (StgClosure *)heapptr); \ + (StgClosure *)heapptr, \ + and_then); \ } #endif @@ -89,9 +97,9 @@ const StgInfoTable *info; \ info = updclosure->header.info; \ AWAKEN_BQ(info,updclosure); \ - updateWithIndirection(info, \ + updateWithIndirection(info,&stg_IND_info, \ (StgClosure *)updclosure, \ - (StgClosure *)heapptr); \ + (StgClosure *)heapptr,); \ } #elif defined(RTS_SUPPORTS_THREADS) @@ -111,9 +119,9 @@ const StgInfoTable *info; \ info = ((StgClosure *)updclosure)->header.info; \ AWAKEN_BQ_NOLOCK(info,updclosure); \ - updateWithIndirection(info, \ + updateWithIndirection(info,&stg_IND_info, \ (StgClosure *)updclosure, \ - (StgClosure *)heapptr); \ + (StgClosure *)heapptr,); \ } # endif