aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/expressions.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/src/expressions.c b/src/expressions.c
index 8f9b2cd..63d3b2f 100644
--- a/src/expressions.c
+++ b/src/expressions.c
@@ -140,13 +140,17 @@ teco_expressions_push_op(teco_operator_t op)
gboolean
teco_expressions_push_calc(teco_operator_t op, GError **error)
{
- gint first = teco_expressions_first_op();
+ for (;;) {
+ gint first = teco_expressions_first_op();
- /* calculate if op has lower precedence than op on stack */
- if (first >= 0 &&
- teco_expressions_precedence(op) <= teco_expressions_precedence(teco_expressions_peek_op(first)) &&
- !teco_expressions_eval(FALSE, error))
- return FALSE;
+ /* calculate if op has lower precedence than op on stack */
+ if (first < 0 ||
+ teco_expressions_precedence(op) > teco_expressions_precedence(teco_expressions_peek_op(first)))
+ break;
+
+ if (!teco_expressions_calc(error))
+ return FALSE;
+ }
teco_expressions_push_op(op);
return TRUE;