diff --git a/deps/v8/src/codegen/compiler.cc b/deps/v8/src/codegen/compiler.cc index a0d2e45ffc9729..d821913f650bd8 100644 --- a/deps/v8/src/codegen/compiler.cc +++ b/deps/v8/src/codegen/compiler.cc @@ -3199,7 +3199,7 @@ MaybeHandle Compiler::GetWrappedFunction( // functions fully non-lazy instead thus preventing source positions from // being omitted. flags.set_collect_source_positions(true); - // flags.set_eager(compile_options == ScriptCompiler::kEagerCompile); + flags.set_is_eager(compile_options == ScriptCompiler::kEagerCompile); UnoptimizedCompileState compile_state; ReusableUnoptimizedCompileState reusable_state(isolate); diff --git a/deps/v8/test/cctest/test-serialize.cc b/deps/v8/test/cctest/test-serialize.cc index 7d3e57af49d92c..4252d4bd652034 100644 --- a/deps/v8/test/cctest/test-serialize.cc +++ b/deps/v8/test/cctest/test-serialize.cc @@ -4937,6 +4937,37 @@ TEST(CachedCompileFunction) { } } +TEST(CachedCompileFunctionRespectsEager) { + DisableAlwaysOpt(); + LocalContext env; + Isolate* isolate = CcTest::i_isolate(); + isolate->compilation_cache() + ->DisableScriptAndEval(); // Disable same-isolate code cache. + + v8::HandleScope scope(CcTest::isolate()); + + v8::Local source = v8_str("return function() { return 42; }"); + v8::ScriptCompiler::Source script_source(source); + + for (bool eager_compile : {false, true}) { + v8::ScriptCompiler::CompileOptions options = + eager_compile ? v8::ScriptCompiler::kEagerCompile + : v8::ScriptCompiler::kNoCompileOptions; + v8::Local fun = + v8::ScriptCompiler::CompileFunction(env.local(), &script_source, 0, + nullptr, 0, nullptr, options) + .ToLocalChecked() + .As() + ->Call(env.local(), v8::Undefined(CcTest::isolate()), 0, nullptr) + .ToLocalChecked(); + + auto i_fun = i::Handle::cast(Utils::OpenHandle(*fun)); + + // Function should be compiled iff kEagerCompile was used. + CHECK_EQ(i_fun->shared().is_compiled(), eager_compile); + } +} + UNINITIALIZED_TEST(SnapshotCreatorAnonClassWithKeep) { DisableAlwaysOpt(); v8::SnapshotCreator creator;