From 59762009f1f707674c5d8c6e0d02ccb5544a2196 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Lindqvist?= Date: Sat, 15 Aug 2015 00:19:44 +0200 Subject: [PATCH] VM: simplified logic for allot_object() --- vm/allot.hpp | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) 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; } }