From beb0d081bb158678084c727cfdaef257f9c7b710 Mon Sep 17 00:00:00 2001 From: Nicolas Williams Date: Mon, 23 Jun 2014 19:59:00 -0500 Subject: [PATCH] Improve TCO Instead of checking for self-recursion check that the thing we're calling is a function and not a closure, therefore the new frame will have the same env as the current frame. --- execute.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/execute.c b/execute.c index 241b5dad..a1284f98 100644 --- a/execute.c +++ b/execute.c @@ -657,7 +657,7 @@ jv jq_next(jq_state *jq) { uint16_t* retaddr; struct frame* new_frame; struct closure cl = make_closure(jq, pc); - if (nclosures == 0 && *(pc + 2) == RET && frame_current(jq)->bc == cl.bc) { + if (nclosures == 0 && *(pc + 2) == RET && *pc == 1) { // TCO retaddr = frame_current(jq)->retaddr; stack_ptr retdata = frame_current(jq)->retdata;