From 70c2a931bae746554629ee7170b50146c83b6130 Mon Sep 17 00:00:00 2001 From: alex Date: Mon, 26 Aug 1996 08:21:10 +0000 Subject: [PATCH] Funzioni if _perc scorp ecc. git-svn-id: svn://10.65.10.50/trunk@3440 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- include/expr.cpp | 40 +++++++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/include/expr.cpp b/include/expr.cpp index 9b3470067..c1a7d56cf 100755 --- a/include/expr.cpp +++ b/include/expr.cpp @@ -208,8 +208,7 @@ TExpression::operator bool() { if (user_func_dirty() || _dirty) eval(); _dirty = FALSE; - const real& r = _val.number(); - return !r.is_zero(); + return !_val.number().is_zero(); } @@ -288,7 +287,7 @@ void TExpression::eval() s1 = instr.string(); evalstack.push(s1); break; - case _plus: + case _plus: if (type == _strexpr) { s2 = (TString&) evalstack.pop(); @@ -552,17 +551,17 @@ void TExpression::eval() break; case _perc: { - o1 = (real&) evalstack.pop(); o2 = (real&) evalstack.pop(); - evalstack.push(real(o1 * o2 / 100.0)); + o1 = (real&) evalstack.pop(); + const real val = real(o1 * o2 / 100.0); + evalstack.push(val); } break; case _scorp: { const real percent = (real&)evalstack.pop(); real val = (real&)evalstack.pop(); - const real calc = val * percent / (percent + 100.0); - val -= calc; + val -= val * percent / (percent + 100.0); evalstack.push(val); } break; @@ -856,15 +855,21 @@ TCodesym TExpression::__factor(TCodesym startsym) if (sym == _lpar) { sym = __gettoken(); - int nparms = 0; - while ((sym = __expression(sym)) != _rpar && sym == _comma) - nparms++; + int nparms = sym == _rpar ? 0 : 1; + if (sym != _rpar) + { + while ((sym = __expression(sym)) == _comma) + { + sym = __gettoken(TRUE); + nparms++; + } + } if (sym == _rpar) { _code.add(_number, real(nparms)); _code.add(startsym, val); _user_func_defined = TRUE; - sym = __gettoken(); + sym = __gettoken(TRUE); } } } @@ -914,7 +919,7 @@ TCodesym TExpression::__factor(TCodesym startsym) if (sym == _comma) sym = __gettoken(TRUE); else break; sym = __expression(sym); - if (sym == _rpar) sym = __gettoken(); + if (sym == _rpar) sym = __gettoken(TRUE); else break; _code.add(startsym); break; @@ -931,7 +936,7 @@ TCodesym TExpression::__factor(TCodesym startsym) if (sym == _comma) sym = __gettoken(TRUE); else break; sym = __expression(sym); - if (sym == _rpar) sym = __gettoken(); + if (sym == _rpar) sym = __gettoken(TRUE); else break; _code.add(startsym); break; @@ -946,7 +951,7 @@ TCodesym TExpression::__factor(TCodesym startsym) if (sym == _comma) sym = __gettoken(TRUE); else break; sym = __expression(sym); - if (sym == _rpar) sym = __gettoken(); + if (sym == _rpar) sym = __gettoken(TRUE); else break; _code.add(startsym); break; @@ -1058,7 +1063,12 @@ bool TExpression::compile(const char* expression, TTypeexp type) } } else - if (currsym == _string) sc << " \"" << _tok << "\""; + if (currsym == _string) + { + const char sep (strchr(_tok, '\"') != NULL ? '\'' : '\"'); + + sc << sep << _tok << sep; + } else sc << " " << _tok; } _s = sc;