morten 01/06/11 05:53:29
Modified: java/src/org/apache/xalan/xsltc/compiler Constants.java
UseAttributeSets.java ValueOf.java
XslAttribute.java
java/src/org/apache/xalan/xsltc/compiler/util
AttributeSetMethodGenerator.java
Log:
Fix to allow iterator access within attribute sets. This is necessary for
attribute sets that contain attributes whose values are generated by XSL
functions such as position() and last().
Obtained from: test mk013
Submitted by: [EMAIL PROTECTED]
Reviewed by: [EMAIL PROTECTED]
Revision Changes Path
1.7 +2 -2
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Constants.java
Index: Constants.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Constants.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- Constants.java 2001/06/11 12:03:30 1.6
+++ Constants.java 2001/06/11 12:52:55 1.7
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: Constants.java,v 1.6 2001/06/11 12:03:30 morten Exp $
+ * @(#)$Id: Constants.java,v 1.7 2001/06/11 12:52:55 morten Exp $
*
* The Apache Software License, Version 1.1
*
@@ -334,7 +334,7 @@
= "reset";
public static final String ATTR_SET_SIG
- = "(" + TRANSLET_OUTPUT_SIG + ")V";
+ = "(" + TRANSLET_OUTPUT_SIG + NODE_ITERATOR_SIG + ")V";
public static final String GET_NODE_NAME_SIG
= "(" + NODE_SIG + ")" + STRING_SIG;
1.4 +2 -1
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/UseAttributeSets.java
Index: UseAttributeSets.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/UseAttributeSets.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- UseAttributeSets.java 2001/06/11 12:03:35 1.3
+++ UseAttributeSets.java 2001/06/11 12:52:58 1.4
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: UseAttributeSets.java,v 1.3 2001/06/11 12:03:35 morten Exp $
+ * @(#)$Id: UseAttributeSets.java,v 1.4 2001/06/11 12:52:58 morten Exp $
*
* The Apache Software License, Version 1.1
*
@@ -134,6 +134,7 @@
final String methodName = attrs.getMethodName();
il.append(classGen.loadTranslet());
il.append(methodGen.loadHandler());
+ il.append(methodGen.loadIterator());
final int method = cpg.addMethodref(classGen.getClassName(),
methodName, ATTR_SET_SIG);
il.append(new INVOKESPECIAL(method));
1.4 +3 -2
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/ValueOf.java
Index: ValueOf.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/ValueOf.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- ValueOf.java 2001/06/06 10:45:37 1.3
+++ ValueOf.java 2001/06/11 12:53:02 1.4
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: ValueOf.java,v 1.3 2001/06/06 10:45:37 morten Exp $
+ * @(#)$Id: ValueOf.java,v 1.4 2001/06/11 12:53:02 morten Exp $
*
* The Apache Software License, Version 1.1
*
@@ -95,7 +95,8 @@
}
public Type typeCheck(SymbolTable stable) throws TypeCheckError {
- if (_select.typeCheck(stable).identicalTo(Type.String) == false)
+ Type type = _select.typeCheck(stable);
+ if ((type != null) && (type.identicalTo(Type.String) == false))
_select = new CastExpr(_select, Type.String);
return Type.Void;
}
1.7 +16 -3
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/XslAttribute.java
Index: XslAttribute.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/XslAttribute.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- XslAttribute.java 2001/06/11 12:03:38 1.6
+++ XslAttribute.java 2001/06/11 12:53:05 1.7
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: XslAttribute.java,v 1.6 2001/06/11 12:03:38 morten Exp $
+ * @(#)$Id: XslAttribute.java,v 1.7 2001/06/11 12:53:05 morten Exp $
*
* The Apache Software License, Version 1.1
*
@@ -71,20 +71,26 @@
import org.apache.xalan.xsltc.compiler.util.*;
final class XslAttribute extends Instruction {
+
+ // Error messages:
+ private final static String ILLEGAL_ATTRIBUTE_NAME =
+ "Illegal attribute name: 'xmlns'";
+
+ // Attribute contents
private AttributeValue _name; // name treated as AVT (7.1.3)
private AttributeValueTemplate _namespace = null;
private String _prefix;
private boolean _ignore = false;
/**
- *
+ * Returns the name of the attribute
*/
public AttributeValue getName() {
return _name;
}
/**
- *
+ * Displays the contents of the attribute
*/
public void display(int indent) {
indent(indent);
@@ -166,6 +172,13 @@
stable,false);
}
}
+ }
+
+ if (name.equals("xmlns")) {
+ final ErrorMsg msg =
+ new ErrorMsg(ILLEGAL_ATTRIBUTE_NAME, getLineNumber());
+ parser.reportError(Constants.ERROR, msg);
+ return;
}
if (parent instanceof LiteralElement) {
1.2 +20 -5
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/util/AttributeSetMethodGenerator.java
Index: AttributeSetMethodGenerator.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/util/AttributeSetMethodGenerator.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- AttributeSetMethodGenerator.java 2001/04/17 18:52:12 1.1
+++ AttributeSetMethodGenerator.java 2001/06/11 12:53:23 1.2
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: AttributeSetMethodGenerator.java,v 1.1 2001/04/17 18:52:12 sboag
Exp $
+ * @(#)$Id: AttributeSetMethodGenerator.java,v 1.2 2001/06/11 12:53:23
morten Exp $
*
* The Apache Software License, Version 1.1
*
@@ -71,18 +71,23 @@
public final class AttributeSetMethodGenerator extends MethodGenerator {
private static int HANDLER_INDEX = 1;
+ private static int ITERATOR_INDEX = 2;
private static final de.fub.bytecode.generic.Type[] argTypes =
- new de.fub.bytecode.generic.Type[1];
- private static final String[] argNames = new String[1];
+ new de.fub.bytecode.generic.Type[2];
+ private static final String[] argNames = new String[2];
static {
argTypes[0] = Util.getJCRefType(TRANSLET_OUTPUT_SIG);
argNames[0] = TRANSLET_OUTPUT_PNAME;
+ argTypes[1] = Util.getJCRefType(NODE_ITERATOR_SIG);
+ argNames[1] = ITERATOR_PNAME;
}
private final Instruction _astoreHandler;
private final Instruction _aloadHandler;
+ private final Instruction _astoreIterator;
+ private final Instruction _aloadIterator;
public AttributeSetMethodGenerator(String methodName, ClassGen classGen)
{
super(de.fub.bytecode.Constants.ACC_PRIVATE,
@@ -94,10 +99,20 @@
_astoreHandler = new ASTORE(HANDLER_INDEX);
_aloadHandler = new ALOAD(HANDLER_INDEX);
+ _astoreIterator = new ASTORE(ITERATOR_INDEX);
+ _aloadIterator = new ALOAD(ITERATOR_INDEX);
}
+ public Instruction storeIterator() {
+ return _astoreIterator;
+ }
+
+ public Instruction loadIterator() {
+ return _aloadIterator;
+ }
+
public int getIteratorIndex() {
- return INVALID_INDEX; // not available
+ return ITERATOR_INDEX;
}
public Instruction storeHandler() {
@@ -109,6 +124,6 @@
}
public int getLocalIndex(String name) {
- return INVALID_INDEX; // not available
+ return INVALID_INDEX; // not available
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]