/*
* Copyright 2013 Guidewire Software, Inc.
*/
package gw.internal.gosu.parser.expressions;
import gw.lang.parser.expressions.IBitwiseOrExpression;
import gw.lang.reflect.IType;
import gw.lang.reflect.java.JavaTypes;
/**
* Represents a bitwise OR expression in the Gosu grammar:
* <pre>
* <i>bitwise-or-expression</i>
* <bitwise-xor-expression>
* <bitwise-or-expression> <b>|</b> <bitwise-xor-expression>
* </pre>
* <p/>
*
* @see gw.lang.parser.IGosuParser
*/
public final class BitwiseOrExpression extends ArithmeticExpression implements IBitwiseOrExpression
{
@Override
public String toString()
{
return getLHS().toString() + " | " + getRHS().toString();
}
public Object evaluate()
{
if( !isCompileTimeConstant() )
{
return super.evaluate();
}
IType type = getType();
Object lhsValue;
Object rhsValue;
lhsValue = getLHS().evaluate();
rhsValue = getRHS().evaluate();
if( type == JavaTypes.pINT() )
{
return (Integer)lhsValue | (Integer)rhsValue;
}
if (type == JavaTypes.pLONG() )
{
return (Long)lhsValue | (Long)rhsValue;
}
throw new UnsupportedNumberTypeException( type );
}
public String getOperator()
{
return "|";
}
}