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