/* * 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.ArrayAccess; import gw.lang.parser.statements.IArrayAssignmentStatement; import gw.lang.parser.statements.ITerminalStatement; /** * Represents an array assignment statement in the Gosu grammar: * <pre> * <i>array-assignment</i> * <array-reference> [ <member> ] <b>=</b> expression * <p/> * <i>array-reference</i> * <expression> * <p/> * <i>member</i> * <array-access> * <expression> * </pre> * * @see gw.lang.parser.IGosuParser */ public final class ArrayAssignmentStatement extends Statement implements IArrayAssignmentStatement { /** * The left-hand-side expression */ protected ArrayAccess _arrayAccessExpression; /** * The right-hand-side expression */ protected Expression _expression; public ArrayAssignmentStatement() { } public ArrayAccess getArrayAccessExpression() { return _arrayAccessExpression; } public void setArrayAccessExpression( ArrayAccess lhsExpression ) { _arrayAccessExpression = lhsExpression; } /** * @return The right-hand-side expression of the assignment. */ public Expression getExpression() { return _expression; } /** * @param expression The right-hand-side expression of the assignment. */ public void setExpression( Expression expression ) { _expression = expression; } /** * Execute the expression. Evaluates the RHS and assigns the resulting value * to the symbol referenced by the LHS identifier. */ 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() { return getArrayAccessExpression().toString() + " = " + getExpression().toString(); } }