package com.drawbridge.jsengine.ast; import java.util.LinkedList; import com.drawbridge.jsengine.Scope; import com.drawbridge.jsengine.jsobjects.JSType; import com.google.caja.parser.js.ControlOperation; import com.google.caja.parser.js.OperatorType; public class ControlOperationEvaluator extends Evaluator { OperatorType opType; Evaluator result1; Evaluator result2; // Child 0 - if statement // Child 1 - result true // Child 2 - result false public ControlOperationEvaluator(Evaluator parent, Scope scope, ControlOperation controlOperation) { super(parent, scope, controlOperation.getFilePosition()); opType = controlOperation.getOperator().getType(); // May have to add new scope here mChildren.add(Evaluator.getEvaluator(this, scope, controlOperation.children().get(0))); mChildren.add(Evaluator.getEvaluator(this, scope, controlOperation.children().get(1))); mChildren.add(Evaluator.getEvaluator(this, scope, controlOperation.children().get(2))); } @Override public JSType evaluate() throws EvaluatorException { throw new EvaluatorException("Unsupported Functionality:" + "Control Operation"); // JSBoolean conditional = (JSBoolean) mChildren.get(0).evaluate(); // if(conditional.mVal) // return mChildren.get(1).evaluate(); // else // return mChildren.get(2).evaluate(); } @Override public LinkedList<com.drawbridge.vl.blocks.Block> getBlocks() { return new LinkedList<com.drawbridge.vl.blocks.Block>(); } @Override public boolean compare(Evaluator e) { if (!e.getClass().equals(getClass())) return false; if (mChildren.size() != e.mChildren.size()) return false; for (int i = 0; i < mChildren.size(); i++) { if (!mChildren.get(i).compare(e.mChildren.get(i))) return false; } if (e.getFilePosition().equals(getFilePosition())) return true; else return false; } }