/*
* Copyright 2013 Guidewire Software, Inc.
*/
package gw.internal.gosu.parser.expressions;
import gw.lang.parser.expressions.IBitwiseAndExpression;
import gw.lang.reflect.IType;
import gw.lang.reflect.java.JavaTypes;
/**
* Represents a bitwise OR expression in the Gosu grammar:
* <pre>
* <i>bitwise-and-expression</i>
* <equality-expression>
* <bitwise-and-expression> <b>&</b> <equality-expression>
* </pre>
* <p/>
*
* @see gw.lang.parser.IGosuParser
*/
public final class BitwiseAndExpression extends ArithmeticExpression implements IBitwiseAndExpression
{
@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 "&";
}
}