59 lines
1.6 KiB
Diff
59 lines
1.6 KiB
Diff
From 47316d294571673a8dbf1e9e435893e2660f46a8 Mon Sep 17 00:00:00 2001
|
|
From: "Arnold D. Robbins" <arnold@skeeve.com>
|
|
Date: Mon, 26 Mar 2018 10:45:01 +0300
|
|
Subject: [PATCH] Remove the tail recursion optimization(refix).
|
|
|
|
---
|
|
awkgram.c | 27 ++-------------------------
|
|
1 file changed, 2 insertions(+), 25 deletions(-)
|
|
|
|
diff --git a/awkgram.c b/awkgram.c
|
|
index 52821eab..d3c4e830 100644
|
|
--- a/awkgram.c
|
|
+++ b/awkgram.c
|
|
@@ -2820,20 +2820,9 @@ regular_loop:
|
|
(yyval) = list_create((yyvsp[-3]));
|
|
(void) list_prepend((yyval), instruction(Op_push_i));
|
|
(yyval)->nexti->memory = dupnode(Nnull_string);
|
|
- } else {
|
|
- if (do_optimize
|
|
- && (yyvsp[-1])->lasti->opcode == Op_func_call
|
|
- && strcmp((yyvsp[-1])->lasti->func_name, in_function) == 0
|
|
- ) {
|
|
- /* Do tail recursion optimization. Tail
|
|
- * call without a return value is recognized
|
|
- * in mk_function().
|
|
- */
|
|
- ((yyvsp[-1])->lasti + 1)->tail_call = true;
|
|
- }
|
|
-
|
|
+ } else
|
|
(yyval) = list_append((yyvsp[-1]), (yyvsp[-3]));
|
|
- }
|
|
+
|
|
(yyval) = add_pending_comment((yyval));
|
|
}
|
|
#line 2840 "awkgram.c" /* yacc.c:1646 */
|
|
@@ -7156,18 +7145,6 @@ mk_function(INSTRUCTION *fi, INSTRUCTION *def)
|
|
thisfunc = fi->func_body;
|
|
assert(thisfunc != NULL);
|
|
|
|
- if (do_optimize && def->lasti->opcode == Op_pop) {
|
|
- /* tail call which does not return any value. */
|
|
-
|
|
- INSTRUCTION *t;
|
|
-
|
|
- for (t = def->nexti; t->nexti != def->lasti; t = t->nexti)
|
|
- ;
|
|
- if (t->opcode == Op_func_call
|
|
- && strcmp(t->func_name, thisfunc->vname) == 0)
|
|
- (t + 1)->tail_call = true;
|
|
- }
|
|
-
|
|
/* add any pre-function comment to start of action for profile.c */
|
|
|
|
if (function_comment != NULL) {
|
|
--
|
|
2.19.1
|
|
|