| var symbol1 = Symbol(); |
| var symbol2 = Object.getOwnPropertySymbols({ [symbol1]: 42 })[0]; |
| |
| function shouldBe(actual, expected) { |
| if (actual !== expected) |
| throw new Error('bad value: ' + actual); |
| } |
| |
| function getByVal(object, name) |
| { |
| return object[name]; |
| } |
| noInline(getByVal); |
| |
| function getSym1() |
| { |
| return symbol1; |
| } |
| noInline(getSym1); |
| |
| function getSym2() |
| { |
| return symbol2; |
| } |
| noInline(getSym2); |
| |
| var object = { |
| [symbol1]: 42, |
| hello: 50 |
| }; |
| |
| for (var i = 0; i < 100; ++i) |
| shouldBe(getByVal(object, i % 2 === 0 ? getSym1() : getSym2()), 42); |
| shouldBe(getByVal(object, 'hello'), 50); |
| |
| for (var i = 0; i < 10000; ++i) |
| shouldBe(getByVal(object, i % 2 === 0 ? getSym1() : getSym2()), 42); |
| shouldBe(getByVal(object, 'hello'), 50); |