Felix Brendel před 6 roky
rodič
revize
688cc02a54
6 změnil soubory, kde provedl 19 přidání a 30 odebrání
  1. +1
    -1
      build.bat
  2. +3
    -16
      src/built_ins.cpp
  3. +11
    -9
      src/defines.cpp
  4. +3
    -1
      src/parse.cpp
  5. +1
    -2
      src/testing.cpp
  6. +0
    -1
      src/visualization.cpp

+ 1
- 1
build.bat Zobrazit soubor

@@ -10,7 +10,7 @@ taskkill /F /IM %exeName% > NUL 2> NUL


echo ---------- Compiling ---------- echo ---------- Compiling ----------
rem call ..\timecmd cl ../src/main.cpp /std:c++latest /Fe%exeName% /W3 /Zi /nologo /EHsc /link /NODEFAULTLIB:libucrt libucrtd.lib rem call ..\timecmd cl ../src/main.cpp /std:c++latest /Fe%exeName% /W3 /Zi /nologo /EHsc /link /NODEFAULTLIB:libucrt libucrtd.lib
call ..\timecmd clang++ ../src/main.cpp -o %exeName% -O3 -std=c++17
call ..\timecmd clang-cl ../src/main.cpp -o %exeName% /O2 /std:c++latest /W3 /Zi /EHsc


