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:
marian 2011-03-31 12:17:34 +00:00
parent a034dffc22
commit abbc07b035
1 changed files with 27 additions and 0 deletions

View File

@ -596,6 +596,33 @@ bool ExpEvaluator::runOperation(ObjList& stack, const ExpOperation& oper)
stack.append(new ExpOperation(val));
}
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:
{
ExpOperation* op2 = popOne(stack);