blob: 33360d7f52aac370e049c1d371ab8e1569181825 [file] [log] [blame]
Ben Murdochb8a8cc12014-11-26 15:28:44 +00001// 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;
Ben Murdoch61f157c2016-09-16 13:49:30 +010042assertFalse(%HasFastProperties(SlowPrototype.prototype));
43var slow_proto = new SlowPrototype;
44// ICs make prototypes fast.
45function ic() { return slow_proto.bar; }
46ic();
47ic();
48assertTrue(%HasFastProperties(slow_proto.__proto__));
Ben Murdochb8a8cc12014-11-26 15:28:44 +000049
50// Prototypes stay fast even after deleting properties.
51assertTrue(%HasFastProperties(SlowPrototype.prototype));
52var fast_proto = new SlowPrototype();
53assertTrue(%HasFastProperties(SlowPrototype.prototype));
54assertTrue(%HasFastProperties(fast_proto.__proto__));