41 lines
1.1 KiB
HTML
41 lines
1.1 KiB
HTML
<p>This page tests whether an exception thrown from a function that has lazily
|
|
constructed an activation properly tears off the function's activation.
|
|
</p>
|
|
<p>If the test passes, you'll see a PASS message below.
|
|
</p>
|
|
<pre id="console"></pre>
|
|
|
|
<script>
|
|
function log(s)
|
|
{
|
|
document.getElementById("console").appendChild(document.createTextNode(s + "\n"));
|
|
}
|
|
|
|
function shouldBe(aDescription, a, b)
|
|
{
|
|
if (a === b) {
|
|
log("PASS: " + aDescription + " should be " + b + " and is.");
|
|
} else {
|
|
log("FAIL: " + aDescription + " should be " + b + " but instead is " + a + ".");
|
|
}
|
|
}
|
|
|
|
if (window.testRunner)
|
|
testRunner.dumpAsText();
|
|
|
|
try {
|
|
// Lazily create an activation for a function that otherwise wouldn't need one, then throw.
|
|
(function f(x) {
|
|
throw f.arguments;
|
|
}(1));
|
|
} catch(args) {
|
|
// Call another function to overwrite the stack.
|
|
(function (a, b, c, d, e, f, g, h, i, j, k, l) { })();
|
|
|
|
// Test whether args's activation was properly torn off. If it wasn't, the
|
|
// previous call should have clobbered its data.
|
|
shouldBe("args[0]", args[0], 1);
|
|
}
|
|
|
|
</script>
|