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(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;
}

View File

@ -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