santiagopg    2002/06/08 07:04:01

  Modified:    java/src/org/apache/xalan/xsltc/runtime
                        AbstractTranslet.java BasisLibrary.java
  Log:
  Fixed memory leak in AbstractTranslet and moved replace() method
  to BasisLibrary.
  
  Revision  Changes    Path
  1.37      +31 -37    
xml-xalan/java/src/org/apache/xalan/xsltc/runtime/AbstractTranslet.java
  
  Index: AbstractTranslet.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/runtime/AbstractTranslet.java,v
  retrieving revision 1.36
  retrieving revision 1.37
  diff -u -r1.36 -r1.37
  --- AbstractTranslet.java     21 May 2002 15:13:25 -0000      1.36
  +++ AbstractTranslet.java     8 Jun 2002 14:04:00 -0000       1.37
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: AbstractTranslet.java,v 1.36 2002/05/21 15:13:25 santiagopg Exp $
  + * @(#)$Id: AbstractTranslet.java,v 1.37 2002/06/08 14:04:00 santiagopg Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -103,6 +103,25 @@
       // Use one empty string instead of constantly instanciating String("");
       private final static String EMPTYSTRING = "";
   
  +    
  +    /************************************************************************
  +     * Debugging
  +     ************************************************************************/
  +    public void printInternalState() {
  +     System.out.println("-------------------------------------");
  +     System.out.println("AbstractTranslet this = " + this);
  +     System.out.println("vbase = " + vbase);
  +     System.out.println("vframe = " + vframe);
  +     System.out.println("varsStack.size() = " + varsStack.size());
  +     System.out.println("pbase = " + pbase);
  +     System.out.println("vframe = " + pframe);
  +     System.out.println("paramsStack.size() = " + paramsStack.size());
  +     System.out.println("namesArray.size = " + namesArray.length);
  +     System.out.println("namespaceArray.size = " + namespaceArray.length);
  +     System.out.println("");
  +     System.out.println("Total memory = " + Runtime.getRuntime().totalMemory());
  +    }
  +
       /**
        * Wrap the initial input DOM in a dom adapter. This adapter is wrapped in
        * a DOM multiplexer if the document() function is used (handled by compiled
  @@ -144,8 +163,8 @@
       public final void popParamFrame() {
        if (pbase > 0) {
            final int oldpbase = ((Integer)paramsStack.get(--pbase)).intValue();
  -         for (int i = pbase; i < pframe; i++) {
  -             paramsStack.set(i, null);       // for the GC
  +         for (int i = pframe - 1; i >= pbase; i--) {
  +             paramsStack.remove(i);
            }
            pframe = pbase; pbase = oldpbase;
        }
  @@ -155,10 +174,9 @@
        * Add a new global parameter if not already in the current frame.
        */
       public final Object addParameter(String name, Object value) {
  -     String parName = new String(name);
  -     parName = replace(parName, '.', "$dot$");
  -     parName = replace(parName, '-', "$dash$");
  -     return addParameter(parName, value, false);
  +     name = BasisLibrary.replace(name, ".-", 
  +                                 new String[] { "$dot$", "$dash$" });
  +     return addParameter(name, value, false);
       }
   
       /**
  @@ -167,16 +185,17 @@
        * default value from the <xsl:parameter> element's select attribute or
        * element body.
        */
  -    public final Object addParameter(String name, Object value,
  -                                  boolean isDefault) {
  -
  +    public final Object addParameter(String name, Object value, 
  +     boolean isDefault) 
  +    {
        // Local parameters need to be re-evaluated for each iteration
        for (int i = pframe - 1; i >= pbase; i--) {
            final Parameter param = (Parameter) paramsStack.get(i);
  +
            if (param._name.equals(name)) {
                // Only overwrite if current value is the default value and
                // the new value is _NOT_ the default value.
  -             if ((param._isDefault == true) || (!isDefault)) {
  +             if (param._isDefault || !isDefault) {
                    param._value = value;
                    param._isDefault = isDefault;
                    return value;
  @@ -186,8 +205,7 @@
        }
   
        // Add new parameter to parameter stack
  -     final Parameter param = new Parameter(name, value, isDefault);
  -     paramsStack.add(pframe++, param);
  +     paramsStack.add(pframe++, new Parameter(name, value, isDefault));
        return value;
       }
   
  @@ -250,30 +268,6 @@
        */
       public final void addVariable(int vindex, Object value) {
        varsStack.set(vbase + vindex, value);
  -    }
  -
  -    /**
  -     * Replace a certain character in a string with a new substring.
  -     */
  -    private static String replace(String base, char c, String str) {
  -     final int len = base.length() - 1;
  -     int pos;
  -     while ((pos = base.indexOf(c)) > -1) {
  -         if (pos == 0) {
  -             final String after = base.substring(1);
  -             base = str + after;
  -         }
  -         else if (pos == len) {
  -             final String before = base.substring(0, pos);
  -             base = before + str;
  -         }
  -         else {
  -             final String before = base.substring(0, pos);
  -             final String after = base.substring(pos+1);
  -             base = before + str + after;
  -         }
  -     }
  -     return base;
       }
   
       /************************************************************************
  
  
  
  1.40      +27 -1     
xml-xalan/java/src/org/apache/xalan/xsltc/runtime/BasisLibrary.java
  
  Index: BasisLibrary.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/runtime/BasisLibrary.java,v
  retrieving revision 1.39
  retrieving revision 1.40
  diff -u -r1.39 -r1.40
  --- BasisLibrary.java 5 Jun 2002 20:23:14 -0000       1.39
  +++ BasisLibrary.java 8 Jun 2002 14:04:00 -0000       1.40
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: BasisLibrary.java,v 1.39 2002/06/05 20:23:14 tmiller Exp $
  + * @(#)$Id: BasisLibrary.java,v 1.40 2002/06/08 14:04:00 santiagopg Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -1073,6 +1073,32 @@
   
       public static void consoleOutput(String msg) {
        System.out.println(msg);
  +    }
  +
  +    /**
  +     * Replace a certain character in a string with a new substring.
  +     */
  +    public static String replace(String base, char ch, String str) {
  +     return (base.indexOf(ch) < 0) ? base : 
  +         replace(base, String.valueOf(ch), new String[] { str });
  +    }
  +
  +    public static String replace(String base, String delim, String[] str) {
  +     final int len = base.length();
  +     final StringBuffer result = new StringBuffer();
  +
  +     for (int i = 0; i < len; i++) {
  +         final char ch = base.charAt(i);
  +         final int k = delim.indexOf(ch);
  +
  +         if (k >= 0) {
  +             result.append(str[k]);
  +         }
  +         else {
  +             result.append(ch);
  +         }
  +     }
  +     return result.toString();
       }
   
       //-- End utility functions
  
  
  

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

Reply via email to