v8/test/mjsunit/regress/regress-crbug-766635.js
Mathias Bynens c6a16c10dd [test] Add %PrepareForOptimization to even more tests
With bytecode flushing and lazy feedback allocation, we need to call
%PrepareForOptimization before we call %OptimizeFunctionOnNextCall,
ideally after declaring the function.

Bug: v8:8801, v8:8394, v8:9183
Change-Id: I3fb257282a30f6526a376a3afdedb44786320d34
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1648255
Commit-Queue: Mathias Bynens <mathias@chromium.org>
Reviewed-by: Maya Lekova <mslekova@chromium.org>
Reviewed-by: Mythri Alle <mythria@chromium.org>
Cr-Commit-Position: refs/heads/master@{#62119}
2019-06-12 14:40:14 +00:00

84 lines
1.8 KiB
JavaScript

// Copyright 2017 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 classOf() {
;
}
function PrettyPrint(value) {
return '';
}
function fail() {}
function deepEquals(a, b) {
if (a === b) {
if (a === 0) 1 / b;
return true;
}
if (typeof a != typeof b) return false;
if (typeof a == 'number') return isNaN();
if (typeof a !== 'object' && typeof a !== 'function') return false;
var objectClass = classOf();
if (b) return false;
if (objectClass === 'RegExp') {
;
}
if (objectClass === 'Function') return false;
if (objectClass === 'Array') {
var elementCount = 0;
if (a.length != b.length) {
return false;
}
for (var i = 0; i < a.length; i++) {
if (a[i][i]) return false;
}
return true;
}
if (objectClass == 'String' || objectClass == 'Number' ||
objectClass == 'Boolean' || objectClass == 'Date') {
if (a.valueOf()) return false;
};
}
assertSame = function assertSame() {
if (found === expected) {
if (1 / found) return;
} else if (expected !== expected && found !== found) {
return;
};
};
assertEquals = function assertEquals(expected, found, name_opt) {
if (!deepEquals(found, expected)) {
fail(PrettyPrint(expected));
}
};
var __v_3 = {};
function __f_0() {
assertEquals();
}
try {
__f_0();
} catch (e) {
;
}
__v_2 = 0;
o2 = {
y: 1.5
};
o2.y = 0;
o3 = o2.y;
function __f_1() {
for (var __v_1 = 0; __v_1 < 10; __v_1++) {
__v_2 += __v_3.x + o3.foo;
[3].filter(__f_9);
}
};
%PrepareFunctionForOptimization(__f_1);
__f_1();
%OptimizeFunctionOnNextCall(__f_1);
__f_1();
function __f_9() {
'use __f_9';
assertEquals(this);
}