| // Copyright 2017 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 TestLookupOnReceiver() { |
| let log = []; |
| |
| function f(o, v) { |
| o.x = v; |
| return o.x; |
| } |
| |
| let p = {}; |
| Object.defineProperty( |
| p, "x", |
| { |
| get: function() { return 153; }, |
| set: function(v) { log.push("set"); }, |
| configurable: true |
| }); |
| |
| let o = Object.create(p); |
| // Turn o to dictionary mode. |
| for (let i = 0; i < 2048; i++) { |
| o["p"+i] = 0; |
| } |
| assertFalse(%HasFastProperties(o)); |
| |
| for (let i = 0; i < 5; i++) { |
| log.push(f(o, i)); |
| } |
| |
| Object.defineProperty(o, "x", { value: 0, configurable: true, writable: true}); |
| |
| for (let i = 0; i < 5; i++) { |
| log.push(f(o, 42 + i)); |
| } |
| |
| assertEquals(log, |
| ["set", 153, "set", 153, "set", 153, "set", 153, "set", 153, |
| 42, 43, 44, 45, 46]); |
| })(); |