VM: simplified logic for allot_object()

db4
Björn Lindqvist 2015-08-15 00:19:44 +02:00 committed by John Benediktsson
parent 1b1b275a1a
commit 59762009f1
1 changed files with 11 additions and 12 deletions

View File

@ -9,21 +9,20 @@ inline object* factor_vm::allot_object(cell type, cell size) {
FACTOR_ASSERT(!current_gc);
bump_allocator *nursery = data->nursery;
/* If the object is bigger than the nursery, allocate it in tenured
space */
if (size >= nursery->size)
return allot_large_object(type, size);
/* If the object is smaller than the nursery, allocate it in the nursery,
after a GC if needed */
if (nursery->size > size) {
/* If there is insufficient room, collect the nursery */
if (nursery->here + size > nursery->end)
primitive_minor_gc();
if (nursery->here + size > nursery->end)
primitive_minor_gc();
object* obj = nursery->allot(size);
obj->initialize(type);
return obj;
} /* If the object is bigger than the nursery, allocate it in
tenured space */
else
return allot_large_object(type, size);
object* obj = nursery->allot(size);
obj->initialize(type);
return obj;
}
}