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 10 function SlowObject() { 11 this.foo = 1; 12 this.bar = 2; 13 this.qux = 3; 14 delete this.qux; 15 assertFalse(%HasFastProperties(this)); 16 } 17 function SlowObjectWithBaz() { 18 var o = new SlowObject(); 19 o.baz = 4; 20 return o; 21 } 22 23 function Load(o) { 24 return o.baz; 25 } 26 27 for (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 36 function SlowPrototype() { 37 this.foo = 1; 38 } 39 SlowPrototype.prototype.bar = 2; 40 SlowPrototype.prototype.baz = 3; 41 delete SlowPrototype.prototype.baz; 42 new SlowPrototype; 43 44 // Prototypes stay fast even after deleting properties. 45 assertTrue(%HasFastProperties(SlowPrototype.prototype)); 46 var fast_proto = new SlowPrototype(); 47 assertTrue(%HasFastProperties(SlowPrototype.prototype)); 48 assertTrue(%HasFastProperties(fast_proto.__proto__)); 49