aboutsummaryrefslogtreecommitdiff
path: root/src/env.cff
diff options
context:
space:
mode:
authorlemon <lsof@mailbox.org>2022-08-16 05:28:18 +0200
committerlemon <lsof@mailbox.org>2022-08-16 05:28:18 +0200
commit73f68a9c5ed4c8139cc1c4f7695da29e5a3fb4c8 (patch)
treeb2cebcf1f6b6073eeeb0595710d6fdf05fcb06fb /src/env.cff
parentb3159bfd93c8bdce71f7437abdc521b5ccb72367 (diff)
stuff
Diffstat (limited to 'src/env.cff')
-rw-r--r--src/env.cff11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/env.cff b/src/env.cff
index 60b485b..001e92c 100644
--- a/src/env.cff
+++ b/src/env.cff
@@ -20,6 +20,10 @@ extern fn mkenv(parent *Env, alloc *Allocator) *Env {
return env;
}
+extern fn envparent(env *Env) *Env {
+ return env.parent;
+}
+
extern fn envput(env *Env, decl Decl, old **const Decl) *Decl {
let l **DeclList = env.decls->get_slot(decl.name);
let n *DeclList = anew(env.alloc, DeclList);
@@ -35,7 +39,12 @@ extern fn envput(env *Env, decl Decl, old **const Decl) *Decl {
extern fn envfind(env *Env, name *const u8) *Decl {
let l **DeclList = env.decls->get(name);
- if l == #null { return #null; }
+ if l == #null {
+ if env.parent == #null {
+ return #null;
+ }
+ return envfind(env.parent, name);
+ }
let l = *l;
assert(l != #null, "l?");
return &l.decl;