[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
}