package com.pixelmaid.dresscode.antlr.types.tree;
import com.pixelmaid.dresscode.antlr.types.VarType;
import com.pixelmaid.dresscode.drawing.primitive2d.Drawable;
import java.util.ArrayList;
import java.util.List;
public class LookupNode extends NodeEvent implements DCNode {
private DCNode expression;
private List<DCNode> indexes;
private int line;
public LookupNode(DCNode e, List<DCNode> i,int l) {
expression = e;
indexes = i;
line = l;
}
@Override
public VarType evaluate() {
VarType value = expression.evaluate();
List<VarType> indexValues = new ArrayList<VarType>();
for (DCNode indexNode : indexes) {
indexValues.add(indexNode.evaluate());
}
for(VarType index : indexValues) {
if(!index.isNumber() || !(value.isList() || value.isString()|| value.isDrawable())) {
throw new RuntimeException("illegal expression: " + expression + "[" + index + "]");
}
int idx = index.asLong().intValue();
if(value.isList()) {
value = value.asList().get(idx);
}
else if(value.isString()) {
value = new VarType(String.valueOf(value.asString().charAt(idx)));
}
else if(value.isDrawable()){
Drawable d = value.asDrawable();
d.setLine(line);
if(d.numChildren()==0){
value = new VarType(value.asPolygon().pointAt(idx).toDrawable());
}
else{
value = new VarType(d.childAt(idx));
}
}
}
return value;
}
}