| function assert(cond) { |
| if (!cond) |
| throw new Error("broke assertion"); |
| } |
| noInline(assert); |
| function shouldThrowInvalidConstAssignment(f) { |
| var threw = false; |
| try { |
| f(); |
| } catch(e) { |
| if (e.name.indexOf("TypeError") !== -1 && e.message.indexOf("readonly") !== -1) |
| threw = true; |
| } |
| assert(threw); |
| } |
| noInline(shouldThrowInvalidConstAssignment); |
| |
| |
| function makeObj() { |
| return {foo: 20}; |
| } |
| noInline(makeObj); |
| |
| let foo = "foo"; |
| const bar = "bar"; |
| |
| for (var i = 0; i < 100; i++) { |
| with (makeObj()) { |
| assert(foo === 20); |
| assert(bar === "bar"); |
| shouldThrowInvalidConstAssignment(function() { bar = 20; }); |
| } |
| } |