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();
_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;