PR-URL: https://github.com/nodejs/node/pull/51362 Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com> Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com>
40 lines
873 B
JavaScript
40 lines
873 B
JavaScript
// Copyright 2023 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 escape(s) { }
|
|
|
|
function f(i) {
|
|
let str = "";
|
|
escape(str);
|
|
|
|
// This "if (i == 3)" should not be merged into the subsequent switch, because
|
|
// there is a side-effect in between.
|
|
if (i == 3) {
|
|
// This will trigger a deopt
|
|
str += "("
|
|
}
|
|
|
|
str += "function";
|
|
|
|
switch (i) {
|
|
case -10:
|
|
escape(str);
|
|
case 1:
|
|
case 3:
|
|
}
|
|
|
|
// This `eval` creates some kind of closure of the function inside the
|
|
// function, not sure how that works exactly, but it's needed to repro :D
|
|
eval();
|
|
|
|
return str;
|
|
}
|
|
|
|
%PrepareFunctionForOptimization(f);
|
|
assertEquals(f(0), "function");
|
|
%OptimizeFunctionOnNextCall(f);
|
|
assertEquals(f(3), "(function");
|