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