// Copyright 2014 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // Flags: --allow-natives-syntax var k = "x"; var o1 = {x: 10}; var o2 = {x: 11, y: 20}; var o3 = {x: 12, y: 20, z: 100}; function f(o) { var result = 0; for (var i = 0; i < 100; i++) { result += o[k]; } return result; } %PrepareFunctionForOptimization(f); f(o1); f(o1); f(o1); %OptimizeFunctionOnNextCall(f); assertEquals(1000, f(o1)); %PrepareFunctionForOptimization(f); f(o2); f(o2); f(o2); %OptimizeFunctionOnNextCall(f); assertEquals(1100, f(o2)); %PrepareFunctionForOptimization(f); f(o3); f(o3); f(o3); %OptimizeFunctionOnNextCall(f); assertEquals(1200, f(o3)); (function CountOperationDeoptimizationGetter() { var global = {}; global.__defineGetter__("A", function () { return "x"; }); function h() { return "A"; } function g(a, b, c) { try { return a + b.toString() + c; } catch (e) { } } function test(o) { return g(1, o[h()]--, 10); } %PrepareFunctionForOptimization(test); test(global); test(global); %OptimizeFunctionOnNextCall(test); print(test(global)); })(); (function CountOperationDeoptimizationPoint() { function test() { this[0, ""]--; } %PrepareFunctionForOptimization(test); test(); test(); %OptimizeFunctionOnNextCall(test); test(); })();