diff options
author | john haque <j.eh@mchsi.com> | 2011-10-07 05:13:25 -0500 |
---|---|---|
committer | john haque <j.eh@mchsi.com> | 2011-10-12 07:55:03 -0500 |
commit | 9d8d0cf6e83832f2d9902b23b8513402c648c59d (patch) | |
tree | ec788c44c58ed78c89142b7e64ac04462d622772 /array.c | |
parent | 4d44431ecc06af0cc82a45c3317a8895c01c004a (diff) | |
download | egawk-9d8d0cf6e83832f2d9902b23b8513402c648c59d.tar.gz egawk-9d8d0cf6e83832f2d9902b23b8513402c648c59d.tar.bz2 egawk-9d8d0cf6e83832f2d9902b23b8513402c648c59d.zip |
Optimize tail-recursive calls.
Diffstat (limited to 'array.c')
-rw-r--r-- | array.c | 5 |
1 files changed, 3 insertions, 2 deletions
@@ -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 */ } |