gawk/refix-remove-the-tail-recursion-optimization.patch
2019-12-25 15:46:00 +08:00

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