| function shouldBe(actual, expected) { |
| if (actual !== expected) |
| throw new Error('bad value: ' + actual); |
| } |
| |
| function testAttribute(object, name, type) { |
| shouldBe(Reflect.has(object, name), true); |
| let desc = Reflect.getOwnPropertyDescriptor(object, name); |
| shouldBe(desc.configurable, true); |
| shouldBe(desc.enumerable, true); |
| if (type === 'get') { |
| shouldBe(typeof desc.get, 'function'); |
| shouldBe(typeof desc.set, 'undefined'); |
| } else if (type === 'set') { |
| shouldBe(typeof desc.get, 'undefined'); |
| shouldBe(typeof desc.set, 'function'); |
| } else { |
| shouldBe(typeof desc.get, 'function'); |
| shouldBe(typeof desc.set, 'function'); |
| } |
| } |
| noInline(testAttribute); |
| |
| function getter(name) |
| { |
| var object = { |
| get hello() { |
| return this.ok; |
| }, |
| [name]: 42 |
| }; |
| |
| testAttribute(object, 'hello', 'get'); |
| return object.hello; |
| } |
| noInline(getter); |
| |
| for (var i = 0; i < 10000; ++i) |
| shouldBe(getter('ok'), 42); |