| // Copyright 2020 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 --turboprop --turboprop-dynamic-map-checks --opt | |
| // Flags: --no-always-opt | |
| function load(obj){ | |
| return obj.x; | |
| } | |
| %PrepareFunctionForOptimization(load); | |
| obj = {}; | |
| obj.x = 1; | |
| //get mono feedback | |
| load(obj); | |
| // optimize as mono | |
| %OptimizeFunctionOnNextCall(load); | |
| load(obj); | |
| assertOptimized(load); | |
| load(obj); | |
| // change the object's representation. | |
| obj.x = 2.3; | |
| load(obj); | |
| // deoptimizes on a wrong map but retains the code | |
| assertOptimized(load); | |
| // deoptimizes on the wrong handler. | |
| load(obj); | |
| assertUnoptimized(load); |