| // 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 |
| |
| function f() { |
| return r.test("abc"); |
| } |
| |
| function to_dict(o) { |
| r.a = 42; |
| r.b = 42; |
| delete r.a; |
| } |
| |
| function to_fast(o) { |
| const obj = {}; |
| const obj2 = {}; |
| delete o.a; |
| obj.__proto__ = o; |
| obj[0] = 1; |
| obj.__proto__ = obj2; |
| delete obj[0]; |
| return o; |
| } |
| |
| // Shrink the instance size by first transitioning to dictionary properties, |
| // then back to fast properties. |
| const r = /./; |
| to_dict(r); |
| to_fast(r); |
| |
| %PrepareFunctionForOptimization(f); |
| assertTrue(f()); |
| %OptimizeFunctionOnNextCall(f); |
| assertTrue(f()); |