santiagopg    02/04/22 09:39:00

  Modified:    java/src/org/apache/xalan/xsltc/compiler Tag:
                        jaxp-ri-1_2_0-fcs-branch Stylesheet.java
  Log:
  Fixed bug in resolveReferences().
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.35.4.3  +25 -4     
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Stylesheet.java
  
  Index: Stylesheet.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Stylesheet.java,v
  retrieving revision 1.35.4.2
  retrieving revision 1.35.4.3
  diff -u -r1.35.4.2 -r1.35.4.3
  --- Stylesheet.java   17 Apr 2002 20:25:26 -0000      1.35.4.2
  +++ Stylesheet.java   22 Apr 2002 16:39:00 -0000      1.35.4.3
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: Stylesheet.java,v 1.35.4.2 2002/04/17 20:25:26 santiagopg Exp $
  + * @(#)$Id: Stylesheet.java,v 1.35.4.3 2002/04/22 16:39:00 santiagopg Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -703,12 +703,31 @@
        return("("+DOM_INTF_SIG+NODE_ITERATOR_SIG+TRANSLET_OUTPUT_SIG+")V");
       }
   
  -
  +    /**
  +     * This method returns a vector with variables in the order in which
  +     * they are to be compiled. The order is determined by the dependencies
  +     * between them. The first step is to close the input vector under
  +     * the dependence relation (this is usually needed when variables are
  +     * defined inside other variables in a RTF).
  +     */
       private Vector resolveReferences(Vector input) {
  -     Vector result = new Vector();
   
  -     int zeroDep = 0;
  +     // Make sure that the vector 'input' is closed
  +     for (int i = 0; i < input.size(); i++) {
  +         final VariableBase var = (VariableBase) input.elementAt(i);
  +         final Vector dep  = var.getDependencies();
  +         final int depSize = (dep != null) ? dep.size() : 0;
  +
  +         for (int j = 0; j < depSize; j++) {
  +             final VariableBase depVar = (VariableBase) dep.elementAt(j);
  +             if (!input.contains(depVar)) {
  +                 input.addElement(depVar);
  +             }
  +         }
  +     }
   
  +     Vector result = new Vector();
  +     int zeroDep = 0;
        while (input.size() > 0) {
            boolean changed = false;
            for (int i = 0; i < input.size(); ) {
  @@ -728,6 +747,8 @@
                    i++;
                }
            }
  +
  +
            // If nothing was changed in this pass then we have a circular ref
            if (!changed) {
                ErrorMsg err = new ErrorMsg(ErrorMsg.CIRCULAR_VARIABLE_ERR,
  
  
  

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

Reply via email to