Funzioni if _perc scorp ecc.

git-svn-id: svn://10.65.10.50/trunk@3440 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 1996-08-26 08:21:10 +00:00
parent b474a69474
commit 70c2a931ba

View File

@ -208,8 +208,7 @@ TExpression::operator bool()
{ {
if (user_func_dirty() || _dirty) eval(); if (user_func_dirty() || _dirty) eval();
_dirty = FALSE; _dirty = FALSE;
const real& r = _val.number(); return !_val.number().is_zero();
return !r.is_zero();
} }
@ -288,7 +287,7 @@ void TExpression::eval()
s1 = instr.string(); s1 = instr.string();
evalstack.push(s1); evalstack.push(s1);
break; break;
case _plus: case _plus:
if (type == _strexpr) if (type == _strexpr)
{ {
s2 = (TString&) evalstack.pop(); s2 = (TString&) evalstack.pop();
@ -552,17 +551,17 @@ void TExpression::eval()
break; break;
case _perc: case _perc:
{ {
o1 = (real&) evalstack.pop();
o2 = (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; break;
case _scorp: case _scorp:
{ {
const real percent = (real&)evalstack.pop(); const real percent = (real&)evalstack.pop();
real val = (real&)evalstack.pop(); real val = (real&)evalstack.pop();
const real calc = val * percent / (percent + 100.0); val -= val * percent / (percent + 100.0);
val -= calc;
evalstack.push(val); evalstack.push(val);
} }
break; break;
@ -856,15 +855,21 @@ TCodesym TExpression::__factor(TCodesym startsym)
if (sym == _lpar) if (sym == _lpar)
{ {
sym = __gettoken(); sym = __gettoken();
int nparms = 0; int nparms = sym == _rpar ? 0 : 1;
while ((sym = __expression(sym)) != _rpar && sym == _comma) if (sym != _rpar)
nparms++; {
while ((sym = __expression(sym)) == _comma)
{
sym = __gettoken(TRUE);
nparms++;
}
}
if (sym == _rpar) if (sym == _rpar)
{ {
_code.add(_number, real(nparms)); _code.add(_number, real(nparms));
_code.add(startsym, val); _code.add(startsym, val);
_user_func_defined = TRUE; _user_func_defined = TRUE;
sym = __gettoken(); sym = __gettoken(TRUE);
} }
} }
} }
@ -914,7 +919,7 @@ TCodesym TExpression::__factor(TCodesym startsym)
if (sym == _comma) sym = __gettoken(TRUE); if (sym == _comma) sym = __gettoken(TRUE);
else break; else break;
sym = __expression(sym); sym = __expression(sym);
if (sym == _rpar) sym = __gettoken(); if (sym == _rpar) sym = __gettoken(TRUE);
else break; else break;
_code.add(startsym); _code.add(startsym);
break; break;
@ -931,7 +936,7 @@ TCodesym TExpression::__factor(TCodesym startsym)
if (sym == _comma) sym = __gettoken(TRUE); if (sym == _comma) sym = __gettoken(TRUE);
else break; else break;
sym = __expression(sym); sym = __expression(sym);
if (sym == _rpar) sym = __gettoken(); if (sym == _rpar) sym = __gettoken(TRUE);
else break; else break;
_code.add(startsym); _code.add(startsym);
break; break;
@ -946,7 +951,7 @@ TCodesym TExpression::__factor(TCodesym startsym)
if (sym == _comma) sym = __gettoken(TRUE); if (sym == _comma) sym = __gettoken(TRUE);
else break; else break;
sym = __expression(sym); sym = __expression(sym);
if (sym == _rpar) sym = __gettoken(); if (sym == _rpar) sym = __gettoken(TRUE);
else break; else break;
_code.add(startsym); _code.add(startsym);
break; break;
@ -1058,7 +1063,12 @@ bool TExpression::compile(const char* expression, TTypeexp type)
} }
} }
else else
if (currsym == _string) sc << " \"" << _tok << "\""; if (currsym == _string)
{
const char sep (strchr(_tok, '\"') != NULL ? '\'' : '\"');
sc << sep << _tok << sep;
}
else sc << " " << _tok; else sc << " " << _tok;
} }
_s = sc; _s = sc;