jkesselm    02/05/14 13:33:18

  Modified:    java/src/org/apache/xalan/templates ElemVariable.java
  Log:
  Bugzilla 7118: Variable set via RTF may have
  local variables within it; need to push a new
  context.
  
  (This anonymous-pseudotemplate thing has
  caused us more confusion....)
  
  Revision  Changes    Path
  1.18      +15 -6     xml-xalan/java/src/org/apache/xalan/templates/ElemVariable.java
  
  Index: ElemVariable.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/templates/ElemVariable.java,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- ElemVariable.java 29 Mar 2002 15:22:12 -0000      1.17
  +++ ElemVariable.java 14 May 2002 20:33:18 -0000      1.18
  @@ -280,6 +280,7 @@
         transformer.getTraceManager().fireTraceEvent(this);
   
       int sourceNode = transformer.getXPathContext().getCurrentNode();
  +  
       XObject var = getValue(transformer, sourceNode);
   
       // transformer.getXPathContext().getVarStack().pushVariable(m_qname, var);
  @@ -307,7 +308,7 @@
       XPathContext xctxt = transformer.getXPathContext();
   
       xctxt.pushCurrentNode(sourceNode);
  -
  + 
       try
       {
         if (null != m_selectPattern)
  @@ -333,16 +334,24 @@
           // so they aren't popped off the stack on return from a template.
           int df;
   
  -         if(m_parentNode instanceof Stylesheet) // Global variable
  -             df = transformer.transformToGlobalRTF(this);
  -         else        
  -             df = transformer.transformToRTF(this);
  +             // Bugzilla 7118: A variable set via an RTF may create local
  +             // variables during that computation. To keep them from overwriting
  +             // variables at this level, push a new variable stack.
  +             try
  +             {
  +                     xctxt.getVarStack().link(0);
  +                     if(m_parentNode instanceof Stylesheet) // Global variable
  +                             df = transformer.transformToGlobalRTF(this);
  +                     else
  +                             df = transformer.transformToRTF(this);
  +     }
  +             finally{ xctxt.getVarStack().unlink(); }
   
           var = new XRTreeFrag(df, xctxt, this);
         }
       }
       finally
  -    {
  +    {      
         xctxt.popCurrentNode();
       }
   
  
  
  

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

Reply via email to