diff --git a/vm/allot.hpp b/vm/allot.hpp index 8b965d91f5..931fdcccbc 100644 --- a/vm/allot.hpp +++ b/vm/allot.hpp @@ -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; } }