1 /* Copyright (C) 2012,2017 Matthew Fluet.
2 * Copyright (C) 2005 Henry Cejtin, Matthew Fluet, Suresh
3 * Jagannathan, and Stephen Weeks.
5 * MLton is released under a BSD-style license.
6 * See the file MLton-LICENSE for details.
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
));
15 bool isPointerInNursery (GC_state s
, pointer p
) {
16 return (not (isPointer (p
))
17 or (s
->heap
.nursery
<= p
18 and p
<= s
->frontier
));
22 bool isObjptrInOldGen (GC_state s
, objptr op
) {
24 if (not (isObjptr(op
)))
26 p
= objptrToPointer (op
, s
->heap
.start
);
27 return isPointerInOldGen (s
, p
);
31 bool isObjptrInNursery (GC_state s
, objptr op
) {
33 if (not (isObjptr(op
)))
35 p
= objptrToPointer (op
, s
->heap
.start
);
36 return isPointerInNursery (s
, p
);
40 bool isObjptrInFromSpace (GC_state s
, objptr op
) {
41 return (isObjptrInOldGen (s
, op
)
42 or isObjptrInNursery (s
, op
));
46 bool hasHeapBytesFree (GC_state s
, size_t oldGen
, size_t nursery
) {
51 s
->heap
.oldGenSize
+ oldGen
52 + (s
->canMinor
? 2 : 1) * (size_t)(s
->limitPlusSlop
- s
->heap
.nursery
);
54 (total
<= s
->heap
.size
)
55 and (nursery
<= (size_t)(s
->limitPlusSlop
- s
->frontier
));
57 fprintf (stderr
, "%s = hasBytesFree (%s, %s)\n",
59 uintmaxToCommaString(oldGen
),
60 uintmaxToCommaString(nursery
));
64 bool isHeapInit (GC_heap h
) {
65 return (0 == h
->size
);