diff options
author | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2017-03-23 23:42:41 +0100 |
---|---|---|
committer | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2017-03-23 23:42:41 +0100 |
commit | 2491d5f30573d9e5e72b3c7d2eac8788bbe69dd4 (patch) | |
tree | c1ebb59953fc2f75075d92e2f650d71c11d20e4d | |
parent | d4eaa94908b8db15beeb543f2eb5945fbd0ed224 (diff) | |
download | sciteco-2491d5f30573d9e5e72b3c7d2eac8788bbe69dd4.tar.gz |
fixed checks for missing left and right operands to binary operators
* this resulted in assertions (crashes!) for harmless typos like "+23="
* a test case has been added
-rw-r--r-- | src/expressions.cpp | 4 | ||||
-rw-r--r-- | tests/testsuite.at | 4 |
2 files changed, 6 insertions, 2 deletions
diff --git a/src/expressions.cpp b/src/expressions.cpp index 6c28080..7ccdd31 100644 --- a/src/expressions.cpp +++ b/src/expressions.cpp @@ -124,11 +124,11 @@ Expressions::calc(void) Operator op; tecoInt vleft; - if (operators.peek() != OP_NUMBER) + if (!operators.items() || operators.peek() != OP_NUMBER) throw Error("Missing right operand"); vright = pop_num(); op = pop_op(); - if (operators.peek() != OP_NUMBER) + if (!operators.items() || operators.peek() != OP_NUMBER) throw Error("Missing left operand"); vleft = pop_num(); diff --git a/tests/testsuite.at b/tests/testsuite.at index a9a1322..3288900 100644 --- a/tests/testsuite.at +++ b/tests/testsuite.at @@ -7,6 +7,10 @@ AT_COLOR_TESTS # idiom "(0/0)" to enforce a "Division by zero" error # whenever we want to fail. +AT_SETUP([Missing left operand]) +AT_CHECK([$SCITECO -e '+23='], 1, ignore, ignore) +AT_CLEANUP + AT_SETUP([Closing loops at the correct macro level]) AT_CHECK([$SCITECO -e '@^Ua{>} <Ma'], 1, ignore, ignore) AT_CLEANUP |