zongaro     2004/02/23 20:21:22

  Modified:    java/src/org/apache/xalan/xsltc/compiler Step.java
  Log:
  Part of fix for bug report 24985.  The code that resulted for a NodeTest of
  the form "@p:*" or "attribute::p:*" was identical to that for "@*" - in other
  words, the prefix was not being tested.  Fixed this so that
  DOM.getNamespaceAxisIterator is used to create the right kind of iterator.
  
  Reviewed by Morris Kwan (mkwan () ca ! ibm ! com).
  
  Revision  Changes    Path
  1.46      +18 -17    
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Step.java
  
  Index: Step.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Step.java,v
  retrieving revision 1.45
  retrieving revision 1.46
  diff -u -r1.45 -r1.46
  --- Step.java 16 Feb 2004 22:24:29 -0000      1.45
  +++ Step.java 24 Feb 2004 04:21:22 -0000      1.46
  @@ -222,12 +222,23 @@
   
        if (hasPredicates()) {
            translatePredicates(classGen, methodGen);
  -     }
  -     else {
  -         // If it is an attribute but not '@*', '@attr' or '@node()' and
  -         // has no parent
  -         if (_axis == Axis.ATTRIBUTE && _nodeType != NodeTest.ATTRIBUTE &&
  -             _nodeType != NodeTest.ANODE && !hasParentPattern()) 
  +     } else {
  +            int star = 0;
  +            String name = null;
  +            final XSLTC xsltc = getParser().getXSLTC();
  +
  +            if (_nodeType >= DTM.NTYPES) {
  +             final Vector ni = xsltc.getNamesIndex();
  +             
  +                name = (String)ni.elementAt(_nodeType-DTM.NTYPES);
  +                star = name.lastIndexOf('*');
  +            }
  +
  +         // If it is an attribute, but not '@*', '@pre:*' or '@node()',
  +            // and has no parent
  +         if (_axis == Axis.ATTRIBUTE && _nodeType != NodeTest.ATTRIBUTE
  +             && _nodeType != NodeTest.ANODE && !hasParentPattern()
  +                && star == 0)
            {
                int iter = cpg.addInterfaceMethodref(DOM_INTF,
                                                     "getTypedAxisIterator",
  @@ -280,16 +291,6 @@
                il.append(new INVOKEINTERFACE(git, 2));
                break;
            default:
  -             final XSLTC xsltc = getParser().getXSLTC();
  -             final Vector ni = xsltc.getNamesIndex();
  -             String name = null;
  -             int star = 0;
  -             
  -             if (_nodeType >= DTM.NTYPES) {
  -                 name = (String)ni.elementAt(_nodeType-DTM.NTYPES);
  -                 star = name.lastIndexOf('*');
  -             }
  -             
                if (star > 1) {
                    final String namespace;
                    if (_axis == Axis.ATTRIBUTE)
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to