| // Copyright 2015 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: --strong-mode |
| |
| "use strong"; |
| |
| function testSuper(object) { |
| assertEquals(0, object.validLoad()); |
| assertThrows(function(){ return object.propertyLoad() }, TypeError); |
| assertThrows(function(){ return object.elementLoad() }, TypeError); |
| assertThrows(function(){ return object.accessorLoad() }, TypeError); |
| } |
| |
| class A { |
| constructor() {} |
| foo() { |
| return 0; |
| } |
| get bar() { |
| return 0; |
| } |
| set baz(_) { |
| return; |
| } |
| } |
| |
| class B extends A { |
| constructor() { |
| super(); |
| } |
| validLoad() { |
| return super.foo() + super.bar; |
| } |
| propertyLoad() { |
| return super.x; |
| } |
| elementLoad() { |
| return super[1]; |
| } |
| accessorLoad() { |
| return super.baz; |
| } |
| } |
| |
| class C extends A { |
| constructor() { |
| super(); |
| this[1] = 0; |
| this.x = 0; |
| } |
| get baz() { |
| return 0; |
| } |
| validLoad() { |
| return super.foo() + super.bar; |
| } |
| propertyLoad() { |
| return super.x; |
| } |
| elementLoad() { |
| return super[1]; |
| } |
| accessorLoad() { |
| return super.baz; |
| } |
| } |
| |
| let b = new B(); |
| let c = new C(); |
| testSuper(b); |
| testSuper(c); |
| |
| let d = { |
| "0": 0, |
| foo: 0, |
| bar: (function(){return 0}), |
| get baz(){return 0}, |
| set qux(_){return} |
| } |
| |
| let e = { |
| __proto__: d, |
| "1": 0, |
| x: 0, |
| get baz(){return 0}, |
| validLoad() { |
| return super[0] + super.foo + super.bar() + super.baz; |
| }, |
| propertyLoad() { |
| return super.x; |
| }, |
| elementLoad() { |
| return super[1]; |
| }, |
| accessorLoad() { |
| return super.qux; |
| } |
| } |
| |
| testSuper(e); |