| // 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 NonExtensibleBetweenSetterAndGetter() { |
| o = {}; |
| o.x = 42; |
| o.__defineGetter__('y', function() {}); |
| Object.preventExtensions(o); |
| o.__defineSetter__('y', function() {}); |
| o.x = 0.1; |
| })(); |
| |
| (function InterleavedIntegrityLevel() { |
| o = {}; |
| o.x = 42; |
| o.__defineSetter__('y', function() {}); |
| Object.preventExtensions(o); |
| o.__defineGetter__('y', function() { |
| return 44; |
| }); |
| Object.seal(o); |
| o.x = 0.1; |
| assertEquals(44, o.y); |
| })(); |
| |
| (function TryUpdateRepeatedIntegrityLevel() { |
| function C() { |
| this.x = 0; |
| this.x = 1; |
| Object.preventExtensions(this); |
| Object.seal(this); |
| } |
| |
| const o1 = new C(); |
| const o2 = new C(); |
| const o3 = new C(); |
| |
| function f(o) { |
| return o.x; |
| } |
| |
| // Warm up the IC. |
| ; |
| %PrepareFunctionForOptimization(f); |
| f(o1); |
| f(o1); |
| f(o1); |
| |
| // Reconfigure to double field. |
| o3.x = 0.1; |
| |
| // Migrate o2 to the new shape. |
| f(o2); |
| |
| %OptimizeFunctionOnNextCall(f); |
| f(o1); |
| |
| assertTrue(%HaveSameMap(o1, o2)); |
| assertTrue(%HaveSameMap(o1, o3)); |
| })(); |