default args are eveled at current environment now
This commit is contained in:
+9
-3
@@ -173,9 +173,9 @@ proc load_built_ins_into_environment() -> void {
|
||||
auto label(sym,__LINE__) = label(params,__LINE__)->value.pair.first; \
|
||||
auto label(sfun,__LINE__) = Memory::create_lisp_object_cfunction(special); \
|
||||
/*NOTE(Felix): for evaluating default args*/ \
|
||||
push_environment(get_root_environment()); \
|
||||
/*push_environment(get_root_environment());*/ \
|
||||
create_arguments_from_lambda_list_and_inject(label(params,__LINE__)->value.pair.rest, label(sfun,__LINE__)); \
|
||||
pop_environment(); \
|
||||
/*pop_environment(); */ \
|
||||
label(sfun,__LINE__)->sourceCodeLocation = new(Source_Code_Location); \
|
||||
label(sfun,__LINE__)->sourceCodeLocation->file = file_name_built_ins; \
|
||||
label(sfun,__LINE__)->sourceCodeLocation->line = __LINE__; \
|
||||
@@ -190,7 +190,13 @@ proc load_built_ins_into_environment() -> void {
|
||||
Globals::Current_Execution::envi_stack.next_index, \
|
||||
Globals::Current_Execution::envi_stack.next_index-1)
|
||||
|
||||
|
||||
define((helper), "") {
|
||||
return Memory::create_lisp_object_number(101);
|
||||
};
|
||||
define((test (:k (helper))), "") {
|
||||
fetch(k);
|
||||
return k;
|
||||
};
|
||||
define((= . args),
|
||||
"Takes 0 or more arguments and returns =t= if all arguments are equal "
|
||||
"and =()= otherwise.")
|
||||
|
||||
Reference in New Issue
Block a user