return array_size<Array>(array_capacity(array));
}
-/* Allocates memory */
+// Allocates memory
template <typename Array>
Array* factor_vm::allot_uninitialized_array(cell capacity) {
Array* array = allot<Array>(array_size<Array>(capacity));
template <typename Array>
bool factor_vm::reallot_array_in_place_p(Array* array, cell capacity) {
- return nursery.contains_p(array) && capacity <= array_capacity(array);
+ return data->nursery->contains_p(array) &&
+ capacity <= array_capacity(array);
}
-/* Allocates memory (sometimes) */
+// Allocates memory (sometimes)
template <typename Array>
Array* factor_vm::reallot_array(Array* array_, cell capacity) {
data_root<Array> array(array_, this);
if (reallot_array_in_place_p(array.untagged(), capacity)) {
array->capacity = tag_fixnum(capacity);
return array.untagged();
- } else {
- cell to_copy = array_capacity(array.untagged());
- if (capacity < to_copy)
- to_copy = capacity;
+ }
+ cell to_copy = array_capacity(array.untagged());
+ if (capacity < to_copy)
+ to_copy = capacity;
- Array* new_array = allot_uninitialized_array<Array>(capacity);
+ Array* new_array = allot_uninitialized_array<Array>(capacity);
- memcpy(new_array + 1, array.untagged() + 1, to_copy * Array::element_size);
- memset((char*)(new_array + 1) + to_copy * Array::element_size, 0,
- (capacity - to_copy) * Array::element_size);
+ memcpy(new_array + 1, array.untagged() + 1, to_copy * Array::element_size);
+ memset((char*)(new_array + 1) + to_copy * Array::element_size, 0,
+ (capacity - to_copy) * Array::element_size);
- return new_array;
- }
+ return new_array;
}
}