extends PrintableTree<Tree<NodeType>>
implements Iterable<Tree<NodeType>> {
+ private static final Tree[] emptyTree = new Tree[0];
+
private final Input.Region location;
private final NodeType ihead;
private final Tree<NodeType>[] children;
/** get the input region that this tree was parsed from */
public Input.Region getRegion() { return location; }
- public Tree(Input.Region loc, NodeType head) { this(loc, head, new Tree[0]); }
- public Tree(Input.Region loc, NodeType head, Tree<NodeType>[] children) { this(loc, head, children, new boolean[children==null?0:children.length]); }
+ public Tree(Input.Region loc, NodeType head) {
+ location = loc;
+ ihead = head;
+ children = emptyTree;
+ }
+ public Tree(Input.Region loc, NodeType head, List<Tree<NodeType>> kids){
+ location = loc;
+ ihead = head;
+ if (children.size() == 0)
+ children = emptyTree;
+ else {
+ children = new Tree[kids.size()];
+ kids.toArray(children);
+ }
+ }
+ public Tree(Input.Region loc, NodeType head, Tree<NodeType>[] kids) {
+ location = loc;
+ ihead = head;
+ children = (kids == null ? emptyTree : kids.clone());
+ }
// FIXME: fairly inefficient because we keep copying arrays
/** package-private constructor, allows setting the "lift" bit */