| function assert(b) { |
| if (!b) |
| throw new Error("Assertion failure"); |
| } |
| noInline(assert); |
| |
| function truth() { return true; } |
| noInline(truth); |
| |
| const NUM_LOOPS = 1000; |
| |
| ;(function() { |
| function foo() { |
| let first; |
| let second; |
| class A {}; |
| first = A; |
| if (truth()) { |
| class A {}; |
| second = A; |
| } |
| assert(first !== second); |
| } |
| function baz() { |
| class A { static hello() { return 10; } }; |
| assert(A.hello() === 10); |
| if (truth()) { |
| class A { static hello() { return 20; } }; |
| assert(A.hello() === 20); |
| } |
| assert(A.hello() === 10); |
| } |
| function bar() { |
| class A { static hello() { return 10; } }; |
| let capA = function() { return A; } |
| assert(A.hello() === 10); |
| if (truth()) { |
| class A { static hello() { return 20; } }; |
| let capA = function() { return A; } |
| assert(A.hello() === 20); |
| } |
| assert(A.hello() === 10); |
| } |
| for (let i = 0; i < NUM_LOOPS; i++) { |
| foo(); |
| bar(); |
| baz(); |
| } |
| })(); |