|
|
|
@@ -14,11 +14,11 @@ proc environment_binds_symbol(Lisp_Object* sym, Environment* env) -> bool { |
|
|
|
proc find_binding_environment(Lisp_Object* sym, Environment* env) -> Environment* { |
|
|
|
if (environment_binds_symbol(sym, env)) |
|
|
|
return env; |
|
|
|
for (int i = 0; i < env->parents.next_index; ++i) { |
|
|
|
if (environment_binds_symbol(sym, env->parents.data[i])) |
|
|
|
return env->parents.data[i]; |
|
|
|
for_array_list (env->parents) { |
|
|
|
if (Environment* ret = find_binding_environment(sym, it)) |
|
|
|
return it; |
|
|
|
} |
|
|
|
return get_root_environment(); |
|
|
|
return nullptr; |
|
|
|
} |
|
|
|
|
|
|
|
proc try_lookup_symbol(Lisp_Object* node, Environment* env) -> Lisp_Object* { |
|
|
|
@@ -34,7 +34,7 @@ proc try_lookup_symbol(Lisp_Object* node, Environment* env) -> Lisp_Object* { |
|
|
|
if (result) |
|
|
|
return result; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
auto nil_sym = Memory::get_or_create_lisp_object_symbol("nil"); |
|
|
|
auto t_sym = Memory::get_or_create_lisp_object_symbol("t"); |
|
|
|
|
|
|
|
|