1 // Copyright 2015 the V8 project authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // Flags: --allow-natives-syntax 6 7 function receiver() { 8 return this; 9 } 10 11 function construct(f) { 12 "use strict"; 13 class B {} 14 class C extends B { 15 bar() { return super.foo() } 16 } 17 B.prototype.foo = f; 18 return new C(); 19 } 20 21 function check(x, value, type) { 22 assertEquals("object", typeof x); 23 assertInstanceof(x, type); 24 assertEquals(value, x); 25 } 26 27 var o = construct(receiver); 28 check(o.bar.call(123), Object(123), Number); 29 check(o.bar.call("a"), Object("a"), String); 30 check(o.bar.call(undefined), this, Object); 31 check(o.bar.call(null), this, Object); 32 33 %OptimizeFunctionOnNextCall(o.bar); 34 check(o.bar.call(456), Object(456), Number); 35 check(o.bar.call("b"), Object("b"), String); 36 check(o.bar.call(undefined), this, Object); 37 check(o.bar.call(null), this, Object); 38