/*
* $Id: CallStatement.java,v 1.21 2002/09/16 08:05:06 jkl Exp $
*
* Copyright (c) 2002 Njet Communications Ltd. All Rights Reserved.
*
* Use is subject to license terms, as defined in
* Anvil Sofware License, Version 1.1. See LICENSE
* file, or http://njet.org/license-1.1.txt
*/
package anvil.script.statements;
import anvil.Location;
import anvil.parser.Tag;
import anvil.ErrorListener;
import anvil.script.compiler.ByteCompiler;
import anvil.script.Context;
import anvil.script.Name;
import anvil.script.Type;
import anvil.script.expression.LinkNode;
import anvil.script.expression.Expression;
import anvil.script.expression.ExpressionList;
import anvil.script.expression.Node;
import anvil.script.expression.Parent;
import anvil.script.parser.ParserBase;
import anvil.script.parser.ExpressionParser;
import anvil.script.parser.TemplateParser;
import anvil.script.Grammar;
import java.io.IOException;
import java.util.StringTokenizer;
/**
* class CallStatement
*
* @author: Jani Lehtim�ki
*/
public class CallStatement extends EvalStatement
{
public CallStatement(Statement parent, Location location)
{
super(parent, location);
}
public int typeOf()
{
return Statement.ST_CALL;
}
public String name()
{
return "call";
}
public void parse(TemplateParser parser, Tag tag)
{
Parent parameters;
Location location = getLocation();
String params = tag.getValue("params");
if (params != null) {
ExpressionParser p = new ExpressionParser(parser, parser.getLocation(), params);
parameters = p.parseParameterList();
} else {
int size = 0;
int n = tag.getLength();
for (int i=0; i<n; i++) {
if (tag.getName(i).equalsIgnoreCase("param")) {
size++;
}
}
parameters = new ExpressionList(size);
int c = 0;
for (int i=0; i<n; i++) {
if (tag.getName(i).equalsIgnoreCase("param")) {
Expression expression = Grammar.parseExpression(tag.getValue(i), location, parser);
parameters.setChild(c++, expression);
}
}
}
String dottedname = tag.getValue("function");
if (dottedname != null) {
Name name = Grammar.parseDottedName(parser, location, dottedname);
if (name != null) {
_expression = new Expression(new LinkNode(this, location, name, parameters, LinkNode.GET), location);
}
} else {
parser.error(location, "Attribute 'function' not given");
}
}
}