[gambit-list] JavaScriptScheme: too much recursion

Marc Feeley feeley at iro.umontreal.ca
Mon Jun 2 15:12:33 EDT 2008


On 2-Jun-08, at 2:05 PM, Catherine Gaudron wrote:

> If I remember correctly, the code works under Safari and Opera (never
> tested it on IE).
> After some testing I was able to compile simple things such as  
> (display
> "hello") by removing the compiler from the run-time, but anything more
> complicated then a simple display will give the too much recursion  
> error.
>
> Catherine


The problem appears to be that the Firefox JavaScript parser is  
overflowing the ***compiler's*** stack.  I verified this with the code  
below.

So one idea would be to modify the JavaScript code generator to  
flatten the code.  I'm not sure how easy this is... it requires a kind  
of lambda lifting of the code.

I'll look into it.

Marc

<script language="JavaScript">

function f(x) { return x+1 }

// This expression works as expected:  alert(f(f(f(f(0)))))

// The following expression gives a "too much recursion" error.
// There is no "recursion" at run time, but possibly some at compile  
time.
// A better error message would be "too much syntactic nesting".  It
// is probable that the Firefox JavaScript front-end (i.e. parser) is
// written in JavaScript and uses recursion, so the JavaScript runtime
// system detects a stack overflow while parsing/compiling the code.
// On Firefox 1.5.0.1 the maximal nesting of calls to f seems to be 344
// which is not much...

alert(
f 
(f 
(f 
(f 
(f 
(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(
f 
(f 
(f 
(f 
(f 
(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(
f 
(f 
(f 
(f 
(f 
(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(
f 
(f 
(f 
(f 
(f 
(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(
f 
(f 
(f 
(f 
(f 
(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(
f 
(f 
(f 
(f 
(f 
(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(
f 
(f 
(f 
(f 
(f 
(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(
f 
(f 
(f 
(f 
(f 
(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(
f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(
0
)))))))))))))))))))))))))
))))))))))))))))))))))))))))))))))))))))
))))))))))))))))))))))))))))))))))))))))
))))))))))))))))))))))))))))))))))))))))
))))))))))))))))))))))))))))))))))))))))
))))))))))))))))))))))))))))))))))))))))
))))))))))))))))))))))))))))))))))))))))
))))))))))))))))))))))))))))))))))))))))
))))))))))))))))))))))))))))))))))))))))
)

</script>




More information about the Gambit-list mailing list