| // Copyright 2019 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 --opt |
| |
| class C extends Object { |
| bla() {} |
| } |
| |
| const bla = C.prototype.bla; |
| |
| function bar(c) { |
| %TurbofanStaticAssert(c.bla === bla); |
| } |
| |
| const boundC = C.bind(null); |
| function foo() { |
| let c = new boundC(); |
| bar(c); |
| } |
| %PrepareFunctionForOptimization(foo); |
| %PrepareFunctionForOptimization(bar); |
| %PrepareFunctionForOptimization(C); |
| bar({}); |
| bar({a:1}); |
| bar({aa:1}); |
| bar({aaa:1}); |
| bar({aaaa:1}); |
| bar({aaaaa:1}); |
| foo(); |
| foo(); |
| %OptimizeFunctionOnNextCall(foo); |
| foo(); |