fix(tvix/eval): only pop initialised locals when closing scopes
This avoids emitting OpPop instructions for locals that only existed virtually (as uninitialised phantoms). Change-Id: I8105afcca80c3f7b7ef93ce5e2f0d08a93f4ad27 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6425 Reviewed-by: sterni <sternenseemann@systemli.org> Tested-by: BuildkiteCI
This commit is contained in:
parent
ecbd7c6ca1
commit
4e24bd56b4
1 changed files with 10 additions and 5 deletions
|
@ -1061,12 +1061,17 @@ impl Compiler<'_> {
|
|||
while !self.scope().locals.is_empty()
|
||||
&& self.scope().locals[self.scope().locals.len() - 1].above(self.scope().scope_depth)
|
||||
{
|
||||
pops += 1;
|
||||
|
||||
// While removing the local, analyse whether it has been
|
||||
// accessed while it existed and emit a warning to the
|
||||
// user otherwise.
|
||||
if let Some(local) = self.scope_mut().locals.pop() {
|
||||
// pop the local from the stack if it was actually
|
||||
// initialised
|
||||
if local.initialised {
|
||||
pops += 1;
|
||||
}
|
||||
|
||||
// analyse whether the local was accessed during its
|
||||
// lifetime, and emit a warning otherwise (unless the
|
||||
// user explicitly chose to ignore it by prefixing the
|
||||
// identifier with `_`)
|
||||
if !local.used && !local.is_ignored() {
|
||||
self.emit_warning(local.span, WarningKind::UnusedBinding);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue