package jeql.syntax; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import jeql.api.error.ImplementationException; import jeql.api.error.JeqlException; import jeql.engine.Scope; import jeql.util.ExceptionUtil; public class StatementListNode extends ParseTreeNode { private List stmtList = new ArrayList(); public StatementListNode() { } public void add(ParseTreeNode stmt) { stmtList.add(stmt); } public List getStatements() { return stmtList; } public Class getType(Scope scope) { throw new UnsupportedOperationException(); } public void bind(Scope scope) { throw new UnsupportedOperationException(); } public Object eval(Scope scope) { Object result = null; for (Iterator i = stmtList.iterator(); i.hasNext(); ) { ParseTreeNode node = (ParseTreeNode) i.next(); // bind statements as they are executed node.bind(scope); Object stmtResult = evalStmt(scope, node); // only some kinds of statements return a reportable result Object lastTbl = null; if (node instanceof SelectNode || node instanceof AssignmentNode) { result = stmtResult; lastTbl = result; } scope.setVariable(Scope.LAST_TABLE, lastTbl); } return result; } private Object evalStmt(Scope scope, ParseTreeNode node) { try { Object stmtResult = node.eval(scope); return stmtResult; } catch (JeqlException e) { throw e; } catch (Throwable e) { throw new ImplementationException(node, e); } } }