Ver a proveniência

easier way to create vectors

master
FelixBrendel há 6 anos
ascendente
cometimento
c1bec1a4d4
3 ficheiros alterados com 64 adições e 14 eliminações
  1. +11
    -6
      include/libslime.h
  2. +10
    -6
      src/forward_decls.cpp
  3. +43
    -2
      src/memory.cpp

+ 11
- 6
include/libslime.h Ver ficheiro

@@ -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 {


+ 10
- 6
src/forward_decls.cpp Ver ficheiro

@@ -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
src/memory.cpp Ver ficheiro

@@ -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;
}



Carregando…
Cancelar
Guardar