/*
* 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.lang.parser.IExpression;
import gw.lang.parser.expressions.IBlockInvocation;
import gw.lang.reflect.IBlockType;
import gw.util.GosuStringUtil;
import java.util.Collections;
import java.util.List;
/**
* Gosu block invocation expression.
*/
public class BlockInvocation extends Expression implements IBlockInvocation
{
private IExpression _root;
private List<IExpression> _args;
private int[] _namedArgOrder;
public BlockInvocation( IExpression root )
{
_root = root;
_args = Collections.emptyList();
}
public void setArgs( List<IExpression> args )
{
_args = args;
}
public List<IExpression> getArgs()
{
return _args;
}
public Object evaluate()
{
if( !isCompileTimeConstant() )
{
return super.evaluate();
}
throw new CannotExecuteGosuException();
}
@Override
public String toString()
{
return _root.toString() + "(" + GosuStringUtil.join( _args, ", " ) + ")";
}
public IExpression getRoot()
{
return _root;
}
public IBlockType getBlockType() {
return (IBlockType) _root.getType();
}
public int[] getNamedArgOrder()
{
return _namedArgOrder;
}
public void setNamedArgOrder( int[] namedArgOrder )
{
_namedArgOrder = namedArgOrder;
}
}