11845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.org// Copyright 2014 the V8 project authors. All rights reserved. 21845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.org// Use of this source code is governed by a BSD-style license that can be 31845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.org// found in the LICENSE file. 41845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.org 51845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.org// Flags: --allow-natives-syntax 61845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.org 71845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.org// Test loading existent and nonexistent properties from dictionary 81845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.org// mode objects. 91845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.org 101845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.orgfunction SlowObject() { 111845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.org this.foo = 1; 121845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.org this.bar = 2; 131845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.org this.qux = 3; 141845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.org delete this.qux; 151845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.org assertFalse(%HasFastProperties(this)); 161845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.org} 171845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.orgfunction SlowObjectWithBaz() { 181845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.org var o = new SlowObject(); 191845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.org o.baz = 4; 201845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.org return o; 211845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.org} 221845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.org 231845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.orgfunction Load(o) { 241845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.org return o.baz; 251845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.org} 261845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.org 271845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.orgfor (var i = 0; i < 10; i++) { 281845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.org var o1 = new SlowObject(); 291845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.org var o2 = SlowObjectWithBaz(); 301845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.org assertEquals(undefined, Load(o1)); 311845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.org assertEquals(4, Load(o2)); 321845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.org} 331845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.org 341845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.org// Test objects getting optimized as fast prototypes. 351845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.org 361845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.orgfunction SlowPrototype() { 371845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.org this.foo = 1; 381845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.org} 391845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.orgSlowPrototype.prototype.bar = 2; 401845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.orgSlowPrototype.prototype.baz = 3; 411845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.orgdelete SlowPrototype.prototype.baz; 428640107360766c74218cf16d51b714b1f2138839machenbach@chromium.orgnew SlowPrototype; 431845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.org 44e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org// Prototypes stay fast even after deleting properties. 45e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.orgassertTrue(%HasFastProperties(SlowPrototype.prototype)); 461845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.orgvar fast_proto = new SlowPrototype(); 471845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.orgassertTrue(%HasFastProperties(SlowPrototype.prototype)); 481845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.orgassertTrue(%HasFastProperties(fast_proto.__proto__)); 49