[Webkit-unassigned] [Bug 163663] RangeError with deep self recursion (Proper tail call)
bugzilla-daemon at webkit.org
bugzilla-daemon at webkit.org
Wed Oct 19 13:36:21 PDT 2016
https://bugs.webkit.org/show_bug.cgi?id=163663
--- Comment #2 from Filip Pizlo <fpizlo at apple.com> ---
(In reply to comment #0)
> A RangeError is thrown during a deep self recursion. As stack frames are
> supposed to be reused if a function is called in tail position, this is
> unexpected.
>
> ```
> function decToZero(n) {
> return n>0 ? decToZero(n-1) : n;
> }
>
> decToZero(42280) // yields "RangeError: Maximum call stack size exceeded."
> ```
>
> The depth of recursion necessary to blow the stack is not consistent but
> I've always observed it when n >= 100000.
>
> Hardware:
> MacBook Pro (Retina, 15-inch, Mid 2015)
> 2.5 GHz Intel Core i7
> 16 GB 1600 MHz DDR3
>
> Webkit: Version 10.0 (11602.1.50.0.10, r207529)
Does it work if you write your code this way:
function decToZero(n) {
if (n>0)
return decToZero(n-1);
return n;
}
The bug appears to be that we don't handle ternaries correctly for our evaluation of whether a call is in tail position. It took me a while, but by my reading of http://www.ecma-international.org/ecma-262/6.0/ECMA-262.pdf, on page 265 it appears to say that if the cases of the ternary are tail candidates.
--
You are receiving this mail because:
You are the assignee for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.webkit.org/pipermail/webkit-unassigned/attachments/20161019/4876f036/attachment.html>
More information about the webkit-unassigned
mailing list