diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2013-05-30 21:05:38 +0300 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2013-05-30 21:05:38 +0300 |
commit | 0737d543cbf09f9142cc67db052d6d40f178560b (patch) | |
tree | 5d219cdab58625a0997018c3b28d36f31737a064 | |
parent | 407dddb6e9b24c2ca139ec84f8e3f541fbb18451 (diff) | |
download | egawk-0737d543cbf09f9142cc67db052d6d40f178560b.tar.gz egawk-0737d543cbf09f9142cc67db052d6d40f178560b.tar.bz2 egawk-0737d543cbf09f9142cc67db052d6d40f178560b.zip |
More fixes in profiler.
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | profile.c | 20 |
2 files changed, 16 insertions, 12 deletions
@@ -1,3 +1,11 @@ +2013-05-30 Arnold D. Robbins <arnold@skeeve.com> + + * profile.c (pprint): For Op_in_array, parenthesize subscript if + the precedence is lower. E.g.: (c = tolower(foo)) in ARRAY. + (prec_level): Merge cases for precedence of 5. + (parenthesize): Simplify, as in 3.1.8. Avoids stuff like + `(x == 1 && (z ==2 && (q == 4 && w == 7)))'. + 2013-05-29 Arnold D. Robbins <arnold@skeeve.com> * profile.c (pp_group3): Renamed from pp_concat. Change all calls. @@ -470,6 +470,9 @@ cleanup: efree(sub); } else { t2 = pp_pop(); + if (prec_level(t2->type) < prec_level(Op_in_array)) { + pp_parenthesize(t2); + } sub = t2->pp_str; str = pp_group3(sub, op2str(Op_in_array), array); pp_free(t2); @@ -1041,8 +1044,6 @@ prec_level(int type) return 6; case Op_less: - return 5; - case Op_in_array: return 5; @@ -1168,7 +1169,7 @@ pp_parenthesize(NODE *sp) sp->flags |= CAN_FREE; } -/* parenthesize --- parenthesize two nodes */ +/* parenthesize --- parenthesize two nodes relative to parent node type */ static void parenthesize(int type, NODE *left, NODE *right) @@ -1177,15 +1178,10 @@ parenthesize(int type, NODE *left, NODE *right) int lprec = prec_level(left->type); int prec = prec_level(type); - if (prec > lprec) { - if (is_binary(left->type)) /* (a - b) * c */ - pp_parenthesize(left); - if (prec >= rprec && is_binary(right->type)) /* (a - b) * (c - d) */ - pp_parenthesize(right); - } else { - if (prec >= rprec && is_binary(right->type)) /* a - b - (c - d) */ - pp_parenthesize(right); - } + if (lprec < prec) + pp_parenthesize(left); + if (rprec < prec) + pp_parenthesize(right); } /* pp_string --- pretty format a string or regex constant */ |