diff options
| author | 2022-08-16 05:28:18 +0200 | |
|---|---|---|
| committer | 2022-08-16 05:28:18 +0200 | |
| commit | 73f68a9c5ed4c8139cc1c4f7695da29e5a3fb4c8 (patch) | |
| tree | b2cebcf1f6b6073eeeb0595710d6fdf05fcb06fb /src/env.cff | |
| parent | b3159bfd93c8bdce71f7437abdc521b5ccb72367 (diff) | |
stuff
Diffstat (limited to 'src/env.cff')
| -rw-r--r-- | src/env.cff | 11 |
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; |