From c1bec1a4d416464c01a13e0af03b287c8ffc6bb9 Mon Sep 17 00:00:00 2001 From: FelixBrendel Date: Tue, 19 Nov 2019 23:39:09 +0100 Subject: [PATCH] easier way to create vectors --- include/libslime.h | 17 ++++++++++------ src/forward_decls.cpp | 16 +++++++++------ src/memory.cpp | 45 +++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 64 insertions(+), 14 deletions(-) diff --git a/include/libslime.h b/include/libslime.h index 37bcf2d..37800a0 100644 --- a/include/libslime.h +++ b/include/libslime.h @@ -204,12 +204,17 @@ namespace Slime { Lisp_Object* get_or_create_lisp_object_keyword(String* identifier); Lisp_Object* get_or_create_lisp_object_keyword(const char*); Lisp_Object* create_lisp_object_string(const char*); - Lisp_Object* create_list(Lisp_Object*); - Lisp_Object* create_list(Lisp_Object*,Lisp_Object*); - Lisp_Object* create_list(Lisp_Object*,Lisp_Object*,Lisp_Object*); - Lisp_Object* create_list(Lisp_Object*,Lisp_Object*,Lisp_Object*,Lisp_Object*); - Lisp_Object* create_list(Lisp_Object*,Lisp_Object*,Lisp_Object*,Lisp_Object*,Lisp_Object*); - Lisp_Object* create_list(Lisp_Object*,Lisp_Object*,Lisp_Object*,Lisp_Object*,Lisp_Object*,Lisp_Object*); + Lisp_Object* create_lisp_object_pair(Lisp_Object*, Lisp_Object*); + Lisp_Object* create_lisp_object_vector(int, Lisp_Object*); + Lisp_Object* create_lisp_object_vector(Lisp_Object*); + Lisp_Object* create_lisp_object_vector(Lisp_Object*, Lisp_Object*); + Lisp_Object* create_lisp_object_vector(Lisp_Object*, Lisp_Object*, Lisp_Object*); + inline Lisp_Object* create_list(Lisp_Object*); + inline Lisp_Object* create_list(Lisp_Object*,Lisp_Object*); + inline Lisp_Object* create_list(Lisp_Object*,Lisp_Object*,Lisp_Object*); + inline Lisp_Object* create_list(Lisp_Object*,Lisp_Object*,Lisp_Object*,Lisp_Object*); + inline Lisp_Object* create_list(Lisp_Object*,Lisp_Object*,Lisp_Object*,Lisp_Object*,Lisp_Object*); + inline Lisp_Object* create_list(Lisp_Object*,Lisp_Object*,Lisp_Object*,Lisp_Object*,Lisp_Object*,Lisp_Object*); } namespace Parser { diff --git a/src/forward_decls.cpp b/src/forward_decls.cpp index f4173b7..e643f2b 100644 --- a/src/forward_decls.cpp +++ b/src/forward_decls.cpp @@ -46,12 +46,16 @@ namespace Memory { Lisp_Object* get_or_create_lisp_object_keyword(String* identifier); Lisp_Object* get_or_create_lisp_object_keyword(const char*); Lisp_Object* create_lisp_object_string(const char*); - Lisp_Object* create_list(Lisp_Object*); - Lisp_Object* create_list(Lisp_Object*,Lisp_Object*); - Lisp_Object* create_list(Lisp_Object*,Lisp_Object*,Lisp_Object*); - Lisp_Object* create_list(Lisp_Object*,Lisp_Object*,Lisp_Object*,Lisp_Object*); - Lisp_Object* create_list(Lisp_Object*,Lisp_Object*,Lisp_Object*,Lisp_Object*,Lisp_Object*); - Lisp_Object* create_list(Lisp_Object*,Lisp_Object*,Lisp_Object*,Lisp_Object*,Lisp_Object*,Lisp_Object*); + Lisp_Object* create_lisp_object_vector(Lisp_Object*); + Lisp_Object* create_lisp_object_vector(Lisp_Object*, Lisp_Object*); + Lisp_Object* create_lisp_object_vector(Lisp_Object*, Lisp_Object*, Lisp_Object*); + Lisp_Object* create_lisp_object_vector(int, Lisp_Object*); + inline Lisp_Object* create_list(Lisp_Object*); + inline Lisp_Object* create_list(Lisp_Object*,Lisp_Object*); + inline Lisp_Object* create_list(Lisp_Object*,Lisp_Object*,Lisp_Object*); + inline Lisp_Object* create_list(Lisp_Object*,Lisp_Object*,Lisp_Object*,Lisp_Object*); + inline Lisp_Object* create_list(Lisp_Object*,Lisp_Object*,Lisp_Object*,Lisp_Object*,Lisp_Object*); + inline Lisp_Object* create_list(Lisp_Object*,Lisp_Object*,Lisp_Object*,Lisp_Object*,Lisp_Object*,Lisp_Object*); } namespace Parser { diff --git a/src/memory.cpp b/src/memory.cpp index 42c4876..2a079a1 100644 --- a/src/memory.cpp +++ b/src/memory.cpp @@ -310,6 +310,49 @@ namespace Memory { return node; } + proc create_lisp_object_vector(Lisp_Object* e1) -> Lisp_Object* { + Lisp_Object* node; + try node = create_lisp_object(); + set_type(node, Lisp_Object_Type::Vector); + + node->value.vector.length = 1; + try node->value.vector.data = allocate_vector(1); + + node->value.vector.data[0] = *e1; + + return node; + } + + proc create_lisp_object_vector(Lisp_Object* e1, Lisp_Object* e2) -> Lisp_Object* { + Lisp_Object* node; + try node = create_lisp_object(); + set_type(node, Lisp_Object_Type::Vector); + + node->value.vector.length = 2; + try node->value.vector.data = allocate_vector(2); + + node->value.vector.data[0] = *e1; + node->value.vector.data[1] = *e2; + + return node; + } + + proc create_lisp_object_vector(Lisp_Object* e1, Lisp_Object* e2, Lisp_Object* e3) -> Lisp_Object* { + Lisp_Object* node; + try node = create_lisp_object(); + set_type(node, Lisp_Object_Type::Vector); + + node->value.vector.length = 3; + try node->value.vector.data = allocate_vector(3); + + node->value.vector.data[0] = *e1; + node->value.vector.data[1] = *e2; + node->value.vector.data[2] = *e3; + + return node; + } + + proc create_new_lisp_object_symbol(String* identifier) -> Lisp_Object* { Lisp_Object* node; try node = create_lisp_object(); @@ -425,9 +468,7 @@ namespace Memory { }; try load_built_ins_into_environment(); - try built_in_load(Memory::create_string("pre.slime")); - return ret; }