From 8076c9160007d5e640d04826fa780085abd03def Mon Sep 17 00:00:00 2001 From: Felix Brendel Date: Tue, 1 Oct 2019 13:58:15 +0200 Subject: [PATCH] added pointers to all swiches over types containing types --- build.sh | 0 src/built_ins.cpp | 3 +++ src/io.cpp | 7 ++++--- src/lisp_object.cpp | 3 ++- 4 files changed, 9 insertions(+), 4 deletions(-) mode change 100644 => 100755 build.sh diff --git a/build.sh b/build.sh old mode 100644 new mode 100755 diff --git a/src/built_ins.cpp b/src/built_ins.cpp index e5322bf..9b35af7 100644 --- a/src/built_ins.cpp +++ b/src/built_ins.cpp @@ -18,6 +18,8 @@ proc lisp_object_equal(Lisp_Object* n1, Lisp_Object* n2) -> bool { // pointer, true is returned a // few lines above case Lisp_Object_Type::Function: + case Lisp_Object_Type::Pointer: // TODO(Felix): should a pointer + // object compare the pointer? case Lisp_Object_Type::Continuation: return false; case Lisp_Object_Type::T: // code for t and nil should never be // reached since they are memory unique @@ -861,6 +863,7 @@ proc load_built_ins_into_environment() -> void { case Lisp_Object_Type::Keyword: return Memory::get_or_create_lisp_object_keyword("keyword"); case Lisp_Object_Type::Nil: return Memory::get_or_create_lisp_object_keyword("nil"); case Lisp_Object_Type::T: return Memory::get_or_create_lisp_object_keyword("t"); + case Lisp_Object_Type::Pointer: return Memory::get_or_create_lisp_object_keyword("pointer"); case Lisp_Object_Type::Number: return Memory::get_or_create_lisp_object_keyword("number"); case Lisp_Object_Type::Pair: return Memory::get_or_create_lisp_object_keyword("pair"); case Lisp_Object_Type::Vector: return Memory::get_or_create_lisp_object_keyword("vector"); diff --git a/src/io.cpp b/src/io.cpp index 4e5d5f7..8bcb24f 100644 --- a/src/io.cpp +++ b/src/io.cpp @@ -279,10 +279,11 @@ proc print(Lisp_Object* node, bool print_repr = false, FILE* file = stdout) -> v else fprintf(file, "%f", node->value.number); } break; - case (Lisp_Object_Type::Keyword): fputs(":", file); // NOTE(Felix): intentionall fallthough - case (Lisp_Object_Type::Symbol): fprintf(file, "%s", Memory::get_c_str(node->value.symbol.identifier)); break; + case (Lisp_Object_Type::Keyword): fputs(":", file); // NOTE(Felix): intentionall fallthough + case (Lisp_Object_Type::Symbol): fprintf(file, "%s", Memory::get_c_str(node->value.symbol.identifier)); break; case (Lisp_Object_Type::Continuation): fputs("[continuation]", file); break; - case (Lisp_Object_Type::CFunction): fputs("[C-function]", file); break; + case (Lisp_Object_Type::CFunction): fputs("[C-function]", file); break; + case (Lisp_Object_Type::Pointer): fputs("[pointer]", file); break; case (Lisp_Object_Type::String): { if (print_repr) { putc('\"', file); diff --git a/src/lisp_object.cpp b/src/lisp_object.cpp index 6ebd9a5..cd05d7d 100644 --- a/src/lisp_object.cpp +++ b/src/lisp_object.cpp @@ -21,7 +21,8 @@ proc Lisp_Object_Type_to_string(Lisp_Object_Type type) -> const char* { case(Lisp_Object_Type::CFunction): return "C-function"; case(Lisp_Object_Type::Continuation): return "continuation"; case(Lisp_Object_Type::Pair): return "pair"; - case(Lisp_Object_Type::Vector): return "vector"; + case(Lisp_Object_Type::Vector): return "vector"; + case(Lisp_Object_Type::Pointer): return "pointer"; } return "unknown"; }