diff options
author | Vincent Ambo <mail@tazj.in> | 2022-09-06T14·12+0300 |
---|---|---|
committer | tazjin <tazjin@tvl.su> | 2022-09-11T12·04+0000 |
commit | 12acb1e2374ac0f5480cfbb262f2171d6df2918b (patch) | |
tree | d8386d3eeff92e2bfb7ff93d19806dfcf7b8f8bb /tvix/eval | |
parent | 9da99af86045b59867e6082ca99d602308553006 (diff) |
refactor(tvix/eval): add `initialised` arg to declare_phantom r/4795
There are more upcomming uses of declare_phantom where this will come in handy to avoid some code bloat. Change-Id: I75cad8caf14511c519ab2f56e87e99bcbf0a082e Reviewed-on: https://cl.tvl.fyi/c/depot/+/6467 Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org>
Diffstat (limited to 'tvix/eval')
-rw-r--r-- | tvix/eval/src/compiler/mod.rs | 11 | ||||
-rw-r--r-- | tvix/eval/src/compiler/scope.rs | 6 |
2 files changed, 8 insertions, 9 deletions
diff --git a/tvix/eval/src/compiler/mod.rs b/tvix/eval/src/compiler/mod.rs index 89b90f967268..e119c866bc49 100644 --- a/tvix/eval/src/compiler/mod.rs +++ b/tvix/eval/src/compiler/mod.rs @@ -870,8 +870,7 @@ impl Compiler<'_, '_> { // directly accessible. As it must be accounted for to // calculate correct offsets, what we call a "phantom" local // is declared here. - let local_idx = self.scope_mut().declare_phantom(span); - self.scope_mut().mark_initialised(local_idx); + let local_idx = self.scope_mut().declare_phantom(span, true); let with_idx = self.scope().stack_index(local_idx); self.scope_mut().push_with(); @@ -918,7 +917,7 @@ impl Compiler<'_, '_> { let span = self.span_for(&pattern); let set_idx = match pattern.pat_bind() { Some(name) => self.declare_local(&name, name.ident().unwrap().to_string()), - None => self.scope_mut().declare_phantom(span), + None => self.scope_mut().declare_phantom(span, true), }; // At call time, the attribute set is already at the top of @@ -983,7 +982,7 @@ impl Compiler<'_, '_> { fn compile_lambda(&mut self, outer_slot: LocalIdx, node: ast::Lambda) { self.new_context(); let span = self.span_for(&node); - let slot = self.scope_mut().declare_phantom(span); + let slot = self.scope_mut().declare_phantom(span, false); self.begin_scope(); // Compile the function itself @@ -1057,7 +1056,7 @@ impl Compiler<'_, '_> { { self.new_context(); let span = self.span_for(node); - let slot = self.scope_mut().declare_phantom(span); + let slot = self.scope_mut().declare_phantom(span, false); self.begin_scope(); content(self, node, slot); self.cleanup_scope(node); @@ -1487,7 +1486,7 @@ pub fn compile( }; let root_span = c.span_for(&expr); - let root_slot = c.scope_mut().declare_phantom(root_span); + let root_slot = c.scope_mut().declare_phantom(root_span, false); c.compile(root_slot, expr.clone()); // The final operation of any top-level Nix program must always be diff --git a/tvix/eval/src/compiler/scope.rs b/tvix/eval/src/compiler/scope.rs index 7c1e65265e1d..ca8512d409c8 100644 --- a/tvix/eval/src/compiler/scope.rs +++ b/tvix/eval/src/compiler/scope.rs @@ -234,13 +234,13 @@ impl Scope { /// Declare a local variable that occupies a stack slot and should /// be accounted for, but is not directly accessible by users /// (e.g. attribute sets used for `with`). - pub fn declare_phantom(&mut self, span: codemap::Span) -> LocalIdx { + pub fn declare_phantom(&mut self, span: codemap::Span, initialised: bool) -> LocalIdx { let idx = self.locals.len(); self.locals.push(Local { - name: LocalName::Phantom, + initialised, span, + name: LocalName::Phantom, depth: self.scope_depth, - initialised: false, needs_finaliser: false, used: true, }); |