|  | // 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); | 
|  | })(); |