You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by sa...@apache.org on 2003/10/17 19:15:15 UTC
cvs commit: xml-xalan/java/src/org/apache/xalan/xsltc/compiler/util ObjectType.java StringType.java Type.java
santiagopg 2003/10/17 10:15:15
Modified: java/src/org/apache/xalan/xsltc/compiler CastCall.java
CastExpr.java FunctionCall.java
java/src/org/apache/xalan/xsltc/compiler/util
ObjectType.java StringType.java Type.java
Log:
Allow conversion between types 'string' and 'object[java.lang.String]'.
Conversion is trivial as instances of both types have the same runtime
representation. This was needed in order to write expressions such
as,
string:new(xsltc:cast('java.lang.String', $object))
where 'object' is a param bound to a value of type 'java.lang.String'.
Revision Changes Path
1.2 +2 -2 xml-xalan/java/src/org/apache/xalan/xsltc/compiler/CastCall.java
Index: CastCall.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/CastCall.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- CastCall.java 7 Oct 2003 15:44:22 -0000 1.1
+++ CastCall.java 17 Oct 2003 17:15:15 -0000 1.2
@@ -108,7 +108,7 @@
Expression exp = argument(0);
if (exp instanceof LiteralExpr) {
_className = ((LiteralExpr) exp).getValue();
- _type = new ObjectType(_className);
+ _type = Type.newObjectType(_className);
}
else {
throw new TypeCheckError(new ErrorMsg(ErrorMsg.NEED_LITERAL_ERR,
1.19 +3 -1 xml-xalan/java/src/org/apache/xalan/xsltc/compiler/CastExpr.java
Index: CastExpr.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/CastExpr.java,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- CastExpr.java 1 Apr 2003 21:08:59 -0000 1.18
+++ CastExpr.java 17 Oct 2003 17:15:15 -0000 1.19
@@ -116,6 +116,7 @@
InternalTypeMap.put(Type.String, Type.Real);
InternalTypeMap.put(Type.String, Type.Reference);
InternalTypeMap.put(Type.String, Type.Object);
+ InternalTypeMap.put(Type.String, Type.ObjectString);
InternalTypeMap.put(Type.NodeSet, Type.NodeSet);
InternalTypeMap.put(Type.NodeSet, Type.Boolean);
@@ -152,6 +153,7 @@
InternalTypeMap.put(Type.Reference, Type.Object);
InternalTypeMap.put(Type.Object, Type.String);
+ InternalTypeMap.put(Type.ObjectString, Type.String);
InternalTypeMap.put(Type.Void, Type.String);
}
1.32 +4 -6 xml-xalan/java/src/org/apache/xalan/xsltc/compiler/FunctionCall.java
Index: FunctionCall.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/FunctionCall.java,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -r1.31 -r1.32
--- FunctionCall.java 14 Aug 2003 16:27:43 -0000 1.31
+++ FunctionCall.java 17 Oct 2003 17:15:15 -0000 1.32
@@ -512,10 +512,8 @@
_isExtConstructor = true;
bestConstrDistance = currConstrDistance;
- if (_clazz != null)
- _type = new ObjectType(_clazz);
- else
- _type = new ObjectType(_className);
+ _type = (_clazz != null) ? Type.newObjectType(_clazz)
+ : Type.newObjectType(_className);
}
}
@@ -651,7 +649,7 @@
_type = (Type) _java2Internal.get(extType);
if (_type == null) {
- _type = new ObjectType(extType);
+ _type = Type.newObjectType(extType);
}
// Use this method if all parameters & return type match
1.7 +4 -9 xml-xalan/java/src/org/apache/xalan/xsltc/compiler/util/ObjectType.java
Index: ObjectType.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/util/ObjectType.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- ObjectType.java 14 Aug 2003 16:27:44 -0000 1.6
+++ ObjectType.java 17 Oct 2003 17:15:15 -0000 1.7
@@ -77,21 +77,16 @@
import org.apache.xml.utils.ObjectFactory;
public final class ObjectType extends Type {
-
+
private String _javaClassName = "java.lang.Object";
private Class _clazz = java.lang.Object.class;
/**
- * Used to represent an 'any' type.
- */
- protected ObjectType() {}
-
- /**
* Used to represent a Java Class type such is required to support
* non-static java functions.
* @param javaClassName name of the class such as 'com.foo.Processor'
*/
- public ObjectType(String javaClassName) {
+ protected ObjectType(String javaClassName) {
_javaClassName = javaClassName;
try {
@@ -103,7 +98,7 @@
}
}
- public ObjectType(Class clazz) {
+ protected ObjectType(Class clazz) {
_clazz = clazz;
_javaClassName = clazz.getName();
}
1.10 +4 -1 xml-xalan/java/src/org/apache/xalan/xsltc/compiler/util/StringType.java
Index: StringType.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/util/StringType.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- StringType.java 30 Jan 2003 18:46:09 -0000 1.9
+++ StringType.java 17 Oct 2003 17:15:15 -0000 1.10
@@ -119,6 +119,9 @@
else if (type == Type.Reference) {
translateTo(classGen, methodGen, (ReferenceType) type);
}
+ else if (type == Type.ObjectString) {
+ // NOP -> same representation
+ }
else {
ErrorMsg err = new ErrorMsg(ErrorMsg.DATA_CONVERSION_ERR,
toString(), type.toString());
1.14 +36 -2 xml-xalan/java/src/org/apache/xalan/xsltc/compiler/util/Type.java
Index: Type.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/util/Type.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- Type.java 30 Jan 2003 18:46:09 -0000 1.13
+++ Type.java 17 Oct 2003 17:15:15 -0000 1.14
@@ -79,7 +79,9 @@
public static final Type ResultTree = new ResultTreeType();
public static final Type Reference = new ReferenceType();
public static final Type Void = new VoidType();
- public static final Type Object = new ObjectType();
+
+ public static final Type Object = new ObjectType(java.lang.Object.class);
+ public static final Type ObjectString = new ObjectType(java.lang.String.class);
public static final Type Node = new NodeType(NodeTest.ANODE);
public static final Type Root = new NodeType(NodeTest.ROOT);
@@ -89,6 +91,38 @@
public static final Type Comment = new NodeType(NodeTest.COMMENT);
public static final Type Processing_Instruction = new NodeType(NodeTest.PI);
+ /**
+ * Factory method to instantiate object types. Returns a pre-defined
+ * instance for "java.lang.Object" and "java.lang.String".
+ */
+ public static Type newObjectType(String javaClassName) {
+ if (javaClassName == "java.lang.Object") {
+ return Type.Object;
+ }
+ else if (javaClassName == "java.lang.String") {
+ return Type.ObjectString;
+ }
+ else {
+ return new ObjectType(javaClassName);
+ }
+ }
+
+ /**
+ * Factory method to instantiate object types. Returns a pre-defined
+ * instance for java.lang.Object.class and java.lang.String.class.
+ */
+ public static Type newObjectType(Class clazz) {
+ if (clazz == java.lang.Object.class) {
+ return Type.Object;
+ }
+ else if (clazz == java.lang.String.class) {
+ return Type.ObjectString;
+ }
+ else {
+ return new ObjectType(clazz);
+ }
+ }
+
/**
* Returns a string representation of this type.
*/
---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org