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); |