summaryrefslogtreecommitdiff
path: root/deps/v8/test/mjsunit/elide-double-hole-check-10.js
blob: 066f802e544b540b434d59b1fc57c4e9102d737a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// 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];
%PrepareFunctionForOptimization(f1);
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);
}

%PrepareFunctionForOptimization(foo);
optopush([]);
optopush([]);
optopush([]);
%OptimizeFunctionOnNextCall(foo);
foo();
assertEquals(1.5, f1(arr, 0));