tmiller 2002/07/25 04:45:28
Modified: java/src/org/apache/xalan/xsltc/compiler/util NodeType.java
ReferenceType.java StringType.java Type.java
java/src/org/apache/xalan/xsltc/dom AbsoluteIterator.java
java/src/org/apache/xalan/xsltc/runtime
AbstractTranslet.java
Log:
bug fix 10837, support of ext java functions
Revision Changes Path
1.8 +14 -1
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/util/NodeType.java
Index: NodeType.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/util/NodeType.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- NodeType.java 1 Feb 2002 20:08:11 -0000 1.7
+++ NodeType.java 25 Jul 2002 11:45:28 -0000 1.8
@@ -129,6 +129,9 @@
else if (type == Type.Reference) {
translateTo(classGen, methodGen, (ReferenceType) type);
}
+ else if (type == Type.Object) {
+ translateTo(classGen, methodGen, (ObjectType) type);
+ }
else {
ErrorMsg err = new ErrorMsg(ErrorMsg.DATA_CONVERSION_ERR,
toString(), type.toString());
@@ -225,6 +228,16 @@
final int init = cpg.addMethodref(SINGLETON_ITERATOR, "<init>",
"(" + NODE_SIG +")V");
il.append(new INVOKESPECIAL(init));
+ }
+
+ /**
+ * Subsume Node into ObjectType.
+ *
+ * @see org.apache.xalan.xsltc.compiler.util.Type#translateTo
+ */
+ public void translateTo(ClassGenerator classGen, MethodGenerator
methodGen,
+ ObjectType type) {
+ methodGen.getInstructionList().append(NOP);
}
/**
1.10 +15 -1
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/util/ReferenceType.java
Index: ReferenceType.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/util/ReferenceType.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- ReferenceType.java 29 Apr 2002 18:32:30 -0000 1.9
+++ ReferenceType.java 25 Jul 2002 11:45:28 -0000 1.10
@@ -116,6 +116,9 @@
else if (type == Type.ResultTree) {
translateTo(classGen, methodGen, (ResultTreeType) type);
}
+ else if (type == Type.Object) {
+ translateTo(classGen, methodGen, (ObjectType) type);
+ }
else {
ErrorMsg err = new ErrorMsg(ErrorMsg.INTERNAL_ERR, type.toString());
classGen.getParser().reportError(Constants.FATAL, err);
@@ -225,6 +228,17 @@
int index = cpg.addMethodref(BASIS_LIBRARY_CLASS,
"referenceToResultTree",
"(" + OBJECT_SIG + ")" + DOM_INTF_SIG);
il.append(new INVOKESTATIC(index));
+ }
+
+
+ /**
+ * Subsume reference into ObjectType.
+ *
+ * @see org.apache.xalan.xsltc.compiler.util.Type#translateTo
+ */
+ public void translateTo(ClassGenerator classGen, MethodGenerator
methodGen,
+ ObjectType type) {
+ methodGen.getInstructionList().append(NOP);
}
/**
1.6 +22 -5
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.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- StringType.java 1 Feb 2002 20:08:11 -0000 1.5
+++ StringType.java 25 Jul 2002 11:45:28 -0000 1.6
@@ -182,7 +182,8 @@
* @see org.apache.xalan.xsltc.compiler.util.Type#translateFrom
*/
public void translateTo(ClassGenerator classGen, MethodGenerator
methodGen,
- Class clazz) {
+ Class clazz)
+ {
if (clazz.getName().equals("java.lang.String")) {
// same internal representation
methodGen.getInstructionList().append(NOP);
@@ -199,9 +200,25 @@
*
* @see org.apache.xalan.xsltc.compiler.util.Type#translateFrom
*/
- public void translateFrom(ClassGenerator classGen, MethodGenerator
methodGen,
- Class clazz) {
- translateTo(classGen, methodGen, clazz);
+ public void translateFrom(ClassGenerator classGen,
+ MethodGenerator methodGen, Class clazz)
+ {
+ final ConstantPoolGen cpg = classGen.getConstantPool();
+ final InstructionList il = methodGen.getInstructionList();
+
+ if (clazz.getName().equals("java.lang.String")) {
+ // same internal representation, convert null to ""
+ il.append(DUP);
+ final BranchHandle ifNonNull = il.append(new IFNONNULL(null));
+ il.append(POP);
+ il.append(new PUSH(cpg, ""));
+ ifNonNull.setTarget(il.append(NOP));
+ }
+ else {
+ ErrorMsg err = new ErrorMsg(ErrorMsg.DATA_CONVERSION_ERR,
+ toString(), clazz.getName());
+ classGen.getParser().reportError(Constants.FATAL, err);
+ }
}
/**
1.11 +2 -1
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.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- Type.java 28 Jun 2002 15:09:57 -0000 1.10
+++ Type.java 25 Jul 2002 11:45:28 -0000 1.11
@@ -79,6 +79,7 @@
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 Node = new NodeType(NodeTest.ANODE);
public static final Type Root = new NodeType(NodeTest.ROOT);
1.7 +8 -3
xml-xalan/java/src/org/apache/xalan/xsltc/dom/AbsoluteIterator.java
Index: AbsoluteIterator.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/AbsoluteIterator.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- AbsoluteIterator.java 4 Dec 2001 10:30:07 -0000 1.6
+++ AbsoluteIterator.java 25 Jul 2002 11:45:28 -0000 1.7
@@ -83,11 +83,16 @@
_source.setRestartable(isRestartable);
}
+ int _mask = -1;
+
public NodeIterator setStartNode(int node) {
- _startNode = DOM.ROOTNODE;
+ if (_mask == -1) {
+ _mask = node & 0xFF000000;
+ }
+ _startNode = _mask | DOM.ROOTNODE;
if (_isRestartable) {
resetPosition();
- return _source.setStartNode(_startNode = DOM.ROOTNODE);
+ return _source.setStartNode(_startNode = _mask | DOM.ROOTNODE);
}
return reset();
}
1.42 +9 -1
xml-xalan/java/src/org/apache/xalan/xsltc/runtime/AbstractTranslet.java
Index: AbstractTranslet.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/runtime/AbstractTranslet.java,v
retrieving revision 1.41
retrieving revision 1.42
diff -u -r1.41 -r1.42
--- AbstractTranslet.java 20 Jun 2002 12:20:57 -0000 1.41
+++ AbstractTranslet.java 25 Jul 2002 11:45:28 -0000 1.42
@@ -615,4 +615,12 @@
if (_auxClasses == null) return null;
return((Class)_auxClasses.get(className));
}
+
+ // GTM added (see pg 110)
+ public String[] getNamesArray() {
+ return namesArray;
+ }
+ public String[] getNamespaceArray() {
+ return namespaceArray;
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]