[e-cvs] cvs commit: e/src/jsrc/org/quasiliteral/term Converter.java Functor.java Term.java Term.updoc ToFunctor.java ToLiteral.java ToTerm.java ToTermList.java

markm@eros.cs.jhu.edu markm@eros.cs.jhu.edu
Wed, 21 Nov 2001 09:21:33 -0500


markm       01/11/21 09:21:33

  Modified:    src/jsrc/org/erights/e/elib/base ClassDesc.java
               src/jsrc/org/erights/e/elib/prim JavaMemberNode.java
                        StaticMaker.java VTable.java
               src/jsrc/org/quasiliteral/quasiterm QuasiFunctor.java
               src/jsrc/org/quasiliteral/term Converter.java Functor.java
                        Term.java Term.updoc ToFunctor.java ToLiteral.java
                        ToTerm.java ToTermList.java
  Log:
  term trees are starting to work again

Revision  Changes    Path
1.29      +23 -10    e/src/jsrc/org/erights/e/elib/base/ClassDesc.java

Index: ClassDesc.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elib/base/ClassDesc.java,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -r1.28 -r1.29
--- ClassDesc.java	2001/11/11 23:32:17	1.28
+++ ClassDesc.java	2001/11/21 14:21:32	1.29
@@ -329,7 +329,7 @@
      */
     public ClassDesc(Class clazz) {
         super("XXX Missing docComment",
-              JavaMemberNode.typeSig(clazz),
+              typeSig(clazz),
               ConstList.EmptyList,
               mTypes(clazz));
         myClass = clazz;
@@ -380,15 +380,28 @@
      * Although this is public, it's not intended to be invokable from E.
      */
     public Object subCoerce(Object specimen, OneArgFunc optEjector) {
-        String specTypeName = specimen.getClass().getName();
-        int dot = specTypeName.lastIndexOf('.');
-        //It's cool even if it's -1
-        specTypeName = specTypeName.substring(dot + 1);
-        throw Thrower.toEject(
-          optEjector,
-          new ClassCastException(specTypeName +
-                                 " doesn't coerce to a " +
-                                 getName()));
+        String specTypeName = typeSig(specimen.getClass());
+        throw Thrower.toEject(optEjector,
+                              new ClassCastException(specTypeName +
+                                                     " doesn't coerce to a " +
+                                                     getName()));
+    }
+
+    /**
+     * Only the class name itself without the package qualifier.
+     * <p>
+     * If an array type, then the typeSig of the base type followed by "[]".
+     */
+    static public String typeSig(Class type) {
+        if (type.isArray()) {
+            return typeSig(type.getComponentType()) + "[]";
+        } else {
+            String name = type.getName();
+            int lastDot = name.lastIndexOf('.');
+            //if there are no dots then lastIndexOf() returns -1, so the +1
+            //below will still do the correct thing.
+            return name.substring(lastDot + 1);
+        }
     }
 
     /**



1.30      +2 -17     e/src/jsrc/org/erights/e/elib/prim/JavaMemberNode.java

Index: JavaMemberNode.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elib/prim/JavaMemberNode.java,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -r1.29 -r1.30
--- JavaMemberNode.java	2001/11/10 19:40:45	1.29
+++ JavaMemberNode.java	2001/11/21 14:21:32	1.30
@@ -22,6 +22,7 @@
 import org.erights.e.develop.exception.ExceptionMgr;
 import org.erights.e.elib.base.Ejector;
 import org.erights.e.elib.base.MethodNode;
+import org.erights.e.elib.base.ClassDesc;
 import org.erights.e.elib.eio.TextWriter;
 import org.erights.e.elib.ref.Ref;
 import org.erights.e.elib.tables.FlexList;
@@ -76,7 +77,7 @@
             if (i >= 1) {
                 result.append(", ");
             }
-            result.append(typeSig(types[i]));
+            result.append(ClassDesc.typeSig(types[i]));
         }
         result.append(')');
         return result.toString().intern();
@@ -237,20 +238,4 @@
      *
      */
     protected abstract Class receiverType();
-
-    /**
-     * Only the class name itself without the package qualifier.  If an array
-     * type, then the typeSig of the base type followed by "[]".
-     */
-    static public String typeSig(Class type) {
-        if (type.isArray()) {
-            return typeSig(type.getComponentType()) + "[]";
-        } else {
-            String name = type.getName();
-            int lastDot = name.lastIndexOf('.');
-            //if there are no dots then lastIndexOf() returns -1, so the +1
-            //below will still do the correct thing.
-            return name.substring(lastDot + 1);
-        }
-    }
 }



