package jeql.syntax.operation;
import jeql.api.error.ImplementationException;
import jeql.engine.Scope;
import jeql.syntax.ParseTreeNode;
public class BooleanOperation
extends Operation
{
public BooleanOperation(ParseTreeNode e1, ParseTreeNode e2, String opStr, int opCode) {
super(e1, e2, opStr, opCode);
}
public Class getType(Scope scope)
{
return Boolean.class;
}
public Object compute(Object o1, Object o2)
{
Object v1 = coerce(o1, Boolean.class);
Object v2 = coerce(o2, Boolean.class);
boolean b1 = v1 == null ? false : ((Boolean) v1).booleanValue();
boolean b2 = v2 == null ? false : ((Boolean) v2).booleanValue();
switch (opCode) {
case Operation.AND: return new Boolean(b1 && b2);
case Operation.OR: return new Boolean(b1 || b2);
case Operation.XOR: return new Boolean(b1 != b2);
}
throw new ImplementationException("Unknown op code for boolean operation");
}
}