From 91ad5b825ba33d5dbb792d24073dbe77dbc62773 Mon Sep 17 00:00:00 2001 From: Adam Joseph Date: Thu, 13 Oct 2022 16:57:04 -0700 Subject: refactor(tvix/eval): remove OpResolveWithOrUpvalue 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 Change-Id: I4a90b9eb6cb3396df92a6a943d42ecc301871ba0 Reviewed-on: https://cl.tvl.fyi/c/depot/+/7009 Tested-by: BuildkiteCI Reviewed-by: tazjin --- tvix/eval/src/opcode.rs | 1 - tvix/eval/src/vm.rs | 19 ------------------- 2 files changed, 20 deletions(-) (limited to 'tvix/eval') diff --git a/tvix/eval/src/opcode.rs b/tvix/eval/src/opcode.rs index c44494d57a..fdc916ca7f 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 4e92c152a8..50dabf1ee8 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)); } -- cgit 1.4.1