xo-expression: + LocalEnv::lookup_local_binding()

This commit is contained in:
Roland Conybeare 2024-07-03 16:37:06 -04:00
commit 8cf89f5eef
2 changed files with 23 additions and 5 deletions

View file

@ -8,7 +8,7 @@
namespace xo {
namespace ast {
binding_path
LocalEnv::lookup_binding(const std::string & vname) const
LocalEnv::lookup_local_binding(const std::string & vname) const
{
int j_slot = 0;
for (const auto & arg : argv_) {
@ -17,12 +17,25 @@ namespace xo {
++j_slot;
}
auto tmp = parent_env_->lookup_binding(vname);
return { -2 /*i_link: sentinel*/, 0 };
} /*lookup_local_binding*/
if (tmp.i_link_ == -1)
return tmp;
binding_path
LocalEnv::lookup_binding(const std::string & vname) const
{
{
auto local = this->lookup_local_binding(vname);
if (local.i_link_ == 0)
return local;
}
auto free = parent_env_->lookup_binding(vname);
if (free.i_link_ == -1)
return free;
else
return { tmp.i_link_ + 1, tmp.j_slot_ };
return { free.i_link_ + 1, free.j_slot_ };
} /*lookup_binding*/
} /*namespace ast*/
} /*namespace xo*/