Skip to content

Instantly share code, notes, and snippets.

@t0yv0
Created September 26, 2011 21:42
Show Gist options
  • Save t0yv0/1243491 to your computer and use it in GitHub Desktop.
Save t0yv0/1243491 to your computer and use it in GitHub Desktop.
Illustrates a Firefox JavaScript engine bug - failure to process nested closures.
/// generated JavaScript for k=16
function bind(x,f) {return f(x)}
function test(x0) {
var k0;
k0 = function (x1) {
var k1;
k1 = function (x2) {
var k2;
k2 = function (x3) {
var k3;
k3 = function (x4) {
var k4;
k4 = function (x5) {
var k5;
k5 = function (x6) {
var k6;
k6 = function (x7) {
var k7;
k7 = function (x8) {
var k8;
k8 = function (x9) {
var k9;
k9 = function (x10) {
var k10;
k10 = function (x11) {
var k11;
k11 = function (x12) {
var k12;
k12 = function (x13) {
var k13;
k13 = function (x14) {
var k14;
k14 = function (x15) {
var k15;
k15 = function (x16) {
var k16;
k16 = function (x17) {
return x16 + 1;
};
return bind(x16,k16)
};
return bind(x15,k15)
};
return bind(x14,k14)
};
return bind(x13,k13)
};
return bind(x12,k12)
};
return bind(x11,k11)
};
return bind(x10,k10)
};
return bind(x9,k9)
};
return bind(x8,k8)
};
return bind(x7,k7)
};
return bind(x6,k6)
};
return bind(x5,k5)
};
return bind(x4,k4)
};
return bind(x3,k3)
};
return bind(x2,k2)
};
return bind(x1,k1)
};
return bind(x0,k0)
}
/// Generates JavaScript test code, function test, with k nested closures.
let gen (k: int) =
use w = new System.IO.StringWriter()
w.WriteLine "function bind(x,f) {return f(x)}"
w.WriteLine "function test(x0) {"
for i = 0 to k do
w.WriteLine("var k{0};", i)
w.WriteLine("k{0} = function (x{1}) {{", i, i + 1)
w.WriteLine("return x{0} + 1;", k)
for i = k downto 0 do
w.WriteLine "};"
w.WriteLine("return bind(x{0},k{0})", i)
w.WriteLine "}"
w.ToString()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment