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
7var k = "x";
8var o1 = {x: 10};
9var o2 = {x: 11, y: 20};
10var o3 = {x: 12, y: 20, z: 100};
11
12function f(o) {
13  var result = 0;
14  for (var i = 0; i < 100; i++) {
15    result += o[k];
16  }
17  return result;
18}
19
20f(o1);
21f(o1);
22f(o1);
23%OptimizeFunctionOnNextCall(f);
24assertEquals(1000, f(o1));
25
26f(o2);
27f(o2);
28f(o2);
29%OptimizeFunctionOnNextCall(f);
30assertEquals(1100, f(o2));
31
32f(o3);
33f(o3);
34f(o3);
35%OptimizeFunctionOnNextCall(f);
36assertEquals(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