about summary refs log tree commit diff
path: root/tvix/eval/src/compiler
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/compiler
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/compiler')
-rw-r--r--tvix/eval/src/compiler/mod.rs18
1 files changed, 0 insertions, 18 deletions
diff --git a/tvix/eval/src/compiler/mod.rs b/tvix/eval/src/compiler/mod.rs
index 6dd0b669f9..a59f935b04 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.
 ///