Parametro per ignore_error (evita la segnalazione di errori come Zero divide)

git-svn-id: svn://10.65.10.50/trunk@4525 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
augusto 1997-06-04 14:40:57 +00:00
parent c5419e2e34
commit 8b4afb6062
2 changed files with 20 additions and 6 deletions

View File

@ -186,10 +186,12 @@ TString& TEval_stack::peek_string()
// TExpression // TExpression
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
TExpression::TExpression(const char* expression, TTypeexp type) TExpression::TExpression(const char* expression, TTypeexp type, bool ignore_err)
: _original(expression) : _original(expression)
{ {
_ignore_error=ignore_err;
_error=0;
_val = real(0.0); _val = real(0.0);
_dirty = TRUE; _dirty = TRUE;
_type = type; _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("") : _original("")
{ {
_ignore_error=ignore_err;
_error=0;
_val = real(0.0); _val = real(0.0);
_dirty = FALSE; _dirty = FALSE;
_type = type; _type = type;
@ -211,7 +215,8 @@ TExpression::TExpression(const TExpression & expr)
: _code(expr._code), _var(expr._var), : _code(expr._code), _var(expr._var),
_val(expr._val), _dirty(expr._dirty), _val(expr._val), _dirty(expr._dirty),
_type(expr._type), _original(expr._original), _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 (r.is_zero())
{ {
if (!evalstack.peek_real().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 } else
evalstack.peek_real() /= r; evalstack.peek_real() /= r;
} }

View File

@ -394,6 +394,10 @@ class TExpression : public TObject
TVararray _var; TVararray _var;
// @cmember:(INTERNAL) Valore dell'espressione // @cmember:(INTERNAL) Valore dell'espressione
TValue _val; 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 // @cmember:(INTERNAL) TRUE se l'espressione e' stata modificata
bool _dirty; bool _dirty;
// @cmember:(INTERNAL) TRUE se l'espressione ha almeno una funzione utente // @cmember:(INTERNAL) TRUE se l'espressione ha almeno una funzione utente
@ -475,11 +479,13 @@ public:
const char* last_token() const; const char* last_token() const;
// @cmember Ritorna l'espressione originale // @cmember Ritorna l'espressione originale
const char * string() const { return _original; } const char * string() const { return _original; }
// @cmember Ritorna eventuali errori
int error() {return _error;}
// @cmember Costruttore (assegna l'estressione e il suo tipo) // @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) // @cmember Costruttore (assegna il tipo dell'istruzione)
TExpression(TTypeexp type = _numexpr); TExpression(TTypeexp type = _numexpr, bool ignore_err=FALSE);
// @cmember Costruttore di copia // @cmember Costruttore di copia
TExpression(const TExpression & expr); TExpression(const TExpression & expr);
// @cmember Distruttore // @cmember Distruttore