/*
* Copyright 2013 Guidewire Software, Inc.
*/
package gw.internal.gosu.parser.statements;
import gw.internal.gosu.parser.Expression;
import gw.internal.gosu.parser.CannotExecuteGosuException;
import gw.lang.parser.statements.IThrowStatement;
import gw.lang.parser.statements.ITerminalStatement;
import gw.lang.parser.statements.TerminalType;
/**
* Represents a throw-statement as specified in the Gosu grammar:
* <pre>
* <i>throw-statement</i>
* <b>throw</b> <expression>
* </pre>
* <p/>
*
* @see gw.lang.parser.IGosuParser
*/
public final class ThrowStatement extends TerminalStatement implements IThrowStatement
{
private Expression _expression;
public Expression getExpression()
{
return _expression;
}
public void setExpression( Expression expression )
{
_expression = expression;
}
public Object execute()
{
if( !isCompileTimeConstant() )
{
return super.execute();
}
throw new CannotExecuteGosuException();
}
@Override
public TerminalType getTerminalType() {
return TerminalType.ReturnOrThrow;
}
@Override
protected ITerminalStatement getLeastSignificantTerminalStatement_internal( boolean[] bAbsolute )
{
bAbsolute[0] = true;
return this;
}
@Override
public String toString()
{
return "throw " + getExpression().toString();
}
}