| function shouldBe(actual, expected) { |
| if (actual !== expected) |
| throw new Error('bad value: ' + actual); |
| } |
| |
| function test(object) |
| { |
| return "hello" in object; |
| } |
| noInline(test); |
| |
| for (var i = 0; i < 1e6; ++i) { |
| shouldBe(test({ |
| hello: 42 |
| }), true); |
| shouldBe(test({ |
| hello: undefined, |
| world: 44 |
| }), true); |
| shouldBe(test({ |
| helloworld: 43, |
| ok: 44 |
| }), false); |
| } |
| |
| function selfCache(object) |
| { |
| return "hello" in object; |
| } |
| noInline(selfCache); |
| |
| var object = {}; |
| object.hello = 42; |
| for (var i = 0; i < 1e6; ++i) |
| shouldBe(selfCache(object), true); |
| object.world = 43; |
| shouldBe(selfCache(object), true); |
| object.world = 43; |
| shouldBe(selfCache({ __proto__: object }), true); |
| delete object.hello; |
| shouldBe(selfCache(object), false); |
| shouldBe(selfCache({ __proto__: object }), false); |