diff options
Diffstat (limited to 'src/expressions.cpp')
| -rw-r--r-- | src/expressions.cpp | 60 | 
1 files changed, 24 insertions, 36 deletions
| diff --git a/src/expressions.cpp b/src/expressions.cpp index fc1e5e2..8d21388 100644 --- a/src/expressions.cpp +++ b/src/expressions.cpp @@ -22,7 +22,6 @@  #include <glib.h>  #include "sciteco.h" -#include "undo.h"  #include "error.h"  #include "expressions.h" @@ -30,20 +29,6 @@ namespace SciTECO {  Expressions expressions; -void -Expressions::set_num_sign(gint sign) -{ -	undo.push_var<gint>(num_sign); -	num_sign = sign; -} - -void -Expressions::set_radix(gint r) -{ -	undo.push_var<gint>(radix); -	radix = r; -} -  tecoInt  Expressions::push(tecoInt number)  { @@ -62,14 +47,14 @@ Expressions::push(tecoInt number)  }  tecoInt -Expressions::pop_num(int index) +Expressions::pop_num(guint index)  {  	tecoInt n = 0;  	Operator op = pop_op();  	g_assert(op == OP_NUMBER); -	if (numbers.items() > 0) { +	if (numbers.items()) {  		n = numbers.pop(index);  		numbers.undo_push(n, index);  	} @@ -78,7 +63,7 @@ Expressions::pop_num(int index)  }  tecoInt -Expressions::pop_num_calc(int index, tecoInt imply) +Expressions::pop_num_calc(guint index, tecoInt imply)  {  	eval();  	if (num_sign < 0) @@ -105,21 +90,21 @@ Expressions::push(Expressions::Operator op)  Expressions::Operator  Expressions::push_calc(Expressions::Operator op)  { -	int first = first_op(); +	gint first = first_op();  	/* calculate if op has lower precedence than op on stack */ -	if (first && operators.peek(first) <= op) +	if (first >= 0 && operators.peek(first) <= op)  		calc();  	return push(op);  }  Expressions::Operator -Expressions::pop_op(int index) +Expressions::pop_op(guint index)  {  	Operator op = OP_NIL; -	if (operators.items() > 0) { +	if (operators.items()) {  		op = operators.pop(index);  		operators.undo_push(op, index);  	} @@ -191,6 +176,9 @@ Expressions::eval(bool pop_brace)  		gint n = first_op();  		Operator op; +		if (n < 0) +			break; +  		op = operators.peek(n);  		if (op == OP_LOOP)  			break; @@ -199,43 +187,43 @@ Expressions::eval(bool pop_brace)  				pop_op(n);  			break;  		} -		if (n < 2) +		if (n < 1)  			break;  		calc();  	}  } -int +guint  Expressions::args(void)  { -	int n = 0; -	int items = operators.items(); +	guint n = 0; +	guint items = operators.items(); -	while (n < items && operators.peek(n+1) == OP_NUMBER) +	while (n < items && operators.peek(n) == OP_NUMBER)  		n++;  	return n;  } -int +gint  Expressions::find_op(Operator op)  { -	int items = operators.items(); +	guint items = operators.items(); -	for (int i = 1; i <= items; i++) +	for (guint i = 0; i < items; i++)  		if (operators.peek(i) == op)  			return i; -	return 0; +	return -1; /* not found */  } -int +gint  Expressions::first_op(void)  { -	int items = operators.items(); +	guint items = operators.items(); -	for (int i = 1; i <= items; i++) { +	for (guint i = 0; i < items; i++) {  		switch (operators.peek(i)) {  		case OP_NUMBER:  		case OP_NEW: @@ -245,14 +233,14 @@ Expressions::first_op(void)  		}  	} -	return 0; +	return -1; /* no operator */  }  void  Expressions::discard_args(void)  {  	eval(); -	for (int i = args(); i; i--) +	for (guint i = args(); i; i--)  		pop_num_calc();  } | 
