package com.drawbridge.jsengine.ast; import java.util.LinkedList; import java.util.List; import com.drawbridge.jsengine.Scope; import com.drawbridge.jsengine.jsobjects.ExecutionException; import com.drawbridge.jsengine.jsobjects.JSType; import com.google.caja.parser.js.Block; import com.google.caja.parser.js.Statement; /** * * A group of statements executed serially * (except that FunctionDeclarations are hoisted). * * @author ags46 * */ public class BlockEvaluator extends Evaluator{ private List<? extends Statement> statements; public BlockEvaluator(Evaluator parent, Scope scope, Block block) { super(parent,scope, block.getFilePosition()); statements = block.children(); for(Statement sta : statements){ mChildren.add(Evaluator.getEvaluator(this, mScope, sta)); } } @Override public JSType evaluate() throws EvaluatorException, ExecutionException { for(Evaluator stEval : mChildren){ if(stEval instanceof ReturnStmtEvaluator){ return stEval.evaluate(); } else{ stEval.evaluate(); } } return null; } @Override public LinkedList<com.drawbridge.vl.blocks.Block> getBlocks() { LinkedList<com.drawbridge.vl.blocks.Block> results = new LinkedList<com.drawbridge.vl.blocks.Block>(); for(Evaluator eval: mChildren){ LinkedList<com.drawbridge.vl.blocks.Block> subresult = eval.getBlocks(); results.addAll(subresult); } return results; } }