| // Copyright 2018 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() { |
| function SetX(o, v) { |
| o.x = v; |
| } |
| |
| function SetY(o, v) { |
| o.y = v; |
| } |
| |
| var p = {}; |
| |
| function Create() { |
| var o = {__proto__:p, b:1, a:2}; |
| delete o.b; |
| assertFalse(%HasFastProperties(o)); |
| return o; |
| } |
| |
| for (var i = 0; i < 10; i++) { |
| var o = Create(); |
| SetX(o, 13); |
| SetY(o, 13); |
| } |
| |
| Object.defineProperty(p, "x", {value:42, configurable: true, writable: false}); |
| |
| for (var i = 0; i < 10; i++) { |
| var o = Create(); |
| SetY(o, 13); |
| } |
| |
| var o = Create(); |
| assertEquals(42, o.x); |
| SetX(o, 13); |
| assertEquals(42, o.x); |
| })(); |
| |
| |
| (function() { |
| var p1 = {a:10}; |
| Object.defineProperty(p1, "x", {value:42, configurable: true, writable: false}); |
| |
| var p2 = {__proto__: p1, x:153}; |
| for (var i = 0; i < 2000; i++) { |
| p1["p" + i] = 0; |
| p2["p" + i] = 0; |
| } |
| assertFalse(%HasFastProperties(p1)); |
| assertFalse(%HasFastProperties(p2)); |
| |
| function GetX(o) { |
| return o.x; |
| } |
| function SetX(o, v) { |
| o.x = v; |
| } |
| |
| function Create() { |
| var o = {__proto__:p2, b:1, a:2}; |
| return o; |
| } |
| |
| for (var i = 0; i < 10; i++) { |
| var o = Create(); |
| assertEquals(153, GetX(o)); |
| SetX(o, 13); |
| assertEquals(13, GetX(o)); |
| } |
| |
| delete p2.x; |
| assertFalse(%HasFastProperties(p1)); |
| assertFalse(%HasFastProperties(p2)); |
| |
| var o = Create(); |
| assertEquals(42, GetX(o)); |
| SetX(o, 13); |
| assertEquals(42, GetX(o)); |
| })(); |