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