about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAdam Joseph <adam@westernsemico.com>2022-10-13T23·57-0700
committerAdam Joseph <adam@westernsemico.com>2022-10-14T09·18+0000
commit91ad5b825ba33d5dbb792d24073dbe77dbc62773 (patch)
tree0d7422f824bcc8bcd1b7e846e1b746fe8e6d65c1
parentcbbe283b6fda93e86478c16ea295e13374eccd58 (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.rs1
-rw-r--r--tvix/eval/src/vm.rs19
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));
             }