Ben Murdoch | b8a8cc1 | 2014-11-26 15:28:44 +0000 | [diff] [blame^] | 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__)); |