VM: allot_large_object fits better in the allot.hpp file
							parent
							
								
									c02d913579
								
							
						
					
					
						commit
						f8b94c2679
					
				
							
								
								
									
										29
									
								
								vm/allot.hpp
								
								
								
								
							
							
						
						
									
										29
									
								
								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;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										27
									
								
								vm/gc.cpp
								
								
								
								
							
							
						
						
									
										27
									
								
								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<gc_event>();
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue