Handle logical AND and OR operators when evaluating an expression.
git-svn-id: http://yate.null.ro/svn/yate/trunk@4249 acf43c95-373e-0410-b603-e72c3f656dc1
This commit is contained in:
parent
a034dffc22
commit
abbc07b035
|
@ -596,6 +596,33 @@ bool ExpEvaluator::runOperation(ObjList& stack, const ExpOperation& oper)
|
||||||
stack.append(new ExpOperation(val));
|
stack.append(new ExpOperation(val));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case OpcLAnd:
|
||||||
|
case OpcLOr:
|
||||||
|
{
|
||||||
|
ExpOperation* op2 = popOne(stack);
|
||||||
|
ExpOperation* op1 = popOne(stack);
|
||||||
|
if (!op1 || !op2) {
|
||||||
|
TelEngine::destruct(op1);
|
||||||
|
TelEngine::destruct(op2);
|
||||||
|
return gotError("ExpEvaluator stack underflow");
|
||||||
|
}
|
||||||
|
bool val = false;
|
||||||
|
switch (oper.opcode()) {
|
||||||
|
case OpcLAnd:
|
||||||
|
val = op1->number() && op2->number();
|
||||||
|
break;
|
||||||
|
case OpcLOr:
|
||||||
|
val = op1->number() || op2->number();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
TelEngine::destruct(op1);
|
||||||
|
TelEngine::destruct(op2);
|
||||||
|
DDebug(DebugAll,"Bool result: '%s'",String::boolText(val));
|
||||||
|
stack.append(new ExpOperation(val ? 1 : 0));
|
||||||
|
}
|
||||||
|
break;
|
||||||
case OpcCat:
|
case OpcCat:
|
||||||
{
|
{
|
||||||
ExpOperation* op2 = popOne(stack);
|
ExpOperation* op2 = popOne(stack);
|
||||||
|
|
Loading…
Reference in New Issue