/*
* Copyright 2013 Guidewire Software, Inc.
*/
package gw.internal.gosu.parser.statements;
import gw.internal.gosu.parser.Expression;
import gw.internal.gosu.parser.Statement;
import gw.internal.gosu.parser.expressions.MemberAccess;
import gw.lang.parser.statements.IMemberAssignmentStatement;
import gw.lang.parser.statements.ITerminalStatement;
/**
* Represents a member-assignment statement as specified in the Gosu grammar:
* <pre>
* <i>member-assignment-statement</i>
* <member-access> <b>=</b> <expression>
* </pre>
* <p/>
*
* @see gw.lang.parser.IGosuParser
*/
public final class MemberAssignmentStatement extends Statement implements IMemberAssignmentStatement
{
private Expression _rootExpression;
private String _strMemberName;
private Expression _memberExpression;
private Expression _expression;
private MemberAccess _ma;
/**
* Constructs a MemberAssignmentStatement given an ISymbolTable instance.
*/
public MemberAssignmentStatement()
{
}
public Expression getRootExpression()
{
return _rootExpression;
}
public void setRootExpression( Expression rootExpression )
{
_rootExpression = rootExpression;
}
/**
* @return The name of the property assigned to (the lhs property)
*/
public String getMemberName()
{
return _strMemberName;
}
public void setMemberName( String strMemberName )
{
_strMemberName = strMemberName;
}
/**
* @return The expression to evaluate and assign to the member
*/
public Expression getExpression()
{
return _expression;
}
public void setExpression( Expression expression )
{
_expression = expression;
}
public Expression getMemberExpression()
{
return _memberExpression;
}
public void setMemberExpression( Expression memberExpression )
{
_memberExpression = memberExpression;
}
public Object execute()
{
if( !isCompileTimeConstant() )
{
return super.execute();
}
throw new IllegalStateException( "Can't execute this parsed element directly" );
}
@Override
protected ITerminalStatement getLeastSignificantTerminalStatement_internal( boolean[] bAbsolute )
{
bAbsolute[0] = false;
return null;
}
@Override
public String toString()
{
String strOut = getRootExpression().toString();
if( _memberExpression != null )
{
strOut += "[" + _memberExpression.toString() + "]";
}
else
{
strOut += "." + _strMemberName;
}
Expression expression = getExpression();
strOut += " = ";
if( expression == null )
{
strOut += "null!";
}
else
{
strOut += expression.toString();
}
return strOut;
}
public MemberAccess getMemberAccess()
{
return _ma;
}
public void setMemberAccess( MemberAccess ma )
{
_ma = ma;
}
}