diff options
author | Vincent Ambo <mail@tazj.in> | 2023-02-26T15·48+0300 |
---|---|---|
committer | tazjin <tazjin@tvl.su> | 2023-03-07T22·04+0000 |
commit | 9cebae9b56b8953514011dfe80364d63f27c2b33 (patch) | |
tree | f0e6fdae5def6f958d43258c27269981b5bfed01 | |
parent | e5ff12e04cdb2c048149fc3bb9549afc007609e8 (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>
-rw-r--r-- | tvix/eval/src/compiler/mod.rs | 18 | ||||
-rw-r--r-- | tvix/eval/src/opcode.rs | 1 | ||||
-rw-r--r-- | tvix/eval/src/vm.rs | 5 |
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)?; } |