Fixed importing not working in the test file

This commit is contained in:
Felix Brendel
2019-05-12 11:41:22 +02:00
parent 230d5d81fa
commit 346d2f8f3f
6 changed files with 2571 additions and 2516 deletions
+2549 -2496
View File
File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 277 KiB

After

Width:  |  Height:  |  Size: 139 KiB

+1
View File
@@ -55,6 +55,7 @@ proc lookup_symbol(Lisp_Object* node, Environment* env) -> Lisp_Object* {
String* identifier = node->value.identifier; String* identifier = node->value.identifier;
create_symbol_undefined_error("The symbol '%s' is not defined.", &identifier->data); create_symbol_undefined_error("The symbol '%s' is not defined.", &identifier->data);
print_environment(env);
return nullptr; return nullptr;
} }
+5 -10
View File
@@ -432,24 +432,19 @@ proc interprete_file (char* file_name) -> Lisp_Object* {
Environment* user_env = Memory::create_child_environment(root_env); Environment* user_env = Memory::create_child_environment(root_env);
Parser::environment_for_macros = user_env; Parser::environment_for_macros = user_env;
char* file_content; // char* file_content;
try file_content = read_entire_file(file_name); // try file_content = read_entire_file(file_name);
built_in_load(Memory::create_string("pre.slime"), root_env); built_in_import(Memory::create_string("pre.slime"), user_env);
Lisp_Object_Array_List* program; Lisp_Object* result;
program = Parser::parse_program(Memory::create_string(file_name), file_content); result = built_in_load(Memory::create_string(file_name), user_env);
Lisp_Object* result = Memory::nil;
for (int i = 0; i < program->next_index; ++i) {
result = eval_expr(program->data[i], user_env);
if (Globals::error) { if (Globals::error) {
log_error(); log_error();
delete_error(); delete_error();
return nullptr; return nullptr;
} }
}
return result; return result;
} }
+10 -4
View File
@@ -1,13 +1,21 @@
namespace Memory { namespace Memory {
// ------------------ // ------------------
// lisp_object // lisp_objects
// ------------------ // ------------------
int object_memory_size; int object_memory_size;
Int_Array_List* free_spots_in_object_memory; Int_Array_List* free_spots_in_object_memory;
Lisp_Object* object_memory; Lisp_Object* object_memory;
int next_index_in_object_memory = 0; int next_index_in_object_memory = 0;
// ------------------
// environments
// ------------------
int environment_memory_size;
Int_Array_List* free_spots_in_environment_memory;
Lisp_Object* environment_memory;
int next_index_in_environment_memory = 0;
// ------------------ // ------------------
// strings // strings
// ------------------ // ------------------
@@ -19,7 +27,6 @@ namespace Memory {
String* string_memory; String* string_memory;
String* next_free_spot_in_string_memory; String* next_free_spot_in_string_memory;
// ------------------ // ------------------
// immutables // immutables
// ------------------ // ------------------
@@ -168,8 +175,7 @@ namespace Memory {
next_index_in_object_memory = 2; // because t and nil are always there next_index_in_object_memory = 2; // because t and nil are always there
next_free_spot_in_string_memory = string_memory; next_free_spot_in_string_memory = string_memory;
Globals::root_environment->next_index = 0; Globals::root_environment = create_built_ins_environment();
Globals::root_environment->parents->next_index = 0;
} }
proc create_lisp_object_number(double number) -> Lisp_Object* { proc create_lisp_object_number(double number) -> Lisp_Object* {
+1 -1
View File
@@ -570,7 +570,7 @@ proc test_file(const char* file) -> testresult {
Environment* user_env = Memory::create_child_environment(root_env); Environment* user_env = Memory::create_child_environment(root_env);
assert_no_error(); assert_no_error();
Parser::environment_for_macros = root_env; Parser::environment_for_macros = user_env;
built_in_import(Memory::create_string("pre.slime"), user_env); built_in_import(Memory::create_string("pre.slime"), user_env);
assert_no_error(); assert_no_error();
+1 -1
View File
@@ -414,7 +414,7 @@ proc visualize_lisp_machine() -> void {
} }
remove_doubles_from_lisp_object_array_list(pairs_to_filter); remove_doubles_from_lisp_object_array_list(pairs_to_filter);
fprintf(stderr, "removing %d pairs\n", pairs_to_filter->next_index); // fprintf(stderr, "removing %d pairs\n", pairs_to_filter->next_index);
// okay, so pairs_to_filter now only the pairs once each that // okay, so pairs_to_filter now only the pairs once each that
// we want to filter from the pairs list // we want to filter from the pairs list
for (int i = 0; i < pairs->next_index; ++i) { for (int i = 0; i < pairs->next_index; ++i) {