package com.drawbridge.jsengine.ast;
import java.util.ArrayList;
import java.util.LinkedList;
import com.drawbridge.jsengine.JsEngine;
import com.drawbridge.jsengine.Scope;
import com.drawbridge.jsengine.jsobjects.ExecutionException;
import com.drawbridge.jsengine.jsobjects.JSBoolean;
import com.drawbridge.jsengine.jsobjects.JSType;
import com.google.caja.parser.js.AbstractStatement;
import com.google.caja.parser.js.Conditional;
//TODO Finish implementing conditionals
public class ConditionalEvaluator extends Evaluator
{
ArrayList<Evaluator> evals = new ArrayList<Evaluator>();
ArrayList<AbstractStatement> ops = new ArrayList<AbstractStatement>();
Scope mNewScope;
Conditional mConditional;
public ConditionalEvaluator(Evaluator parent, Scope scope, Conditional conditional) {
super(parent,scope, conditional.getFilePosition());
mConditional = conditional;
// First statement is the if statement
mChildren.add(Evaluator.getEvaluator(this, scope, conditional.children().get(0)));
// Everything else is executable if that's true
mNewScope = new Scope(JsEngine.getInstance(), scope);
scope.addChild(mNewScope);
for(int i = 1; i < conditional.children().size(); i++){
ops.add((AbstractStatement) conditional.children().get(i));
Evaluator eval = Evaluator.getEvaluator(this, mNewScope, conditional.children().get(i));
evals.add(eval);
}
}
@Override
public JSType evaluate() throws EvaluatorException, ExecutionException
{
JSBoolean result = (JSBoolean) mChildren.get(0).evaluate();
if(result.mVal){
for(int i = 0; i < evals.size(); i++){
evals.get(i).evaluate();
}
}
return null;
}
@Override
public LinkedList<com.drawbridge.vl.blocks.Block> getBlocks()
{
return new LinkedList<com.drawbridge.vl.blocks.Block>();
}
}