diff options
author | Adam Joseph <adam@westernsemico.com> | 2022-10-13T23·57-0700 |
---|---|---|
committer | Adam Joseph <adam@westernsemico.com> | 2022-10-14T09·18+0000 |
commit | 91ad5b825ba33d5dbb792d24073dbe77dbc62773 (patch) | |
tree | 0d7422f824bcc8bcd1b7e846e1b746fe8e6d65c1 | |
parent | cbbe283b6fda93e86478c16ea295e13374eccd58 (diff) |
refactor(tvix/eval): remove OpResolveWithOrUpvalue r/5128
The case branch in vm.rs for OpResolveWithOrUpvalue is unreachable/deadcode. I believe this opcode is unnecessary, since it should always be statically detectable (at parse-time) whether a reference is to an upvalue (i.e. enclosing binding); otherwise, and only then, is with-resolution applicable. Perhaps I've misunderstood how with-resolution works. If so, please explain it to me and -1/-2 this CL. Signed-off-by: Adam Joseph <adam@westernsemico.com> Change-Id: I4a90b9eb6cb3396df92a6a943d42ecc301871ba0 Reviewed-on: https://cl.tvl.fyi/c/depot/+/7009 Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
-rw-r--r-- | tvix/eval/src/opcode.rs | 1 | ||||
-rw-r--r-- | tvix/eval/src/vm.rs | 19 |
2 files changed, 0 insertions, 20 deletions
diff --git a/tvix/eval/src/opcode.rs b/tvix/eval/src/opcode.rs index c44494d57aa9..fdc916ca7f79 100644 --- a/tvix/eval/src/opcode.rs +++ b/tvix/eval/src/opcode.rs @@ -100,7 +100,6 @@ pub enum OpCode { OpPushWith(StackIdx), OpPopWith, OpResolveWith, - OpResolveWithOrUpvalue(UpvalueIdx), // Lists OpList(Count), diff --git a/tvix/eval/src/vm.rs b/tvix/eval/src/vm.rs index 4e92c152a8d5..50dabf1ee8d5 100644 --- a/tvix/eval/src/vm.rs +++ b/tvix/eval/src/vm.rs @@ -597,25 +597,6 @@ impl<'o> VM<'o> { self.push(value) } - OpCode::OpResolveWithOrUpvalue(idx) => { - let ident = fallible!(self, self.pop().to_str()); - match self.resolve_with(ident.as_str()) { - // Variable found in local `with`-stack. - Ok(value) => self.push(value), - - // Variable not found => check upvalues. - Err(Error { - kind: ErrorKind::UnknownDynamicVariable(_), - .. - }) => { - let value = self.frame().upvalue(idx).clone(); - self.push(value); - } - - Err(err) => return Err(err), - } - } - OpCode::OpAssertFail => { return Err(self.error(ErrorKind::AssertionFailed)); } |