diff --git a/include/expr.cpp b/include/expr.cpp index 6ef82f91d..f3536ac4e 100755 --- a/include/expr.cpp +++ b/include/expr.cpp @@ -186,10 +186,12 @@ TString& TEval_stack::peek_string() // TExpression /////////////////////////////////////////////////////////// -TExpression::TExpression(const char* expression, TTypeexp type) +TExpression::TExpression(const char* expression, TTypeexp type, bool ignore_err) : _original(expression) { + _ignore_error=ignore_err; + _error=0; _val = real(0.0); _dirty = TRUE; _type = type; @@ -198,9 +200,11 @@ TExpression::TExpression(const char* expression, TTypeexp type) } -TExpression::TExpression(TTypeexp type) +TExpression::TExpression(TTypeexp type, bool ignore_err) : _original("") { + _ignore_error=ignore_err; + _error=0; _val = real(0.0); _dirty = FALSE; _type = type; @@ -211,7 +215,8 @@ TExpression::TExpression(const TExpression & expr) : _code(expr._code), _var(expr._var), _val(expr._val), _dirty(expr._dirty), _type(expr._type), _original(expr._original), - _user_func_defined(expr._user_func_defined) + _user_func_defined(expr._user_func_defined), + _ignore_error(expr._ignore_error),_error(expr._error) { } @@ -379,7 +384,10 @@ void TExpression::eval() if (r.is_zero()) { if (!evalstack.peek_real().is_zero()) - print_error("Divisione per zero!"); + if (_ignore_error) + _error=1; + else + print_error("Divisione per zero!"); } else evalstack.peek_real() /= r; } diff --git a/include/expr.h b/include/expr.h index b579bc842..87fdbf58e 100755 --- a/include/expr.h +++ b/include/expr.h @@ -394,6 +394,10 @@ class TExpression : public TObject TVararray _var; // @cmember:(INTERNAL) Valore dell'espressione TValue _val; + // @cmember:(INTERNAL) Indica se segnalare o no errori di valutazione + bool _ignore_error; + // @cmember:(INTERNAL) Diverso da 0 se la valutazione dell'espressione ha dato errori (ZERO DIV) + int _error; // @cmember:(INTERNAL) TRUE se l'espressione e' stata modificata bool _dirty; // @cmember:(INTERNAL) TRUE se l'espressione ha almeno una funzione utente @@ -475,11 +479,13 @@ public: const char* last_token() const; // @cmember Ritorna l'espressione originale const char * string() const { return _original; } + // @cmember Ritorna eventuali errori + int error() {return _error;} // @cmember Costruttore (assegna l'estressione e il suo tipo) - TExpression(const char* expression, TTypeexp type = _numexpr); + TExpression(const char* expression, TTypeexp type = _numexpr, bool ignore_err=FALSE); // @cmember Costruttore (assegna il tipo dell'istruzione) - TExpression(TTypeexp type = _numexpr); + TExpression(TTypeexp type = _numexpr, bool ignore_err=FALSE); // @cmember Costruttore di copia TExpression(const TExpression & expr); // @cmember Distruttore