IConstructor prod = TreeAdapter.getProduction(tree);
ISet attrs = ProductionAdapter.getAttributes(prod);
for (IValue attr : attrs) {
if (((IConstructor) attr).getConstructorType() == Factory.Attr_Tag) {
IValue arg = ((IConstructor) attr).get(0);
if (arg.getType().isNode() && ((INode) arg).getName().equals("holeType")) {
return (IConstructor) ((INode) arg).get(0);
}
}
}
throw new ImplementationError("expected to find a holeType, but did not: " + tree);
}
@Override
public IConstructor visitTreeAmb(IConstructor arg) {
ISetWriter w = vf.setWriter();
for (IValue elem : TreeAdapter.getAlternatives(arg)) {
w.insert(elem.accept(this));
}
return arg.set("alternatives", w.done());
}
});
}