blob: 11f8fb50d879c123a1868ca317d3987f5d0e905d [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
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})();