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;
}
}