<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>