|
|
|
@@ -86,8 +86,8 @@ proc built_in_import(String* file_name, Environment* env) -> Lisp_Object* { |
|
|
|
} |
|
|
|
|
|
|
|
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__); |
|
|
|
|
|
|
|
#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 " |
|
|
|
"and =()= otherwise.", |
|
|
|
__LINE__, cLambda { |
|
|
|
int arguments_length; |
|
|
|
try arguments = eval_arguments(arguments, env, &arguments_length); |
|
|
|
|
|
|
|
if (arguments == Memory::nil) |
|
|
|
@@ -173,7 +172,6 @@ proc load_built_ins_into_environment(Environment* env) -> void { |
|
|
|
return Memory::t; |
|
|
|
}); |
|
|
|
defun(">", "TODO", __LINE__, cLambda { |
|
|
|
int arguments_length; |
|
|
|
try arguments = eval_arguments(arguments, env, &arguments_length); |
|
|
|
|
|
|
|
double last_number = strtod("Inf", NULL); |
|
|
|
@@ -191,7 +189,6 @@ proc load_built_ins_into_environment(Environment* env) -> void { |
|
|
|
return Memory::t; |
|
|
|
}); |
|
|
|
defun(">=", "TODO", __LINE__, cLambda { |
|
|
|
int arguments_length; |
|
|
|
try arguments = eval_arguments(arguments, env, &arguments_length); |
|
|
|
|
|
|
|
double last_number = strtod("Inf", NULL); |
|
|
|
@@ -209,7 +206,6 @@ proc load_built_ins_into_environment(Environment* env) -> void { |
|
|
|
return Memory::t; |
|
|
|
}); |
|
|
|
defun("<", "TODO", __LINE__, cLambda { |
|
|
|
int arguments_length; |
|
|
|
try { |
|
|
|
arguments = eval_arguments(arguments, env, &arguments_length); |
|
|
|
} |
|
|
|
@@ -229,7 +225,6 @@ proc load_built_ins_into_environment(Environment* env) -> void { |
|
|
|
return Memory::t; |
|
|
|
}); |
|
|
|
defun("<=", "TODO", __LINE__, cLambda { |
|
|
|
int arguments_length; |
|
|
|
try arguments = eval_arguments(arguments, env, &arguments_length); |
|
|
|
|
|
|
|
double last_number = strtod("-Inf", NULL); |
|
|
|
@@ -247,7 +242,6 @@ proc load_built_ins_into_environment(Environment* env) -> void { |
|
|
|
return Memory::t; |
|
|
|
}); |
|
|
|
defun("+", "TODO", __LINE__, cLambda { |
|
|
|
int arguments_length; |
|
|
|
try arguments = eval_arguments(arguments, env, &arguments_length); |
|
|
|
|
|
|
|
double sum = 0; |
|
|
|
@@ -260,7 +254,6 @@ proc load_built_ins_into_environment(Environment* env) -> void { |
|
|
|
return Memory::create_lisp_object_number(sum); |
|
|
|
}); |
|
|
|
defun("-", "TODO", __LINE__, cLambda { |
|
|
|
int arguments_length; |
|
|
|
try arguments = eval_arguments(arguments, env, &arguments_length); |
|
|
|
|
|
|
|
if (arguments_length == 0) |
|
|
|
@@ -283,7 +276,6 @@ proc load_built_ins_into_environment(Environment* env) -> void { |
|
|
|
return Memory::create_lisp_object_number(difference); |
|
|
|
}); |
|
|
|
defun("*", "TODO", __LINE__, cLambda { |
|
|
|
int arguments_length; |
|
|
|
try arguments = eval_arguments(arguments, env, &arguments_length); |
|
|
|
|
|
|
|
if (arguments_length == 0) { |
|
|
|
@@ -304,7 +296,6 @@ proc load_built_ins_into_environment(Environment* env) -> void { |
|
|
|
return Memory::create_lisp_object_number(product); |
|
|
|
}); |
|
|
|
defun("/", "TODO", __LINE__, cLambda { |
|
|
|
int arguments_length; |
|
|
|
try arguments = eval_arguments(arguments, env, &arguments_length); |
|
|
|
|
|
|
|
if (arguments_length == 0) { |
|
|
|
@@ -325,7 +316,6 @@ proc load_built_ins_into_environment(Environment* env) -> void { |
|
|
|
return Memory::create_lisp_object_number(quotient); |
|
|
|
}); |
|
|
|
defun("**", "TODO", __LINE__, cLambda { |
|
|
|
int arguments_length; |
|
|
|
try arguments = eval_arguments(arguments, env, &arguments_length); |
|
|
|
try assert_arguments_length(2, arguments_length); |
|
|
|
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)); |
|
|
|
}); |
|
|
|
defun("%", "TODO", __LINE__, cLambda { |
|
|
|
int arguments_length; |
|
|
|
try arguments = eval_arguments(arguments, env, &arguments_length); |
|
|
|
try assert_arguments_length(2, arguments_length); |
|
|
|
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); |
|
|
|
}); |
|
|
|
defun("assert", "TODO", __LINE__, cLambda { |
|
|
|
int arguments_length; |
|
|
|
|
|
|
|
try arguments = eval_arguments(arguments, env, &arguments_length); |
|
|
|
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* head = ret; |
|
|
|
|
|
|
|
ret = unquoteSomeExpressions(ret); |
|
|
|
return ret; |
|
|
|
@@ -946,7 +933,7 @@ proc load_built_ins_into_environment(Environment* env) -> void { |
|
|
|
|
|
|
|
if (arguments_length == 1) { |
|
|
|
Lisp_Object* prompt = evaluated_arguments->value.pair.first; |
|
|
|
print(evaluated_arguments->value.pair.first); |
|
|
|
print(prompt); |
|
|
|
} |
|
|
|
|
|
|
|
// TODO(Felix): make read_line return a String* |
|
|
|
|