X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2FTree.java;h=1b9ddfa668f8bcee675892b4c216cc7408456fac;hb=c8d1c3a25e2bfa9645c4b91d3dde9c4857f636f2;hp=47f5b49a4c55f0090d70f9e9652926c7acbc6999;hpb=fdfbcb35985749c03225bdef24ad5e4add42661b;p=sbp.git diff --git a/src/edu/berkeley/sbp/Tree.java b/src/edu/berkeley/sbp/Tree.java index 47f5b49..1b9ddfa 100644 --- a/src/edu/berkeley/sbp/Tree.java +++ b/src/edu/berkeley/sbp/Tree.java @@ -48,10 +48,7 @@ public class Tree this.location = loc; this.head = head; this.lift = lift && children != null && children.length > 0; - - Tree[] children2 = children==null ? new Tree[0] : new Tree[children.length]; - if (children != null) System.arraycopy(children, 0, children2, 0, children.length); - this.children = children2; + this.children = ArrayUtil.clone(children, Tree.class); } @@ -86,65 +83,9 @@ public class Tree public boolean isTransparent() { return false; } public boolean isHidden() { return false; } - public static interface TreeFunctor extends Functor>, R> { } - - - public static class RawBindingFunctor implements TreeFunctor, ToJava { - private Binding _binding; - private String _toString; - public RawBindingFunctor(String toString, Binding binding) { - this._binding = binding; - this._toString = toString; - } - public String toString() { - return _toString; - } - public void toJava(StringBuffer sb) { - sb.append("new Tree.RawBindingFunctor("); - sb.append("\""); - sb.append(StringUtil.toJavaString(_toString)); - sb.append("\", "); - _binding.toJava(sb); - sb.append(")"); - } - public Object invoke(Iterable> t) { - return _binding.invoke(new Object[] { t }); - } - } - public static class BindingFunctor implements TreeFunctor, ToJava { - private Binding _binding; - private String _toString; - public String toString() { - return _toString; - } - public BindingFunctor(String toString, Binding binding) { - this._binding = binding; - this._toString = toString; - } - public void toJava(StringBuffer sb) { - sb.append("new Tree.BindingFunctor("); - sb.append("\""); - sb.append(StringUtil.toJavaString(_toString)); - sb.append("\", "); - _binding.toJava(sb); - sb.append(")"); - } - public Object invoke(Iterable> t) { - ArrayList ret = new ArrayList(); - for(Tree tc : t) { - if (tc.head() != null && tc.head() instanceof Functor) - ret.add(((Tree.TreeFunctor)tc.head()).invoke(tc.children())); - else if (tc.numChildren() == 0) - ret.add(tc.head()); - else { - System.err.println("FIXME: don't know what to do about " + tc); - ret.add(null); - } - } - Object[] o = (Object[])ret.toArray(new Object[0]); - return _binding.invoke(o); - } - } + // TreeFunctor ///////////////////////////////////////////////////////////////////////////// + public static interface TreeFunctor extends Functor>, R> { } + }