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:
parent
b474a69474
commit
70c2a931ba
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user