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) {
object* obj = nursery->allot(size);
obj->initialize(type);
+
return obj;
}
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<gc_event>();
}