1// Copyright 2014 the V8 project authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5// Flags: --allow-natives-syntax 6 7// Test loading existent and nonexistent properties from dictionary 8// mode objects. 9 10function SlowObject() { 11 this.foo = 1; 12 this.bar = 2; 13 this.qux = 3; 14 delete this.qux; 15 assertFalse(%HasFastProperties(this)); 16} 17function SlowObjectWithBaz() { 18 var o = new SlowObject(); 19 o.baz = 4; 20 return o; 21} 22 23function Load(o) { 24 return o.baz; 25} 26 27for (var i = 0; i < 10; i++) { 28 var o1 = new SlowObject(); 29 var o2 = SlowObjectWithBaz(); 30 assertEquals(undefined, Load(o1)); 31 assertEquals(4, Load(o2)); 32} 33 34// Test objects getting optimized as fast prototypes. 35 36function SlowPrototype() { 37 this.foo = 1; 38} 39SlowPrototype.prototype.bar = 2; 40SlowPrototype.prototype.baz = 3; 41delete SlowPrototype.prototype.baz; 42new SlowPrototype; 43 44// Prototypes stay fast even after deleting properties. 45assertTrue(%HasFastProperties(SlowPrototype.prototype)); 46var fast_proto = new SlowPrototype(); 47assertTrue(%HasFastProperties(SlowPrototype.prototype)); 48assertTrue(%HasFastProperties(fast_proto.__proto__)); 49