| // Copyright 2014 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // Flags: --allow-natives-syntax |
| |
| |
| function ID(x) { |
| return x; |
| } |
| |
| |
| (function TestComputedMethodSuper() { |
| var proto = { |
| m() { |
| return ' proto m'; |
| } |
| }; |
| var object = { |
| __proto__: proto, |
| ['a']() { return 'a' + super.m(); }, |
| [ID('b')]() { return 'b' + super.m(); }, |
| [0]() { return '0' + super.m(); }, |
| [ID(1)]() { return '1' + super.m(); }, |
| }; |
| |
| assertSame(object, object.a[%HomeObjectSymbol()]); |
| |
| assertEquals('a proto m', object.a()); |
| assertEquals('b proto m', object.b()); |
| assertEquals('0 proto m', object[0]()); |
| assertEquals('1 proto m', object[1]()); |
| })(); |
| |
| |
| (function TestComputedGetterSuper() { |
| var proto = { |
| m() { |
| return ' proto m'; |
| } |
| }; |
| var object = { |
| __proto__: proto, |
| get ['a']() { return 'a' + super.m(); }, |
| get [ID('b')]() { return 'b' + super.m(); }, |
| get [0]() { return '0' + super.m(); }, |
| get [ID(1)]() { return '1' + super.m(); }, |
| }; |
| assertEquals('a proto m', object.a); |
| assertEquals('b proto m', object.b); |
| assertEquals('0 proto m', object[0]); |
| assertEquals('1 proto m', object[1]); |
| })(); |
| |
| |
| (function TestComputedSetterSuper() { |
| var value; |
| var proto = { |
| m(name, v) { |
| value = name + ' ' + v; |
| } |
| }; |
| var object = { |
| __proto__: proto, |
| set ['a'](v) { super.m('a', v); }, |
| set [ID('b')](v) { super.m('b', v); }, |
| set [0](v) { super.m('0', v); }, |
| set [ID(1)](v) { super.m('1', v); }, |
| }; |
| object.a = 2; |
| assertEquals('a 2', value); |
| object.b = 3; |
| assertEquals('b 3', value); |
| object[0] = 4; |
| assertEquals('0 4', value); |
| object[1] = 5; |
| assertEquals('1 5', value); |
| })(); |