morten      01/05/17 04:05:43

  Modified:    java/src/org/apache/xalan/xsltc/compiler Variable.java
  Log:
  Added code that resolved import precedence for multiple declarations of the
  same global variable/parameter. This fix would not have had any effect
  without the previous, recent fix for bug 1487 (in Stylesheet.java).
  PR:           bugzilla 1408 (related and dependent on fix for 1487)
  Obtained from:        n/a
  Submitted by: [EMAIL PROTECTED]
  Reviewed by:  [EMAIL PROTECTED]
  
  Revision  Changes    Path
  1.3       +22 -4     
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Variable.java
  
  Index: Variable.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Variable.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- Variable.java     2001/05/02 10:25:15     1.2
  +++ Variable.java     2001/05/17 11:05:38     1.3
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: Variable.java,v 1.2 2001/05/02 10:25:15 morten Exp $
  + * @(#)$Id: Variable.java,v 1.3 2001/05/17 11:05:38 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -196,7 +196,7 @@
            ErrorMsg error = new ErrorMsg(ErrorMsg.VARREDEF_ERR, _name, this);
            parser.addError(error);
        }
  -     
  +
        final String select = element.getAttribute("select");
        if (select.length() > 0) {
            _select = parser.parseExpression(this, element, "select");
  @@ -206,11 +206,29 @@
        parseChildren(element, parser);
   
        // Add a ref to this var to its enclosing construct
  -     final SyntaxTreeNode parent = getParent();
  +     SyntaxTreeNode parent = getParent();
        if (parent instanceof Stylesheet) {
  +         // Mark this as a global variable
            _isLocal = false;
  +         // Check if a global variable with this name already exists...
  +         Variable var = parser.getSymbolTable().lookupVariable(_name);
  +         // ...and if it does we need to check import precedence
  +         if (var != null) {
  +             final int us = this.getImportPrecedence();
  +             final int them = var.getImportPrecedence();
  +             // It is an error if the two have the same import precedence
  +             if (us == them) {
  +                 ErrorMsg error =
  +                     new ErrorMsg(ErrorMsg.VARREDEF_ERR, _name, this);
  +                 parser.addError(error);
  +             }
  +             // Ignore this if previous definition has higher precedence
  +             else if (them > us) {
  +                 return;
  +             }
  +             // Add this variable if we have higher precedence
  +         }
            ((Stylesheet)parent).addVariable(this);
  -         //!! check for redef
            parser.getSymbolTable().addVariable(this);
        }
        else {
  
  
  

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

Reply via email to