| <p>This page tests whether an exception thrown from an eval inside a closure |
| prematurely tears off the closure'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(); |
| |
| // Create a function with an activation. |
| (function () { |
| var x = 1; |
| |
| // Throw an exception inside an eval that requires a full scope chain. |
| try { |
| eval("(function () { throw 'exception'; })()"); |
| } catch(e) { |
| } |
| |
| // Set "x" by resolving through the activation. |
| (function () { |
| x = 2; |
| })(); |
| |
| // Test the local register for "x", which should have been set to 2 above. |
| shouldBe("x", x, 2); |
| }()); |
| </script> |