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