From 02063bf6fbd590b0c8a6e20534b503c32957311d Mon Sep 17 00:00:00 2001 From: Felix Brendel Date: Wed, 17 Jul 2019 16:44:01 +0200 Subject: [PATCH] function definitions now remember the Lip_Object symbols and keys not only the strings.. wtf was I thinkingh before? --- .rgignore | 2 + build.bat | 4 +- manual/built-in-docs.org | 104 +++++++++++++++++++-------------------- src/built_ins.cpp | 8 +-- src/docgeneration.cpp | 8 +-- src/eval.cpp | 12 ++--- src/lisp_object.cpp | 16 +++--- src/structs.cpp | 10 +--- 8 files changed, 80 insertions(+), 84 deletions(-) diff --git a/.rgignore b/.rgignore index a0965f9..66f3395 100644 --- a/.rgignore +++ b/.rgignore @@ -1,2 +1,4 @@ /vs /build +/manual +todo.org \ No newline at end of file diff --git a/build.bat b/build.bat index efcdc6d..231b237 100644 --- a/build.bat +++ b/build.bat @@ -9,8 +9,8 @@ pushd bin taskkill /F /IM %exeName% > NUL 2> NUL echo ---------- Compiling ---------- -rem call ..\timecmd cl ../src/main.cpp /std:c++latest /Fe%exeName% /W3 /Zi /nologo /EHsc /link /NODEFAULTLIB:libucrt libucrtd.lib -call ..\timecmd clang-cl ../src/main.cpp -o %exeName% /O2 /std:c++latest /W3 /Zi /EHsc +call ..\timecmd cl ../src/main.cpp /std:c++latest /Fe%exeName% /W3 /Zi /nologo /EHsc /link /NODEFAULTLIB:libucrt libucrtd.lib +rem call ..\timecmd clang-cl ../src/main.cpp -o %exeName% /O2 /std:c++latest /W3 /Zi /EHsc popd if %errorlevel% == 0 ( diff --git a/manual/built-in-docs.org b/manual/built-in-docs.org index e94d92e..02bd353 100644 --- a/manual/built-in-docs.org +++ b/manual/built-in-docs.org @@ -10,7 +10,7 @@ Takes 0 or more arguments and returns =t= if all arguments are equal and =()= ot \hrule * =>= - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:175:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:174:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -19,7 +19,7 @@ TODO \hrule * =>== - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:193:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:191:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -28,7 +28,7 @@ TODO \hrule * =<= - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:211:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:208:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -37,7 +37,7 @@ TODO \hrule * =<== - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:231:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:227:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -46,7 +46,7 @@ TODO \hrule * =+= - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:249:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:244:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -55,7 +55,7 @@ TODO \hrule * =-= - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:262:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:256:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -64,7 +64,7 @@ TODO \hrule * =*= - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:285:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:278:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -73,7 +73,7 @@ TODO \hrule * =/= - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:306:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:298:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -82,7 +82,7 @@ TODO \hrule * =**= - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:327:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:318:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -91,7 +91,7 @@ TODO \hrule * =%= - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:343:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:333:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -100,7 +100,7 @@ TODO \hrule * =assert= - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:359:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:348:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -109,7 +109,7 @@ TODO \hrule * =define= - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:371:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:359:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -118,7 +118,7 @@ TODO \hrule * =mutate= - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:433:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:421:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -127,7 +127,7 @@ TODO \hrule * =if= - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:458:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:446:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -136,7 +136,7 @@ TODO \hrule * =quote= - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:478:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:466:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -145,7 +145,7 @@ TODO \hrule * =quasiquote= - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:483:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:471:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -154,7 +154,7 @@ TODO \hrule * =and= - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:581:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:568:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -163,7 +163,7 @@ TODO \hrule * =or= - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:592:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:579:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -172,7 +172,7 @@ TODO \hrule * =not= - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:603:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:590:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -181,7 +181,7 @@ TODO \hrule * =while= - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:613:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:600:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -190,7 +190,7 @@ TODO \hrule * =lambda= - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:691:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:678:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -199,7 +199,7 @@ TODO \hrule * =special-lambda= - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:703:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:690:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -208,7 +208,7 @@ TODO \hrule * =eval= - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:711:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:698:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -217,7 +217,7 @@ TODO \hrule * =begin= - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:723:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:710:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -226,7 +226,7 @@ TODO \hrule * =list= - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:739:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:726:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -235,7 +235,7 @@ TODO \hrule * =pair= - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:743:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:730:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -244,7 +244,7 @@ TODO \hrule * =first= - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:753:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:740:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -253,7 +253,7 @@ TODO \hrule * =rest= - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:764:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:751:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -262,7 +262,7 @@ TODO \hrule * =set-type= - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:775:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:762:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -271,7 +271,7 @@ TODO \hrule * =delete-type= - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:787:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:774:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -280,7 +280,7 @@ TODO \hrule * =type= - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:794:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:781:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -289,7 +289,7 @@ TODO \hrule * =info= - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:826:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:813:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -298,7 +298,7 @@ TODO \hrule * =show= - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:908:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:895:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -307,7 +307,7 @@ TODO \hrule * =addr-of= - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:920:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:907:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -316,7 +316,7 @@ TODO \hrule * =generate-docs= - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:926:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:913:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -325,7 +325,7 @@ TODO \hrule * =print= - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:935:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:922:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -334,7 +334,7 @@ TODO \hrule * =read= - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:943:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:930:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -343,7 +343,7 @@ TODO \hrule * =exit= - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:960:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:947:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -352,7 +352,7 @@ TODO \hrule * =break= - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:971:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:958:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -361,7 +361,7 @@ TODO \hrule * =memstat= - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:976:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:963:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -370,7 +370,7 @@ TODO \hrule * =try= - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:980:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:967:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -379,7 +379,7 @@ TODO \hrule * =load= - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:995:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:982:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -388,7 +388,7 @@ TODO \hrule * =import= - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:1006:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:993:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -397,7 +397,7 @@ TODO \hrule * =copy= - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:1017:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:1004:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -406,7 +406,7 @@ TODO \hrule * =error= - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:1025:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:1012:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -415,7 +415,7 @@ TODO \hrule * =symbol->keyword= - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:1032:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:1019:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -424,7 +424,7 @@ TODO \hrule * =string->symbol= - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:1041:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:1028:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -433,7 +433,7 @@ TODO \hrule * =symbol->string= - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:1053:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:1040:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -442,7 +442,7 @@ TODO \hrule * =concat-strings= - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:1062:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:1049:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -1073,7 +1073,7 @@ be printed after the last argument (=end=). \hrule * =cons= - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:743:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:730:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -1082,7 +1082,7 @@ TODO \hrule * =car= - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:753:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:740:0= - type :: =:cfunction= - docu :: #+BEGIN: @@ -1091,7 +1091,7 @@ TODO \hrule * =cdr= - - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:764:0= + - defined in :: =d:\code\gitlab\slime\src\./built_ins.cpp:751:0= - type :: =:cfunction= - docu :: #+BEGIN: diff --git a/src/built_ins.cpp b/src/built_ins.cpp index 237e44c..800681e 100644 --- a/src/built_ins.cpp +++ b/src/built_ins.cpp @@ -851,17 +851,17 @@ proc load_built_ins_into_environment(Environment* env) -> void { printf("Postitional: {"); if (fun->value.function.positional_arguments->next_index != 0) { printf("%s", - Memory::get_c_str(fun->value.function.positional_arguments->identifiers[0])); + Memory::get_c_str(fun->value.function.positional_arguments->symbols[0]->value.symbol.identifier)); for (int i = 1; i < fun->value.function.positional_arguments->next_index; ++i) { printf(", %s", - Memory::get_c_str(fun->value.function.positional_arguments->identifiers[i])); + Memory::get_c_str(fun->value.function.positional_arguments->symbols[i]->value.symbol.identifier)); } } printf("}\n"); printf("Keyword: {"); if (fun->value.function.keyword_arguments->next_index != 0) { printf("%s", - Memory::get_c_str(fun->value.function.keyword_arguments->identifiers[0])); + Memory::get_c_str(fun->value.function.keyword_arguments->keywords[0]->value.symbol.identifier)); if (fun->value.function.keyword_arguments->values->data[0]) { printf(" ("); print(fun->value.function.keyword_arguments->values->data[0]); @@ -869,7 +869,7 @@ proc load_built_ins_into_environment(Environment* env) -> void { } for (int i = 1; i < fun->value.function.keyword_arguments->next_index; ++i) { printf(", %s", - Memory::get_c_str(fun->value.function.keyword_arguments->identifiers[i])); + Memory::get_c_str(fun->value.function.keyword_arguments->keywords[i]->value.symbol.identifier)); if (fun->value.function.keyword_arguments->values->data[i]) { printf(" ("); print(fun->value.function.keyword_arguments->values->data[i]); diff --git a/src/docgeneration.cpp b/src/docgeneration.cpp index 7d76a7b..5f53edc 100644 --- a/src/docgeneration.cpp +++ b/src/docgeneration.cpp @@ -93,23 +93,23 @@ proc generate_docs(Environment* env, String* path) -> void { if (!printed_at_least_some_args) fprintf(f, ":"); fprintf(f, "\n - postitional :: "); - fprintf(f, "=%s=", Memory::get_c_str(fun->value.function.positional_arguments->identifiers[0])); + fprintf(f, "=%s=", Memory::get_c_str(fun->value.function.positional_arguments->symbols[0]->value.symbol.identifier)); for (int i = 1; i < fun->value.function.positional_arguments->next_index; ++i) { - fprintf(f, ", =%s=", Memory::get_c_str(fun->value.function.positional_arguments->identifiers[i])); + fprintf(f, ", =%s=", Memory::get_c_str(fun->value.function.positional_arguments->symbols[i]->value.symbol.identifier)); } } if (fun->value.function.keyword_arguments->next_index != 0) { if (!printed_at_least_some_args) fprintf(f, ":"); fprintf(f, "\n - keyword :: "); - fprintf(f, "=%s=", Memory::get_c_str(fun->value.function.keyword_arguments->identifiers[0])); + fprintf(f, "=%s=", Memory::get_c_str(fun->value.function.keyword_arguments->keywords[0]->value.symbol.identifier)); if (fun->value.function.keyword_arguments->values->data[0]) { fprintf(f, " =("); print(fun->value.function.keyword_arguments->values->data[0], true, f); fprintf(f, ")="); } for (int i = 1; i < fun->value.function.keyword_arguments->next_index; ++i) { - fprintf(f, ", =%s=", Memory::get_c_str(fun->value.function.keyword_arguments->identifiers[i])); + fprintf(f, ", =%s=", Memory::get_c_str(fun->value.function.keyword_arguments->keywords[i]->value.symbol.identifier)); if (fun->value.function.keyword_arguments->values->data[i]) { fprintf(f, " =("); print(fun->value.function.keyword_arguments->values->data[i], true, f); diff --git a/src/eval.cpp b/src/eval.cpp index fa5c053..bbd793a 100644 --- a/src/eval.cpp +++ b/src/eval.cpp @@ -19,7 +19,7 @@ proc apply_arguments_to_function(Lisp_Object* arguments, Function* function) -> // NOTE(Felix): We have to copy all the arguments, otherwise // we change the program code. - try_void sym = Memory::get_or_create_lisp_object_symbol(function->positional_arguments->identifiers[i]); + try_void sym = function->positional_arguments->symbols[i]; define_symbol( sym, Memory::copy_lisp_object_except_pairs(arguments->value.pair.first), @@ -54,7 +54,7 @@ proc apply_arguments_to_function(Lisp_Object* arguments, Function* function) -> for (int i = 0; i < function->keyword_arguments->next_index; ++i) { if (string_equal( arguments->value.pair.first->value.symbol.identifier, - function->keyword_arguments->identifiers[i])) + function->keyword_arguments->keywords[i]->value.symbol.identifier)) { accepted = true; break; @@ -127,7 +127,7 @@ proc apply_arguments_to_function(Lisp_Object* arguments, Function* function) -> proc check_keyword_args = [&]() -> void { // check if all necessary keywords have been read in for (int i = 0; i < function->keyword_arguments->next_index; ++i) { - String* defined_keyword = function->keyword_arguments->identifiers[i]; + String* defined_keyword = function->keyword_arguments->keywords[i]->value.symbol.identifier; bool was_set = false; for (int j = 0; j < read_in_keywords->next_index; ++j) { if (string_equal( @@ -231,7 +231,7 @@ proc parse_argument_list(Lisp_Object* arguments, Function* function) -> void { // okay wow we found an actual symbol append_to_positional_argument_list( function->positional_arguments, - arguments->value.pair.first->value.symbol.identifier); + arguments->value.pair.first); arguments = arguments->value.pair.rest; } @@ -293,7 +293,7 @@ proc parse_argument_list(Lisp_Object* arguments, Function* function) -> void { Lisp_Object* ret; try_void ret = eval_expr(next->value.pair.first, function->parent_environment); append_to_keyword_argument_list(function->keyword_arguments, - arguments->value.pair.first->value.symbol.identifier, + arguments->value.pair.first, ret); arguments = next->value.pair.rest; } else { @@ -303,7 +303,7 @@ proc parse_argument_list(Lisp_Object* arguments, Function* function) -> void { } else { // No :defaults-to, so just add it to the list append_to_keyword_argument_list(function->keyword_arguments, - arguments->value.pair.first->value.symbol.identifier, + arguments->value.pair.first, nullptr); arguments = next; } diff --git a/src/lisp_object.cpp b/src/lisp_object.cpp index 139453b..9a724c5 100644 --- a/src/lisp_object.cpp +++ b/src/lisp_object.cpp @@ -26,23 +26,23 @@ proc Lisp_Object_Type_to_string(Lisp_Object_Type type) -> const char* { proc create_positional_argument_list(int initial_capacity) -> Positional_Arguments* { Positional_Arguments* ret = new(Positional_Arguments); - ret->identifiers = (String**)malloc(initial_capacity * sizeof(String*)); + ret->symbols = (Lisp_Object**)malloc(initial_capacity * sizeof(Lisp_Object*)); ret->next_index = 0; ret->length = initial_capacity; return ret; } -proc append_to_positional_argument_list(Positional_Arguments* args, String* identifier) -> void { +proc append_to_positional_argument_list(Positional_Arguments* args, Lisp_Object* sym) -> void { if (args->next_index == args->length) { args->length *= 2; - args->identifiers = (String**)realloc(args->identifiers, args->length * sizeof(String*)); + args->symbols = (Lisp_Object**)realloc(args->symbols, args->length * sizeof(Lisp_Object*)); } - args->identifiers[args->next_index++] = identifier; + args->symbols[args->next_index++] = sym; } proc create_keyword_argument_list(int initial_capacity) -> Keyword_Arguments* { Keyword_Arguments* ret = new(Keyword_Arguments); - ret->identifiers = (String**)malloc(initial_capacity * sizeof(String*)); + ret->keywords = (Lisp_Object**)malloc(initial_capacity * sizeof(Lisp_Object*)); ret->values = create_Lisp_Object_array_list(initial_capacity); ret->next_index = 0; ret->length = initial_capacity; @@ -50,14 +50,14 @@ proc create_keyword_argument_list(int initial_capacity) -> Keyword_Arguments* { } proc append_to_keyword_argument_list(Keyword_Arguments* args, - String* identifier, + Lisp_Object* keyword, Lisp_Object* default_value) -> void { if (args->next_index == args->length) { args->length *= 2; - args->identifiers = (String**)realloc(args->identifiers, args->length * sizeof(String*)); + args->keywords = (Lisp_Object**)realloc(args->keywords, args->length * sizeof(Lisp_Object*)); } - args->identifiers[args->next_index++] = identifier; + args->keywords[args->next_index++] = keyword; append_to_array_list(args->values, default_value); } diff --git a/src/structs.cpp b/src/structs.cpp index 297c606..1f859d7 100644 --- a/src/structs.cpp +++ b/src/structs.cpp @@ -65,25 +65,19 @@ struct Keyword { u64 hash; }; -// struct Number { -// double value; -// }; - struct Pair { Lisp_Object* first; Lisp_Object* rest; }; struct Positional_Arguments { - // TODO(Felix) use Lisp_Object_symbols here instead, so we don't have - // to convert them to strings and back to symbols - String** identifiers; // Array of Pointers to String + Lisp_Object** symbols; // Array of Pointers to Lisp_Object int next_index; int length; }; struct Keyword_Arguments { - String** identifiers; // Array of Pointers to String + Lisp_Object** keywords; // Array of Pointers to Lisp_Object // NOTE(Felix): values[i] will be nullptr if no defalut value was // declared for key identifiers[i] Lisp_Object_Array_List* values;