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]

Reply via email to