Home | History | Annotate | Download | only in mjsunit
      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