Created
September 26, 2011 21:42
-
-
Save t0yv0/1243491 to your computer and use it in GitHub Desktop.
Illustrates a Firefox JavaScript engine bug - failure to process nested closures.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/// 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) | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/// 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