/*
* Copyright 2013 Guidewire Software, Inc.
*/
package gw.internal.gosu.parser.expressions;
import gw.internal.gosu.parser.CannotExecuteGosuException;
import gw.internal.gosu.parser.Expression;
import gw.internal.gosu.parser.MetaType;
import gw.lang.parser.expressions.ITypeOfExpression;
import gw.lang.reflect.IType;
/**
* Represents a TypeOf expression as defined in the Gosu grammar.
*
* @see gw.lang.parser.IGosuParser
*/
public final class TypeOfExpression extends Expression implements ITypeOfExpression
{
private Expression _expression;
public TypeOfExpression()
{
super();
}
@Override
public IType getTypeImpl()
{
// Note the static type of typeof must always be the raw/defaut metatype, Type<DefaultType>,
// because it is the least upper bound of all meta types.
return MetaType.DEFAULT_TYPE_TYPE.get();
}
public Expression getExpression()
{
return _expression;
}
public void setExpression( Expression e )
{
_expression = e;
setType( MetaType.get( e.getType() ) );
}
public Object evaluate()
{
if( !isCompileTimeConstant() )
{
return super.evaluate();
}
throw new CannotExecuteGosuException();
}
@Override
public String toString()
{
return "typeof " + getExpression().toString();
}
}