easier way to create vectors

This commit is contained in:
FelixBrendel
2019-11-19 23:39:09 +01:00
parent e02db00b86
commit c1bec1a4d4
3 changed files with 64 additions and 14 deletions
+10 -6
View File
@@ -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 {
+43 -2
View File
@@ -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;
}