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 var k = "x";
      8 var o1 = {x: 10};
      9 var o2 = {x: 11, y: 20};
     10 var o3 = {x: 12, y: 20, z: 100};
     11 
     12 function f(o) {
     13   var result = 0;
     14   for (var i = 0; i < 100; i++) {
     15     result += o[k];
     16   }
     17   return result;
     18 }
     19 
     20 f(o1);
     21 f(o1);
     22 f(o1);
     23 %OptimizeFunctionOnNextCall(f);
     24 assertEquals(1000, f(o1));
     25 
     26 f(o2);
     27 f(o2);
     28 f(o2);
     29 %OptimizeFunctionOnNextCall(f);
     30 assertEquals(1100, f(o2));
     31 
     32 f(o3);
     33 f(o3);
     34 f(o3);
     35 %OptimizeFunctionOnNextCall(f);
     36 assertEquals(1200, f(o3));
     37 
     38 (function CountOperationDeoptimizationGetter() {
     39   var global = {};
     40   global.__defineGetter__("A", function () { return "x"; });
     41 
     42   function h() {
     43     return "A";
     44   }
     45 
     46   function g(a, b, c) {
     47     try {
     48       return a + b.toString() + c;
     49     } catch (e) { }
     50   }
     51 
     52   function test(o)  {
     53    return g(1, o[h()]--, 10);
     54   }
     55 
     56   test(global);
     57   test(global);
     58   %OptimizeFunctionOnNextCall(test);
     59   print(test(global));
     60 })();
     61 
     62 
     63 (function CountOperationDeoptimizationPoint() {
     64   function test()  {
     65    this[0, ""]--;
     66   }
     67 
     68   test();
     69   test();
     70   %OptimizeFunctionOnNextCall(test);
     71   test();
     72 })();
     73