popd popd
if %errorlevel% == 0 ( if %errorlevel% == 0 (


+ 3
- 16
src/built_ins.cpp Zobrazit soubor

@@ -86,8 +86,8 @@ proc built_in_import(String* file_name, Environment* env) -> Lisp_Object* {
} }


proc load_built_ins_into_environment(Environment* env) -> void { proc load_built_ins_into_environment(Environment* env) -> void {
int arguments_length;
Lisp_Object* evaluated_arguments;
int arguments_length = 0;
Lisp_Object* evaluated_arguments = nullptr;
String* file_name_built_ins = Memory::create_string(__FILE__); String* file_name_built_ins = Memory::create_string(__FILE__);


#define cLambda [=](Lisp_Object* arguments, Environment* env) mutable -> Lisp_Object* #define cLambda [=](Lisp_Object* arguments, Environment* env) mutable -> Lisp_Object*
@@ -156,7 +156,6 @@ proc load_built_ins_into_environment(Environment* env) -> void {
"Takes 0 or more arguments and returns =t= if all arguments are equal " "Takes 0 or more arguments and returns =t= if all arguments are equal "
"and =()= otherwise.", "and =()= otherwise.",
__LINE__, cLambda { __LINE__, cLambda {
int arguments_length;
try arguments = eval_arguments(arguments, env, &arguments_length); try arguments = eval_arguments(arguments, env, &arguments_length);


if (arguments == Memory::nil) if (arguments == Memory::nil)
@@ -173,7 +172,6 @@ proc load_built_ins_into_environment(Environment* env) -> void {
return Memory::t; return Memory::t;
}); });
defun(">", "TODO", __LINE__, cLambda { defun(">", "TODO", __LINE__, cLambda {
int arguments_length;
try arguments = eval_arguments(arguments, env, &arguments_length); try arguments = eval_arguments(arguments, env, &arguments_length);


double last_number = strtod("Inf", NULL); double last_number = strtod("Inf", NULL);
@@ -191,7 +189,6 @@ proc load_built_ins_into_environment(Environment* env) -> void {
return Memory::t; return Memory::t;
}); });
defun(">=", "TODO", __LINE__, cLambda { defun(">=", "TODO", __LINE__, cLambda {
int arguments_length;
try arguments = eval_arguments(arguments, env, &arguments_length); try arguments = eval_arguments(arguments, env, &arguments_length);


double last_number = strtod("Inf", NULL); double last_number = strtod("Inf", NULL);
@@ -209,7 +206,6 @@ proc load_built_ins_into_environment(Environment* env) -> void {
return Memory::t; return Memory::t;
}); });
defun("<", "TODO", __LINE__, cLambda { defun("<", "TODO", __LINE__, cLambda {
int arguments_length;
try { try {
arguments = eval_arguments(arguments, env, &arguments_length); arguments = eval_arguments(arguments, env, &arguments_length);
} }
@@ -229,7 +225,6 @@ proc load_built_ins_into_environment(Environment* env) -> void {
return Memory::t; return Memory::t;
}); });
defun("<=", "TODO", __LINE__, cLambda { defun("<=", "TODO", __LINE__, cLambda {
int arguments_length;
try arguments = eval_arguments(arguments, env, &arguments_length); try arguments = eval_arguments(arguments, env, &arguments_length);


double last_number = strtod("-Inf", NULL); double last_number = strtod("-Inf", NULL);
@@ -247,7 +242,6 @@ proc load_built_ins_into_environment(Environment* env) -> void {
return Memory::t; return Memory::t;
}); });
defun("+", "TODO", __LINE__, cLambda { defun("+", "TODO", __LINE__, cLambda {
int arguments_length;
try arguments = eval_arguments(arguments, env, &arguments_length); try arguments = eval_arguments(arguments, env, &arguments_length);


double sum = 0; double sum = 0;
@@ -260,7 +254,6 @@ proc load_built_ins_into_environment(Environment* env) -> void {
return Memory::create_lisp_object_number(sum); return Memory::create_lisp_object_number(sum);
}); });
defun("-", "TODO", __LINE__, cLambda { defun("-", "TODO", __LINE__, cLambda {
int arguments_length;
try arguments = eval_arguments(arguments, env, &arguments_length); try arguments = eval_arguments(arguments, env, &arguments_length);


if (arguments_length == 0) if (arguments_length == 0)
@@ -283,7 +276,6 @@ proc load_built_ins_into_environment(Environment* env) -> void {
return Memory::create_lisp_object_number(difference); return Memory::create_lisp_object_number(difference);
}); });
defun("*", "TODO", __LINE__, cLambda { defun("*", "TODO", __LINE__, cLambda {
int arguments_length;
try arguments = eval_arguments(arguments, env, &arguments_length); try arguments = eval_arguments(arguments, env, &arguments_length);


if (arguments_length == 0) { if (arguments_length == 0) {
@@ -304,7 +296,6 @@ proc load_built_ins_into_environment(Environment* env) -> void {
return Memory::create_lisp_object_number(product); return Memory::create_lisp_object_number(product);
}); });
defun("/", "TODO", __LINE__, cLambda { defun("/", "TODO", __LINE__, cLambda {
int arguments_length;
try arguments = eval_arguments(arguments, env, &arguments_length); try arguments = eval_arguments(arguments, env, &arguments_length);


if (arguments_length == 0) { if (arguments_length == 0) {
@@ -325,7 +316,6 @@ proc load_built_ins_into_environment(Environment* env) -> void {
return Memory::create_lisp_object_number(quotient); return Memory::create_lisp_object_number(quotient);
}); });
defun("**", "TODO", __LINE__, cLambda { defun("**", "TODO", __LINE__, cLambda {
int arguments_length;
try arguments = eval_arguments(arguments, env, &arguments_length); try arguments = eval_arguments(arguments, env, &arguments_length);
try assert_arguments_length(2, arguments_length); try assert_arguments_length(2, arguments_length);
try assert_type(arguments->value.pair.first, Lisp_Object_Type::Number); try assert_type(arguments->value.pair.first, Lisp_Object_Type::Number);
@@ -341,7 +331,6 @@ proc load_built_ins_into_environment(Environment* env) -> void {
return Memory::create_lisp_object_number(pow(base, exponent)); return Memory::create_lisp_object_number(pow(base, exponent));
}); });
defun("%", "TODO", __LINE__, cLambda { defun("%", "TODO", __LINE__, cLambda {
int arguments_length;
try arguments = eval_arguments(arguments, env, &arguments_length); try arguments = eval_arguments(arguments, env, &arguments_length);
try assert_arguments_length(2, arguments_length); try assert_arguments_length(2, arguments_length);
try assert_type(arguments->value.pair.first, Lisp_Object_Type::Number); try assert_type(arguments->value.pair.first, Lisp_Object_Type::Number);
@@ -357,7 +346,6 @@ proc load_built_ins_into_environment(Environment* env) -> void {
return Memory::create_lisp_object_number((int)a % (int)b); return Memory::create_lisp_object_number((int)a % (int)b);
}); });
defun("assert", "TODO", __LINE__, cLambda { defun("assert", "TODO", __LINE__, cLambda {
int arguments_length;


try arguments = eval_arguments(arguments, env, &arguments_length); try arguments = eval_arguments(arguments, env, &arguments_length);
try assert(arguments_length == 1); try assert(arguments_length == 1);
@@ -573,7 +561,6 @@ proc load_built_ins_into_environment(Environment* env) -> void {
}; };


Lisp_Object* ret = arguments->value.pair.first; Lisp_Object* ret = arguments->value.pair.first;
Lisp_Object* head = ret;


ret = unquoteSomeExpressions(ret); ret = unquoteSomeExpressions(ret);
return ret; return ret;
@@ -946,7 +933,7 @@ proc load_built_ins_into_environment(Environment* env) -> void {


if (arguments_length == 1) { if (arguments_length == 1) {
Lisp_Object* prompt = evaluated_arguments->value.pair.first; Lisp_Object* prompt = evaluated_arguments->value.pair.first;
print(evaluated_arguments->value.pair.first);
print(prompt);
} }


// TODO(Felix): make read_line return a String* // TODO(Felix): make read_line return a String*


+ 11
- 9
src/defines.cpp Zobrazit soubor

@@ -284,15 +284,17 @@ struct {
} \ } \
} while(0) } while(0)


// #define assert(cond) \
// if_debug { \
// if (!cond) { \
// if (log_level == Log_Level::Debug) { \
// printf("Assertion failed: %s %d", __FILE__, __LINE__); \
// } \
// debug_break(); \
// } \
// } else {} \
/*
#define assert(cond) \
if_debug { \
if (!cond) { \
if (log_level == Log_Level::Debug) { \
printf("Assertion failed: %s %d", __FILE__, __LINE__); \
} \
debug_break(); \
} \
} else {} \
*/




#define console_normal "\x1B[0m" #define console_normal "\x1B[0m"


+ 3
- 1
src/parse.cpp Zobrazit soubor

@@ -539,7 +539,9 @@ namespace Parser {
return result; return result;
} }
else { else {
int pos = index_in_text;
// TODO(Felix): What is going on, why do we not have to
// increase the index_in_text

int end_pos = index_in_text; int end_pos = index_in_text;
while (text[end_pos] != '\n') while (text[end_pos] != '\n')
++end_pos; ++end_pos;


+ 1
- 2
src/testing.cpp Zobrazit soubor

@@ -582,8 +582,7 @@ proc test_file(const char* file) -> testresult {


Parser::environment_for_macros = user_env; Parser::environment_for_macros = user_env;



Lisp_Object* result = built_in_load(Memory::create_string(file), user_env);
built_in_load(Memory::create_string(file), user_env);
assert_no_error(); assert_no_error();


return pass; return pass;


+ 0
- 1
src/visualization.cpp Zobrazit soubor

@@ -387,7 +387,6 @@ proc visualize_lisp_machine() -> void {


// create the lists-list by filtering the pairs-list. // create the lists-list by filtering the pairs-list.
Lisp_Object_Array_List* pairs_to_filter = create_Lisp_Object_array_list(); Lisp_Object_Array_List* pairs_to_filter = create_Lisp_Object_array_list();
Int_Array_List* indices_to_filter = create_Int_array_list();


// helper lambda: // helper lambda:
proc remove_doubles_from_lisp_object_array_list = [&](Lisp_Object_Array_List* list) -> void { proc remove_doubles_from_lisp_object_array_list = [&](Lisp_Object_Array_List* list) -> void {


Načítá se…
Zrušit
Uložit