checkpoint
authoradam <adam@megacz.com>
Thu, 12 Jan 2006 07:33:18 +0000 (02:33 -0500)
committeradam <adam@megacz.com>
Thu, 12 Jan 2006 07:33:18 +0000 (02:33 -0500)
darcs-hash:20060112073318-5007d-58bd3c6b586bb83efccf09b6e0d114817c1fe3c0.gz

src/edu/berkeley/sbp/misc/ReflectiveWalker.java
src/edu/berkeley/sbp/tib/TibDoc.java

index c99a463..c838a5e 100644 (file)
@@ -68,6 +68,7 @@ public class ReflectiveWalker extends StringWalker {
     }
     */
     public void walk(String tag) {
+        if (tag==null) return;
         Member m = member(normalize(tag), 0, false);
         if (m!=null) Reflection.fuzzyInvoke(target, m);
     }
@@ -75,7 +76,7 @@ public class ReflectiveWalker extends StringWalker {
         if (argo.length==0) return super.walk(tag, argo);
         if (argo==null) return tag;
         if (tag==null || "".equals(tag)) return argo;
-        Member m = member(normalize(tag), argo.length, argo.length>0);
+        Member m = tag==null ? null : member(normalize(tag), argo.length, argo.length>0);
         if (m==null) return super.walk(tag, argo);
         //System.out.println("preparing to invoke method " + (m==null ? "null" : (m.toString())) + " for sequence " + (owner()+"."+tag));
         if (m != null) return Reflection.fuzzyInvoke(target, m, argo);
index c3b7871..e753933 100644 (file)
@@ -7,6 +7,7 @@ package edu.berkeley.sbp.tib;
 //import org.ibex.io.*;
 import edu.berkeley.sbp.*;
 import edu.berkeley.sbp.misc.*;
+import edu.berkeley.sbp.util.*;
 import java.util.*;
 import java.io.*;
 
@@ -26,16 +27,15 @@ public class TibDoc extends ReflectiveWalker {
         System.out.println(((Tree)new TibDoc().walk(f.expand1())).toPrettyString());
     }
 
-    public Tree<String> walk(Tree<String> tree) {
-        String head = tree.head();
+    //public void header() { throw new Error(); }
+    public Object walk(String head, Object[] children) {
         if ("stringify".equals(head)) {
             StringBuffer ret = new StringBuffer();
-            for(Tree<String> t : tree.child(0)) ret.append(t);
+            for(Tree<String> t : (Tree<String>)children[0]) ret.append(t);
             return new Tree<String>(null, ret.toString());
         }
-        Tree<String>[] children = new Tree[tree.numChildren()];
-        for(int i=0; i<children.length; i++) children[i] = walk(tree.child(i));
-        return new Tree<String>(null, head, children);
+        if (children.length==0) return new Tree<String>(null, head, new Tree[0]);
+        return new Tree<String>(null, head, (Tree<String>[])Reflection.lub(children));
     }