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();
|
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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user