morten      01/06/06 07:32:47

  Modified:    java/src/org/apache/xalan/xsltc/compiler
                        LocationPathPattern.java Parser.java Template.java
  Log:
  Fixed the code that resolves conflicts between templates with identical
  patterns. The order of the templates is not taken into account - after
  import precedence and priority has been checked.
  Submitted by: [EMAIL PROTECTED]
  Reviewed by:  [EMAIL PROTECTED]
  
  Revision  Changes    Path
  1.2       +27 -6     
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/LocationPathPattern.java
  
  Index: LocationPathPattern.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/LocationPathPattern.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- LocationPathPattern.java  2001/04/17 18:51:35     1.1
  +++ LocationPathPattern.java  2001/06/06 14:32:38     1.2
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: LocationPathPattern.java,v 1.1 2001/04/17 18:51:35 sboag Exp $
  + * @(#)$Id: LocationPathPattern.java,v 1.2 2001/06/06 14:32:38 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -71,7 +71,8 @@
       private Template _template;
       private int _importPrecedence;
       private double _priority = Double.NaN;
  -             
  +    private int _position = 0;
  +
       public Type typeCheck(SymbolTable stable) throws TypeCheckError {
        return Type.Void;               // TODO
       }
  @@ -84,6 +85,7 @@
        _template = template;
        _priority = template.getPriority();
        _importPrecedence = template.getImportPrecedence();
  +     _position = template.getPosition();
       }
                
       public Template getTemplate() {
  @@ -97,11 +99,30 @@
       public double getDefaultPriority() {
        return 0.5;
       }
  -             
  +
  +    /**
  +     * This method is used by the Mode class to prioritise patterns and
  +     * template. This method is called for templates that are in the same
  +     * mode and that match on the same core pattern. The rules used are:
  +     *  o) first check precedence - highest precedence wins
  +     *  o) then check priority - highest priority wins
  +     *  o) then check the position - the template that occured last wins
  +     */
       public boolean noSmallerThan(LocationPathPattern other) {
  -     return (_importPrecedence > other._importPrecedence ||
  -             (_importPrecedence == other._importPrecedence &&
  -              getPriority() >= other.getPriority()));
  +     if (_importPrecedence > other._importPrecedence) {
  +         return true;
  +     }
  +     else if (_importPrecedence == other._importPrecedence) {
  +         if (_priority > other._priority) {
  +             return true;
  +         }
  +         else if (_priority == other._priority) {
  +             if (_position > other._position) {
  +                 return true;
  +             }
  +         }
  +     }
  +     return false;
       }
       
       /** return last pattern (matching the current node) */
  
  
  
  1.7       +2 -3      
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Parser.java
  
  Index: Parser.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Parser.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- Parser.java       2001/06/06 10:45:21     1.6
  +++ Parser.java       2001/06/06 14:32:41     1.7
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: Parser.java,v 1.6 2001/06/06 10:45:21 morten Exp $
  + * @(#)$Id: Parser.java,v 1.7 2001/06/06 14:32:41 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -683,12 +683,11 @@
        _template = template;
       }
   
  -    /*
       private int _templateIndex = 0;
  +
       public int getTemplateIndex() {
        return(_templateIndex++);
       }
  -    */
   
       /**
        * Creates a new node in the abstract syntax tree. This node can be
  
  
  
  1.6       +3 -1      
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Template.java
  
  Index: Template.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Template.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- Template.java     2001/06/06 10:45:32     1.5
  +++ Template.java     2001/06/06 14:32:43     1.6
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: Template.java,v 1.5 2001/06/06 10:45:32 morten Exp $
  + * @(#)$Id: Template.java,v 1.6 2001/06/06 14:32:43 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -235,6 +235,8 @@
            else
                _priority = Double.NaN;
        }
  +
  +     _position = parser.getTemplateIndex();
   
        // Add the (named) template to the symbol table
        if (_name != null) {
  
  
  

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

Reply via email to