aboutsummaryrefslogtreecommitdiffhomepage
path: root/expressions.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'expressions.cpp')
-rw-r--r--expressions.cpp41
1 files changed, 23 insertions, 18 deletions
diff --git a/expressions.cpp b/expressions.cpp
index 8c8fb0c..38af2fc 100644
--- a/expressions.cpp
+++ b/expressions.cpp
@@ -23,8 +23,8 @@ Expressions::set_radix(gint r)
gint64
Expressions::push(gint64 number)
{
- while (numbers.items() > 0 && numbers.peek() == G_MAXINT64)
- pop_num();
+ while (operators.items() && operators.peek() == OP_NEW)
+ pop_op();
push(OP_NUMBER);
@@ -35,7 +35,7 @@ Expressions::push(gint64 number)
gint64
Expressions::pop_num(int index)
{
- gint64 n = G_MAXINT64;
+ gint64 n = 0;
pop_op();
if (numbers.items() > 0) {
@@ -49,30 +49,17 @@ Expressions::pop_num(int index)
gint64
Expressions::pop_num_calc(int index, gint64 imply)
{
- gint64 n = G_MAXINT64;
-
eval();
- if (args() > 0)
- n = pop_num(index);
- if (n == G_MAXINT64)
- n = imply;
-
if (num_sign < 0)
set_num_sign(1);
- return n;
+ return args() > 0 ? pop_num(index) : imply;
}
gint64
Expressions::add_digit(gchar digit)
{
- gint64 n = 0;
-
- if (args() > 0) {
- n = pop_num();
- if (n == G_MAXINT64)
- n = 0;
- }
+ gint64 n = args() > 0 ? pop_num() : 0;
return push(n*radix + num_sign*(digit - '0'));
}
@@ -177,6 +164,24 @@ Expressions::args(void)
return n;
}
+int
+Expressions::first_op(void)
+{
+ int items = operators.items();
+
+ for (int i = 1; i <= items; i++) {
+ switch (operators.peek(i)) {
+ case OP_NUMBER:
+ case OP_NEW:
+ break;
+ default:
+ return i;
+ }
+ }
+
+ return 0;
+}
+
void
Expressions::discard_args(void)
{