aboutsummaryrefslogtreecommitdiffstats
path: root/array.c
diff options
context:
space:
mode:
authorjohn haque <j.eh@mchsi.com>2011-10-07 05:13:25 -0500
committerjohn haque <j.eh@mchsi.com>2011-10-12 07:55:03 -0500
commit9d8d0cf6e83832f2d9902b23b8513402c648c59d (patch)
treeec788c44c58ed78c89142b7e64ac04462d622772 /array.c
parent4d44431ecc06af0cc82a45c3317a8895c01c004a (diff)
downloadegawk-9d8d0cf6e83832f2d9902b23b8513402c648c59d.tar.gz
egawk-9d8d0cf6e83832f2d9902b23b8513402c648c59d.tar.bz2
egawk-9d8d0cf6e83832f2d9902b23b8513402c648c59d.zip
Optimize tail-recursive calls.
Diffstat (limited to 'array.c')
-rw-r--r--array.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/array.c b/array.c
index 3ffc0dbb..a7508285 100644
--- a/array.c
+++ b/array.c
@@ -1285,6 +1285,7 @@ assoc_list(NODE *symbol, const char *sort_str, SORT_CTXT sort_ctxt)
qsort_compfunc cmp_func = 0;
INSTRUCTION *code = NULL;
extern int currule;
+ int save_rule;
num_elems = symbol->table_size;
assert(num_elems > 0);
@@ -1345,7 +1346,7 @@ assoc_list(NODE *symbol, const char *sort_str, SORT_CTXT sort_ctxt)
* to undefined (0). `exit' is handled in sort_user_func.
*/
- (code + 1)->inrule = currule; /* save current rule */
+ save_rule = currule; /* save current rule */
currule = 0;
PUSH_CODE(code);
@@ -1360,7 +1361,7 @@ assoc_list(NODE *symbol, const char *sort_str, SORT_CTXT sort_ctxt)
if (cmp_func == sort_user_func) {
code = POP_CODE();
- currule = (code + 1)->inrule; /* restore current rule */
+ currule = save_rule; /* restore current rule */
bcfree(code->nexti); /* Op_stop */
bcfree(code); /* Op_func_call */
}