Re: [xsl] tough problem: infinit loop caused by XSL recusive call

Subject: Re: [xsl] tough problem: infinit loop caused by XSL recusive call
From: tcn@xxxxxxxxxxxxx (Trevor Nash)
Date: Fri, 18 May 2001 18:50:00 GMT
On Fri, 18 May 2001 12:03:04 -0400, you wrote:

>Hi,
>
>1. I try to transform a XML file to a text file by using transform class of
>xalan 2.0.
>2. I call the following template with countLoop select="14" that cause the
>infinite loop and stack overflow,
>however if I set select="8" it works fine.
Why do you sy 'infinite'?  Does it take a long time in comparison to
the 8-iteration version?  I am guessing not.

>
>3. Does anyone know how to the reason?
Your template calls itself, so Xalan may be using recursion at the
java level too, hence using a stack frame for every call.

>How to fix it?
Most XSL processors try to do what is called tail recursion
elimination.  Basically this means implementing the recursive call as
a loop instead.  The catch is, this is only possible for certain forms
of code, usually where the recursive call is at the end of the
template body.  Though this is the case with your example, you may
have "hidden" it from Xalan: you might try restructuring the code so
that instead of

     <template>
          <stuff>
          <if x<= limit>
               <more stuff>
               <call (x+1)>
          </if>
     </template>

you do

     <template>
          <stuff>
          <more stuff>
          <if x< limit>
               <call (x+1)>
          </if>
     </template>

The idea is that you make it more obvious to Xalan that the recursive
call can be replaced by a jump to the beginning of the template.

I must say I am guessing here as I do not know the optimisation
algorithms which Xalan uses.

Or you could try a different XSLT processor which may optimise your
code better, e.g. Saxon (no offence intended to the Xalan folk or any
other processor writers - Saxon happens to be the one that I know can
handle things like this).  Mike Kay might tell us if you still have to
do the restructuring.

> Is there any
>properties file which define the default stack size for xalan 2.0?
>
It should not need anything specific to Xalan - look at your JVM docs
to see how to increase stack/heap size.

Hope this helps.

Trevor Nash

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread