9987221c02
We have a bottleneck around storing elements in the array and object prototypes, but the Push() and Unshift() builtins don't respect them. Fix this exactly to the level of existing support for stores. BUG=v8:4043 LOG=N NOTRY=true Review URL: https://codereview.chromium.org/1066003003 Cr-Commit-Position: refs/heads/master@{#27943}
37 lines
912 B
JavaScript
37 lines
912 B
JavaScript
// Copyright 2015 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
|
|
|
|
function f1(a, i) {
|
|
return a[i] + 0.5;
|
|
}
|
|
var arr = [,0.0,2.5];
|
|
assertEquals(0.5, f1(arr, 1));
|
|
assertEquals(0.5, f1(arr, 1));
|
|
%OptimizeFunctionOnNextCall(f1);
|
|
assertEquals(0.5, f1(arr, 1));
|
|
|
|
// Trick crankshaft into accepting feedback with the array prototype
|
|
// map even though a call on that map was never made. optopush should
|
|
// refuse to inline the push call based on the danger that it's modifying
|
|
// the array prototype.
|
|
var push = Array.prototype.push;
|
|
var array_prototype = Array.prototype;
|
|
|
|
function optopush(a) {
|
|
push.call(a, 1);
|
|
}
|
|
|
|
function foo() {
|
|
optopush(array_prototype);
|
|
}
|
|
|
|
optopush([]);
|
|
optopush([]);
|
|
optopush([]);
|
|
%OptimizeFunctionOnNextCall(foo);
|
|
foo();
|
|
assertEquals(1.5, f1(arr, 0));
|