1.23      +1 -1      e/src/jsrc/org/erights/e/elib/prim/StaticMaker.java

Index: StaticMaker.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elib/prim/StaticMaker.java,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -r1.22 -r1.23
--- StaticMaker.java	2001/11/10 19:40:45	1.22
+++ StaticMaker.java	2001/11/21 14:21:32	1.23
@@ -274,7 +274,7 @@
      *
      */
     private String getClassSig() {
-        return JavaMemberNode.typeSig(myClass) + "__Maker";
+        return ClassDesc.typeSig(myClass) + "__Maker";
     }
 
     /**



1.35      +2 -4      e/src/jsrc/org/erights/e/elib/prim/VTable.java

Index: VTable.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elib/prim/VTable.java,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -r1.34 -r1.35
--- VTable.java	2001/11/10 19:40:45	1.34
+++ VTable.java	2001/11/21 14:21:32	1.35
@@ -22,6 +22,7 @@
 import org.erights.e.develop.exception.ExceptionMgr;
 import org.erights.e.elib.base.MethodNode;
 import org.erights.e.elib.base.Script;
+import org.erights.e.elib.base.ClassDesc;
 import org.erights.e.elib.eio.TextWriter;
 import org.erights.e.elib.quasi.MatchMaker;
 import org.erights.e.elib.ref.Ref;
@@ -194,10 +195,7 @@
                 if (null == self) {
                     selfStr = "<null> ";
                 } else {
-                    String typeName = self.getClass().getName();
-                    int lastDot = typeName.lastIndexOf('.');
-                    //don't need to check for -1
-                    typeName = typeName.substring(lastDot + 1);
+                    String typeName = ClassDesc.typeSig(self.getClass());
                     selfStr = "<" + typeName + ":" + self + "> ";
                 }
                 String diagnostic = selfStr + verb + "/" + args.length;



1.4       +3 -2      e/src/jsrc/org/quasiliteral/quasiterm/QuasiFunctor.java

Index: QuasiFunctor.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/quasiliteral/quasiterm/QuasiFunctor.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- QuasiFunctor.java	2001/11/21 10:46:00	1.3
+++ QuasiFunctor.java	2001/11/21 14:21:32	1.4
@@ -5,6 +5,7 @@
 import org.erights.e.elib.prim.StaticMaker;
 import org.erights.e.elib.tables.FlexList;
 import org.erights.e.elib.tables.Twine;
+import org.erights.e.elib.base.ClassDesc;
 import org.quasiliteral.astro.AstroToken;
 import org.quasiliteral.term.Functor;
 import org.quasiliteral.term.TermBuilder;
@@ -101,8 +102,8 @@
         } else if (value instanceof Twine) {
             myValueType = TermParser.LiteralString;
         } else {
-            throw new RuntimeException(value.getClass().getName() +
-                                       " not a literal type");
+            throw new RuntimeException(ClassDesc.typeSig(value.getClass()) +
+                                       " must be a literal type");
         }
         myValue = value;
     }



1.2       +2 -1      e/src/jsrc/org/quasiliteral/term/Converter.java

Index: Converter.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/quasiliteral/term/Converter.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- Converter.java	2001/11/21 11:02:47	1.1
+++ Converter.java	2001/11/21 14:21:32	1.2
@@ -55,7 +55,8 @@
                 return TermParser.LiteralFloat64;
             } else {
                 throw new RuntimeException
-                  ("Unrecognized number class: " + value.getClass());
+                  ("Unrecognized number class: " +
+                   ClassDesc.typeSig(value.getClass()));
             }
         } else if (value instanceof String || value instanceof Twine) {
             return TermParser.LiteralString;



1.10      +4 -2      e/src/jsrc/org/quasiliteral/term/Functor.java

Index: Functor.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/quasiliteral/term/Functor.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- Functor.java	2001/11/21 10:46:00	1.9
+++ Functor.java	2001/11/21 14:21:32	1.10
@@ -4,6 +4,7 @@
 import org.erights.e.develop.format.StringHelper;
 import org.erights.e.elib.base.EComparable;
 import org.erights.e.elib.base.SourceSpan;
+import org.erights.e.elib.base.ClassDesc;
 import org.erights.e.elib.prim.E;
 import org.erights.e.elib.prim.StaticMaker;
 import org.erights.e.elib.serial.PassByConstruction;
@@ -135,8 +136,9 @@
                 break;
             }
             default: {
-                throw new RuntimeException("Unrecognized value type: " +
-                                           value.getClass());
+                throw new RuntimeException
+                  ("Unrecognized value type: " +
+                   ClassDesc.typeSig(value.getClass()));
             }
         }
     }



1.6       +2 -0      e/src/jsrc/org/quasiliteral/term/Term.java

Index: Term.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/quasiliteral/term/Term.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- Term.java	2001/11/21 10:46:00	1.5
+++ Term.java	2001/11/21 14:21:32	1.6
@@ -68,6 +68,8 @@
     public Term(Functor functor, ConstList args) {
         myFunctor = functor;
         myArgs = args;
+        E.require(null != functor);
+        E.require(null != args);
     }
 
     /**



1.10      +8 -5      e/src/jsrc/org/quasiliteral/term/Term.updoc

Index: Term.updoc
===================================================================
RCS file: /cvs/e/src/jsrc/org/quasiliteral/term/Term.updoc,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- Term.updoc	2001/11/21 10:46:00	1.9
+++ Term.updoc	2001/11/21 14:21:32	1.10
@@ -1,15 +1,18 @@
-    ? def t1 := term`"foo"()`
+    ? def t1 := term`"foo"`
     # value: term`"foo"`
     
     ? def t2 := term`$t1(4)`
-    # value: term`# problem: <NullPointerException>
-    #
-    #   ....(org.erights.e.develop.exception.NestedException: ...)
-    #   <interactive interp> evalPrint(e`def t2 :any := term__quasiParser valueMaker("${0}(4)") substitute(ListMaker run(t1))`)
+    # value: term`"foo"(4)`
     
     ? def t3 := term`$t1(bar, $t2)`
     # value: term`"foo"(bar,
     #                   "foo"(4))`
+    
+    ? def term`LiteralString(@x*)` := t3
+    # problem: XXX not yet implemented
+    #
+    #   ....(org.erights.e.develop.exception.NestedException: ...)
+    #   <interactive interp> evalPrint(e`def q_1 :any ? (term__quasiParser matchMaker("LiteralString(@{0}*)") matchBind(ListMaker run(), q_1) =~ [x :any]) := t3`)
     
     ? 
     ? 



1.2       +22 -6     e/src/jsrc/org/quasiliteral/term/ToFunctor.java

Index: ToFunctor.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/quasiliteral/term/ToFunctor.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- ToFunctor.java	2001/11/21 11:02:47	1.1
+++ ToFunctor.java	2001/11/21 14:21:32	1.2
@@ -6,8 +6,10 @@
 import org.erights.e.elib.tables.ConstList;
 import org.erights.e.elib.util.OneArgFunc;
 import org.erights.e.elib.ref.Ref;
+import org.erights.e.elib.base.ClassDesc;
 import org.quasiliteral.astro.AstroToken;
 import antlr.Token;
+import antlr.collections.AST;
 
 /**
  * Converts to a Functor
@@ -76,8 +78,7 @@
                                Twine.fromString(""),
                                specimen);
         } else if (-1 == ttype) {
-            Thrower.toEject(optEjector, "Functor must not be null");
-            return null; //make compiler happy
+            throw Thrower.toEject(optEjector, "Functor must not be null");
 
         } else if (specimen instanceof Functor) {
             return specimen;
@@ -87,11 +88,26 @@
             return coerce(Functor.fromToken(token, "", typeNames),
                           optEjector);
 
+        } else if (specimen instanceof Term) {
+            Term term = (Term)specimen;
+            if (term.getArgs().size() == 0) {
+                //demote to functor, and don't bother to recur
+                return term.getFunctor();
+            } else {
+                throw Thrower.toEject
+                  (optEjector,
+                   "Can't demote Term with non-empty args: " + term);
+            }
+        } else if (specimen instanceof AST) {
+            //convert AST to Term, and recur
+            AST ast = (AST)specimen;
+            return coerce(Term.fromAST(ast, "", TermParser.getTokenNames()),
+                          optEjector);
+
         } else {
-            Thrower.toEject(optEjector,
-                            "Unrecognized specimen type: " +
-                            specimen.getClass());
-            return null; //make compiler happy
+            throw Thrower.toEject(optEjector,
+                                  "Unrecognized specimen type: " +
+                                  ClassDesc.typeSig(specimen.getClass()));
         }
     }
 }



1.2       +24 -7     e/src/jsrc/org/quasiliteral/term/ToLiteral.java

Index: ToLiteral.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/quasiliteral/term/ToLiteral.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- ToLiteral.java	2001/11/21 11:02:47	1.1
+++ ToLiteral.java	2001/11/21 14:21:32	1.2
@@ -13,6 +13,7 @@
 import java.math.BigInteger;
 
 import antlr.Token;
+import antlr.collections.AST;
 
 /**
  * Converts to null or to a Functor representing untagged literal data.
@@ -89,20 +90,36 @@
             if (functor.isLiteral()) {
                 return functor;
             } else {
-                Thrower.toEject(optEjector,
-                                "Functor must be literal: " + functor);
-                return null; //make compiler happy
+                throw Thrower.toEject(optEjector,
+                                      "Functor must be literal: " + functor);
             }
         } else if (specimen instanceof Token) {
             Token token = (Token)specimen;
             return coerce(Functor.fromToken(token, "", typeNames),
                           optEjector);
 
+        } else if (specimen instanceof Term) {
+            Term term = (Term)specimen;
+            if (term.getArgs().size() == 0) {
+                //demote to functor, and recur
+                return coerce(term.getFunctor(),
+                              optEjector);
+            } else {
+                throw Thrower.toEject
+                  (optEjector,
+                   "Can't demote Term with non-empty args: " + term);
+            }
+        } else if (specimen instanceof AST) {
+            //convert AST to Term, and recur
+            AST ast = (AST)specimen;
+            return coerce(Term.fromAST(ast, "", TermParser.getTokenNames()),
+                          optEjector);
+
+
         } else {
-            Thrower.toEject(optEjector,
-                            "Unrecognized specimen type: " +
-                            specimen.getClass());
-            return null; //make compiler happy
+            throw Thrower.toEject(optEjector,
+                                  "Unrecognized specimen type: " +
+                                  ClassDesc.typeSig(specimen.getClass()));
         }
     }
 }



1.2       +2 -3      e/src/jsrc/org/quasiliteral/term/ToTerm.java

Index: ToTerm.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/quasiliteral/term/ToTerm.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- ToTerm.java	2001/11/21 11:02:47	1.1
+++ ToTerm.java	2001/11/21 14:21:32	1.2
@@ -105,9 +105,8 @@
                 //tags match
                 return term;
             } else {
-                Thrower.toEject(optEjector,
-                                "Mismatch: " + myOptTag + " vs " + tag);
-                return null; //make compiler happy
+                throw Thrower.toEject(optEjector,
+                                      "Mismatch: " + myOptTag + " vs " + tag);
             }
         } else if (specimen instanceof AST) {
             //convert AST to Term, and recur



1.2       +7 -6      e/src/jsrc/org/quasiliteral/term/ToTermList.java

Index: ToTermList.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/quasiliteral/term/ToTermList.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- ToTermList.java	2001/11/21 11:02:47	1.1
+++ ToTermList.java	2001/11/21 14:21:32	1.2
@@ -121,13 +121,14 @@
             int len = list.size();
             char q = myQuant.charValue();
             if ('?' == q && len >= 2) {
-                Thrower.toEject(optEjector,
-                                "'?' doesn't allow " + len + " elements: " +
-                                specimen);
+                throw Thrower.toEject(optEjector,
+                                      "'?' doesn't allow " +
+                                      len + " elements: " +
+                                      specimen);
             } else if ('+' == q && len <= 0) {
-                Thrower.toEject(optEjector,
-                                "'+' requires at least one element: " +
-                                specimen);
+                throw Thrower.toEject(optEjector,
+                                      "'+' requires at least one element: " +
+                                      specimen);
             } else {
                 //do nothing, '*' allows any length
             }