[project @ 2003-07-28 16:05:30 by simonmar]
[ghc-hetmet.git] / ghc / includes / Updates.h
index 0820b50..3b9b5c0 100644 (file)
@@ -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
  *
  */
 
 #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) {      \
                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)
 
        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