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));
|
||||
}
|
||||
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);
|
||||
|
|
Loading…
Reference in New Issue