checkpoint
authoradam <adam@megacz.com>
Wed, 5 Jul 2006 01:26:32 +0000 (21:26 -0400)
committeradam <adam@megacz.com>
Wed, 5 Jul 2006 01:26:32 +0000 (21:26 -0400)
darcs-hash:20060705012632-5007d-625f6175f02693da99546e02409df0e0f1eaedbe.gz

src/edu/berkeley/sbp/Tree.java
src/edu/berkeley/sbp/misc/Demo.java

index bffc353..ca351d3 100644 (file)
@@ -61,8 +61,11 @@ public class Tree<T>
     public static interface TreeFunctor<T,R> extends Functor<Iterable<Tree<T>>, R> {
     }
 
-    public static class ArrayBuildingTreeFunctor<T> implements TreeFunctor<T,T[]> {
+    public static class ArrayBuildingTreeFunctor<T> implements TreeFunctor<T,T[]>, ToJava {
+
+        public void toJava(StringBuffer sb) { sb.append("new Tree.ArrayBuildingTreeFunctor()"); }
         public String toString() { return ""; }
+        
         public T[] invoke(Iterable<Tree<T>> t) {
             ArrayList ret = new ArrayList();
             for(Tree tc : t) {
index dbe6266..5c15980 100644 (file)
@@ -225,8 +225,8 @@ public class Demo {
         }
         public abstract Object plant(Object[] fields, int[] map);
         public boolean isRaw() { return false; }
-        public Object invokeRaw(Iterable<Tree> t) { return null; }
-        public class TargetReducer implements Functor<Iterable<Tree>,Object> {
+        public Object invokeRaw(Iterable<Tree<Object>> t) { return null; }
+        public class TargetReducer implements Tree.TreeFunctor<Object,Object> {
             private Production p;
             private int[] map;
             private String name;
@@ -236,12 +236,12 @@ public class Demo {
                 this.name = name;
             }
             public String toString() { return name; }
-            public Object invoke(Iterable<Tree> t) {
+            public Object invoke(Iterable<Tree<Object>> t) {
                 if (isRaw()) return invokeRaw(t);
                 ArrayList ret = new ArrayList();
                 for(Tree tc : t) {
                     if (tc.head() != null && tc.head() instanceof Functor)
-                        ret.add(((Functor<Iterable<Tree>,Object>)tc.head()).invoke(tc.children()));
+                        ret.add(((Tree.TreeFunctor<Object,Object>)tc.head()).invoke(tc.children()));
                     else if (tc.numChildren() == 0)
                         ret.add(tc.head());
                     else {
@@ -374,7 +374,7 @@ public class Demo {
             return ret;
         }
         public boolean isRaw() { return _method.isAnnotationPresent(raw.class); }
-        public Object invokeRaw(Iterable<Tree> t) {
+        public Object invokeRaw(Iterable<Tree<Object>> t) {
             try {
                 return _method.invoke(null, new Object[] { t });
             } catch (Exception e) {
@@ -465,7 +465,7 @@ public class Demo {
     }
     public static Union make(Tree t, String s) { return make(t, s, new ReflectiveMeta()); }
     public static Union make(Tree t, String s, ReflectiveMeta rm) {
-        Functor<Iterable<Tree>,Object> red = (Functor<Iterable<Tree>,Object>)t.head();
+        Tree.TreeFunctor<Object,Object> red = (Tree.TreeFunctor<Object,Object>)t.head();
         MG.Grammar g = (MG.Grammar)red.invoke(t.children());
         Context cx = new Context(g,rm);
         Union u = null;
@@ -765,7 +765,7 @@ public class Demo {
         }
         public Context(Tree t, ReflectiveMeta rm) {
             this.rm = rm;
-            Functor<Iterable<Tree>,Object> red = (Functor<Iterable<Tree>,Object>)t.head();
+            Tree.TreeFunctor<Object,Object> red = (Tree.TreeFunctor<Object,Object>)t.head();
             this.grammar = (MG.Grammar)red.invoke(t.children());
         }
         public Union peek(String name) { return map.get(name); }