From f8b94c26792ae51d6e8653a5775723b2341c8aed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Lindqvist?= Date: Thu, 22 Sep 2016 13:13:55 +0200 Subject: [PATCH] VM: allot_large_object fits better in the allot.hpp file --- vm/allot.hpp | 29 +++++++++++++++++++++++++++-- vm/gc.cpp | 27 --------------------------- 2 files changed, 27 insertions(+), 29 deletions(-) diff --git a/vm/allot.hpp b/vm/allot.hpp index e7e11e46ef..59c362a0b5 100644 --- a/vm/allot.hpp +++ b/vm/allot.hpp @@ -1,7 +1,31 @@ namespace factor { -// It is up to the caller to fill in the object's fields in a meaningful -// fashion! +// It is up to the caller to fill in the object's fields in a +// meaningful fashion! + +// Allocates memory +inline object* factor_vm::allot_large_object(cell type, cell size) { + // If tenured space does not have enough room, collect and compact + cell requested_size = size + data->high_water_mark(); + if (!data->tenured->can_allot_p(requested_size)) { + primitive_compact_gc(); + + // If it still won't fit, grow the heap + if (!data->tenured->can_allot_p(requested_size)) { + gc(collect_growing_heap_op, size); + } + } + + object* obj = data->tenured->allot(size); + + // Allows initialization code to store old->new pointers + // without hitting the write barrier in the common case of + // a nursery allocation + write_barrier(obj, size); + + obj->initialize(type); + return obj; +} // Allocates memory inline object* factor_vm::allot_object(cell type, cell size) { @@ -20,6 +44,7 @@ inline object* factor_vm::allot_object(cell type, cell size) { object* obj = nursery->allot(size); obj->initialize(type); + return obj; } diff --git a/vm/gc.cpp b/vm/gc.cpp index 13b89ad890..ab8a48d9d3 100644 --- a/vm/gc.cpp +++ b/vm/gc.cpp @@ -189,33 +189,6 @@ void factor_vm::primitive_compact_gc() { gc(collect_compact_op, 0); } -// It is up to the caller to fill in the object's fields in a meaningful -// fashion! - -// Allocates memory -object* factor_vm::allot_large_object(cell type, cell size) { - // If tenured space does not have enough room, collect and compact - cell requested_size = size + data->high_water_mark(); - if (!data->tenured->can_allot_p(requested_size)) { - primitive_compact_gc(); - - // If it still won't fit, grow the heap - if (!data->tenured->can_allot_p(requested_size)) { - gc(collect_growing_heap_op, size); - } - } - - object* obj = data->tenured->allot(size); - - // Allows initialization code to store old->new pointers - // without hitting the write barrier in the common case of - // a nursery allocation - write_barrier(obj, size); - - obj->initialize(type); - return obj; -} - void factor_vm::primitive_enable_gc_events() { gc_events = new std::vector(); }