diff --git a/src/eval.cpp b/src/eval.cpp index 6eaeddb..48557ef 100644 --- a/src/eval.cpp +++ b/src/eval.cpp @@ -533,13 +533,21 @@ namespace Slime { Lisp_Object* parsed, * evaluated; while (true) { - delete_error(); + if (Globals::error) { + log_error(); + delete_error(); + } fputs("> ", stdout); line = read_expression(); - try_void parsed = Parser::parse_single_expression(line); + parsed = Parser::parse_single_expression(line); + if (Globals::error) { + continue; + } free(line); - try_void evaluated = eval_expr(parsed); - // try_void evaluated = eval_expr(parsed); + evaluated = eval_expr(parsed); + if (Globals::error) { + continue; + } if (evaluated && evaluated != Memory::nil) { print(evaluated); } diff --git a/src/memory.cpp b/src/memory.cpp index fd104d5..c6101c3 100644 --- a/src/memory.cpp +++ b/src/memory.cpp @@ -210,8 +210,7 @@ namespace Slime::Memory { } }; char* exe_path = get_exe_dir(); - // don't free exe path because it will be used until end of time - Globals::load_path.alloc(); + global_symbol_table.alloc(); global_keyword_table.alloc();