1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
/* Copyright (C) 2005-2005 Henry Cejtin, Matthew Fluet, Suresh
* Jagannathan, and Stephen Weeks.
*
* MLton is released under a BSD-style license.
* See the file MLton-LICENSE for details.
*/
bool isPointerInHeap (GC_state s, pointer p) {
return (not (isPointer (p))
or (s->heap.start <= p
and p < s->frontier));
}
bool isPointerInOldGen (GC_state s, pointer p) {
return (not (isPointer (p))
or (s->heap.start <= p
and p < s->heap.start + s->heap.oldGenSize));
}
bool isPointerInNursery (GC_state s, pointer p) {
return (not (isPointer (p))
or (s->heap.nursery <= p and p < s->frontier));
}
bool isPointerInFromSpace (GC_state s, pointer p) {
return (isPointerInOldGen (s, p)
or isPointerInNursery (s, p));
}
bool isObjptrInHeap (GC_state s, objptr op) {
pointer p;
if (not (isObjptr(op)))
return TRUE;
p = objptrToPointer (op, s->heap.start);
return isPointerInHeap (s, p);
}
bool isObjptrInOldGen (GC_state s, objptr op) {
pointer p;
if (not (isObjptr(op)))
return TRUE;
p = objptrToPointer (op, s->heap.start);
return isPointerInOldGen (s, p);
}
bool isObjptrInNursery (GC_state s, objptr op) {
pointer p;
if (not (isObjptr(op)))
return TRUE;
p = objptrToPointer (op, s->heap.start);
return isPointerInNursery (s, p);
}
bool isObjptrInFromSpace (GC_state s, objptr op) {
return (isObjptrInOldGen (s, op)
or isObjptrInNursery (s, op));
}
bool hasHeapBytesFree (GC_state s, size_t oldGen, size_t nursery) {
size_t total;
bool res;
total =
s->heap.oldGenSize + oldGen
+ (s->canMinor ? 2 : 1) * (s->limitPlusSlop - s->heap.nursery);
res =
(total <= s->heap.size)
and (nursery <= (size_t)(s->limitPlusSlop - s->frontier));
if (DEBUG_DETAILED)
fprintf (stderr, "%s = hasBytesFree (%s, %s)\n",
boolToString (res),
uintmaxToCommaString(oldGen),
uintmaxToCommaString(nursery));
return res;
}
bool isHeapInit (GC_heap h) {
return (0 == h->size);
}
|