about summary refs log tree commit diff
path: root/tvix/eval/src
diff options
context:
space:
mode:
authorVincent Ambo <mail@tazj.in>2023-02-26T15·48+0300
committertazjin <tazjin@tvl.su>2023-03-07T22·04+0000
commit9cebae9b56b8953514011dfe80364d63f27c2b33 (patch)
treef0e6fdae5def6f958d43258c27269981b5bfed01 /tvix/eval/src
parente5ff12e04cdb2c048149fc3bb9549afc007609e8 (diff)
refactor(tvix/eval): merge OpCall & OpTailCall r/5898
As applies are thunked, there was no situation where OpCall could be
emitted. In practice, all calls were already tail calls.

Change-Id: Id0d441dcdd86f804d7cddd0cc14f589bbfc75e5b
Reviewed-on: https://cl.tvl.fyi/c/depot/+/8147
Tested-by: BuildkiteCI
Reviewed-by: raitobezarius <tvl@lahfa.xyz>
Diffstat (limited to 'tvix/eval/src')
-rw-r--r--tvix/eval/src/compiler/mod.rs18
-rw-r--r--tvix/eval/src/opcode.rs1
-rw-r--r--tvix/eval/src/vm.rs5
3 files changed, 0 insertions, 24 deletions
diff --git a/tvix/eval/src/compiler/mod.rs b/tvix/eval/src/compiler/mod.rs
index 6dd0b669f957..a59f935b0494 100644
--- a/tvix/eval/src/compiler/mod.rs
+++ b/tvix/eval/src/compiler/mod.rs
@@ -1019,11 +1019,6 @@ impl Compiler<'_> {
         // lambda as a constant.
         let mut compiled = self.contexts.pop().unwrap();
 
-        // Check if tail-call optimisation is possible and perform it.
-        if self.dead_scope == 0 {
-            optimise_tail_call(&mut compiled.lambda.chunk);
-        }
-
         // Capturing the with stack counts as an upvalue, as it is
         // emitted as an upvalue data instruction.
         if compiled.captures_with_stack {
@@ -1288,19 +1283,6 @@ fn expr_static_attr_str(node: &ast::Attr) -> Option<SmolStr> {
     }
 }
 
-/// Perform tail-call optimisation if the last call within a
-/// compiled chunk is another call.
-fn optimise_tail_call(chunk: &mut Chunk) {
-    let last_op = chunk
-        .code
-        .last_mut()
-        .expect("compiler bug: chunk should never be empty");
-
-    if matches!(last_op, OpCode::OpCall) {
-        *last_op = OpCode::OpTailCall;
-    }
-}
-
 /// Create a delayed source-only builtin compilation, for a builtin
 /// which is written in Nix code.
 ///
diff --git a/tvix/eval/src/opcode.rs b/tvix/eval/src/opcode.rs
index a49bee425dea..445b994b04d8 100644
--- a/tvix/eval/src/opcode.rs
+++ b/tvix/eval/src/opcode.rs
@@ -141,7 +141,6 @@ pub enum OpCode {
 
     // Lambdas & closures
     OpCall,
-    OpTailCall,
     OpGetUpvalue(UpvalueIdx),
     /// A Closure which has upvalues but no self-references
     OpClosure(ConstantIdx),
diff --git a/tvix/eval/src/vm.rs b/tvix/eval/src/vm.rs
index cd6fc211b4ad..10966aca811b 100644
--- a/tvix/eval/src/vm.rs
+++ b/tvix/eval/src/vm.rs
@@ -956,11 +956,6 @@ impl<'o> VM<'o> {
 
             OpCode::OpCall => {
                 let callable = self.pop();
-                self.call_value(&callable)?;
-            }
-
-            OpCode::OpTailCall => {
-                let callable = self.pop();
                 self.tail_call_value(callable)?;
             }