checkpoint
authoradam <adam@megacz.com>
Wed, 5 Jul 2006 01:31:23 +0000 (21:31 -0400)
committeradam <adam@megacz.com>
Wed, 5 Jul 2006 01:31:23 +0000 (21:31 -0400)
darcs-hash:20060705013123-5007d-03a8248978cbcdee0b8f0a61329cba6719741b3e.gz

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

index 5c15980..2891b0f 100644 (file)
@@ -223,7 +223,7 @@ public class Demo {
         public Sequence makeSequence(Production p) {
             return Sequence.rewritingSequence(new TargetReducer(p, buildSequence(p), "reducer-"+this), p.elements, p.labels, p.drops);
         }
-        public abstract Object plant(Object[] fields, int[] map);
+        public abstract Object plant(Object[] fields);
         public boolean isRaw() { return false; }
         public Object invokeRaw(Iterable<Tree<Object>> t) { return null; }
         public class TargetReducer implements Tree.TreeFunctor<Object,Object> {
@@ -250,7 +250,12 @@ public class Demo {
                     }
                 }
                 System.err.println("input tree: " + t);
-                return plant(ret.toArray(new Object[0]), map);
+                Object[] o = (Object[])ret.toArray(new Object[0]);
+                int max = 0;
+                for(int i=0; i<map.length; i++) max = Math.max(map[i], max);
+                Object[] o2 = new Object[max+1];
+                for(int i=0; i<o.length; i++) o2[map[i]] = o[i];
+                return plant(o2);
             }
         }
     }
@@ -277,20 +282,19 @@ public class Demo {
                     return new TargetConstructor(c).buildSequence(p);
             return null;
         }
-        public Object plant(Object[] fields, int[] map) {
+        public Object plant(Object[] fields) {
             try {
                 Object ret = _class.newInstance();
                 Field[] f = _class.getFields();
                 int j = 0;
-                for(int i=0; i<f.length; i++)
-                    if (map[i] != -1) {
-                        Object tgt = Reflection.lub(fields[map[i]]);
-                        if (f[i].getType() == String.class) tgt = stringify(tgt);
-                        // FUGLY
-                        tgt = coerce(tgt, f[i].getType());
-                        System.err.println("setting a " + f[i].getType().getName() + " to " + Reflection.show(tgt));
-                        f[i].set(ret, tgt);
-                    }
+                for(int i=0; i<f.length; i++) {
+                    Object tgt = Reflection.lub(fields[i]);
+                    if (f[i].getType() == String.class) tgt = stringify(tgt);
+                    // FUGLY
+                    tgt = coerce(tgt, f[i].getType());
+                    System.err.println("setting a " + f[i].getType().getName() + " to " + Reflection.show(tgt));
+                    f[i].set(ret, tgt);
+                }
                 return ret;
             } catch (Exception e) {
                 e.printStackTrace();
@@ -335,20 +339,19 @@ public class Demo {
                         argtags[i+ofs] = (arg)a;
             return buildSequence(p, names, argtags);
         }
-        public Object plant(Object[] fields, int[] map) {
+        public Object plant(Object[] fields) {
             try {
                 Class[] argTypes = _ctor.getParameterTypes();
                 Object[] args = new Object[argTypes.length];
                 int j = 0;
-                for(int i=0; i<args.length; i++)
-                    if (map[i] != -1) {
-                        Object tgt = Reflection.lub(fields[map[i]]);
-                        if (argTypes[i] == String.class) tgt = stringify(tgt);
-                        // FUGLY
-                        tgt = coerce(tgt, argTypes[i]);
-                        System.err.println("setting a " + argTypes[i].getName() + " to " + Reflection.show(tgt));
-                        args[i] = tgt;
-                    }
+                for(int i=0; i<args.length; i++) {
+                    Object tgt = Reflection.lub(fields[i]);
+                    if (argTypes[i] == String.class) tgt = stringify(tgt);
+                    // FUGLY
+                    tgt = coerce(tgt, argTypes[i]);
+                    System.err.println("setting a " + argTypes[i].getName() + " to " + Reflection.show(tgt));
+                    args[i] = tgt;
+                }
                 return _ctor.newInstance(args);
             } catch (Exception e) {
                 throw new RuntimeException(e);
@@ -381,20 +384,19 @@ public class Demo {
                 throw new RuntimeException(e);
             }
         }
-        public Object plant(Object[] fields, int[] map) {
+        public Object plant(Object[] fields) {
             try {
                 Class[] argTypes = _method.getParameterTypes();
                 Object[] args = new Object[argTypes.length];
                 int j = 0;
-                for(int i=0; i<args.length; i++)
-                    if (map[i] != -1) {
-                        Object tgt = Reflection.lub(fields[map[i]]);
-                        if (argTypes[i] == String.class) tgt = stringify(tgt);
-                        // FUGLY
-                        tgt = coerce(tgt, argTypes[i]);
-                        System.err.println("setting a " + argTypes[i].getName() + " to " + Reflection.show(tgt));
-                        args[i] = tgt;
-                    }
+                for(int i=0; i<args.length; i++) {
+                    Object tgt = Reflection.lub(fields[i]);
+                    if (argTypes[i] == String.class) tgt = stringify(tgt);
+                    // FUGLY
+                    tgt = coerce(tgt, argTypes[i]);
+                    System.err.println("setting a " + argTypes[i].getName() + " to " + Reflection.show(tgt));
+                    args[i] = tgt;
+                }
                 System.err.println("invoking " + _method + " with " + Reflection.show(args));
                 return _method.invoke(null, args);
             } catch (Exception e) {