|
|
|
@@ -3,7 +3,7 @@ namespace Memory { |
|
|
|
// ------------------ |
|
|
|
// lisp_object |
|
|
|
// ------------------ |
|
|
|
constexpr int object_memory_size = 4096 * 1024; // == 98304kb == 96mb |
|
|
|
int object_memory_size; |
|
|
|
Int_Array_List* free_spots_in_object_memory; |
|
|
|
Lisp_Object* object_memory; |
|
|
|
int next_index_in_object_memory = 0; |
|
|
|
@@ -11,7 +11,7 @@ namespace Memory { |
|
|
|
// ------------------ |
|
|
|
// strings |
|
|
|
// ------------------ |
|
|
|
constexpr int string_memory_size = 4096 * 1024; // == 98304kb == 96mb |
|
|
|
int string_memory_size; // = 4096 * 1024; // == 98304kb == 96mb |
|
|
|
// free_spots_in_string_memory is an arraylist of pointers into |
|
|
|
// the string_memory, where dead String objects live (which give |
|
|
|
// information about their size) |
|
|
|
@@ -102,12 +102,15 @@ namespace Memory { |
|
|
|
return object; |
|
|
|
} |
|
|
|
|
|
|
|
proc init() { |
|
|
|
proc init(int oms, int sms) { |
|
|
|
object_memory_size = oms; |
|
|
|
string_memory_size = sms; |
|
|
|
|
|
|
|
free_spots_in_object_memory = create_Int_array_list(); |
|
|
|
free_spots_in_string_memory = create_Void_Ptr_array_list(); |
|
|
|
|
|
|
|
object_memory = (Lisp_Object*)malloc(object_memory_size * sizeof(Lisp_Object)); |
|
|
|
string_memory = (String*)malloc(object_memory_size * sizeof(Lisp_Object)); |
|
|
|
string_memory = (String*)malloc(string_memory_size * sizeof(char)); |
|
|
|
|
|
|
|
next_free_spot_in_string_memory = string_memory; |
|
|
|
|
|
|
|
@@ -120,6 +123,13 @@ namespace Memory { |
|
|
|
t->type = Lisp_Object_Type::T; |
|
|
|
} |
|
|
|
|
|
|
|
proc reset() { |
|
|
|
free_spots_in_object_memory->next_index = 0; |
|
|
|
free_spots_in_string_memory->next_index = 0; |
|
|
|
next_index_in_object_memory = 2; // because t and nil are always there |
|
|
|
next_free_spot_in_string_memory = string_memory; |
|
|
|
} |
|
|
|
|
|
|
|
proc create_lisp_object_number(double number) -> Lisp_Object* { |
|
|
|
Lisp_Object* node = create_lisp_object(); |
|
|
|
node->type = Lisp_Object_Type::Number; |
|
|
|
|