[project @ 1999-02-02 12:37:14 by simonm]
[ghc-hetmet.git] / ghc / rts / Sanity.c
index cef528a..ed8cdc3 100644 (file)
@@ -1,5 +1,5 @@
 /* -----------------------------------------------------------------------------
- * $Id: Sanity.c,v 1.5 1999/01/18 15:18:06 simonm Exp $
+ * $Id: Sanity.c,v 1.8 1999/02/02 12:37:14 simonm Exp $
  *
  * Sanity checking code for the heap and stack.
  *
@@ -203,9 +203,32 @@ checkClosure( StgClosure* p )
        return sizeofW(StgMVar);
       }
 
-    case FUN:
     case THUNK:
+    case THUNK_1_0:
+    case THUNK_0_1:
+    case THUNK_1_1:
+    case THUNK_0_2:
+    case THUNK_2_0:
+      {
+       nat i;
+       for (i = 0; i < info->layout.payload.ptrs; i++) {
+         ASSERT(LOOKS_LIKE_PTR(payloadPtr(p,i)));
+       }
+       return stg_max(sizeW_fromITBL(info), sizeofW(StgHeader) + MIN_UPD_SIZE);
+      }
+
+    case FUN:
+    case FUN_1_0:
+    case FUN_0_1:
+    case FUN_1_1:
+    case FUN_0_2:
+    case FUN_2_0:
     case CONSTR:
+    case CONSTR_1_0:
+    case CONSTR_0_1:
+    case CONSTR_1_1:
+    case CONSTR_0_2:
+    case CONSTR_2_0:
     case IND_PERM:
     case IND_OLDGEN:
     case IND_OLDGEN_PERM:
@@ -215,6 +238,7 @@ checkClosure( StgClosure* p )
     case BLACKHOLE:
     case BLACKHOLE_BQ:
     case FOREIGN:
+    case STABLE_NAME:
     case MUT_VAR:
     case CONSTR_INTLIKE:
     case CONSTR_CHARLIKE:
@@ -340,8 +364,10 @@ checkHeap(bdescr *bd, StgPtr start)
         /* This is the smallest size of closure that can live in the heap. */
         ASSERT( size >= MIN_NONUPD_SIZE + sizeofW(StgHeader) );
        p += size;
+
+       /* skip over slop */
        while (p < bd->free &&
-              *p && !LOOKS_LIKE_GHC_INFO(*p)) { p++; } /* skip over slop */
+              (*p == 0 || !LOOKS_LIKE_GHC_INFO(*p))) { p++; } 
       }
       bd = bd->link;
       if (bd != NULL) {