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