| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 3b7c952 commit 84d3243
4 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -39,7 +39,7 @@ | |||
| 39 | 39 | ||
| 40 | 40 | # Reset this number to 0 on major V8 upgrades. | |
| 41 | 41 | # Increment by one for each non-official patch applied to deps/v8. | |
| 42 | - 'v8_embedder_string': '-node.13', | ||
| 42 | + 'v8_embedder_string': '-node.14', | ||
| 43 | 43 | ||
| 44 | 44 | ##### V8 defaults for Node.js ##### | |
| 45 | 45 | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -1668,7 +1668,8 @@ class V8_EXPORT ScriptCompiler { | |||
| 1668 | 1668 | Local<String> arguments[], size_t context_extension_count, | |
| 1669 | 1669 | Local<Object> context_extensions[], | |
| 1670 | 1670 | CompileOptions options = kNoCompileOptions, | |
| 1671 | - NoCacheReason no_cache_reason = kNoCacheNoReason); | ||
| 1671 | + NoCacheReason no_cache_reason = kNoCacheNoReason, | ||
| 1672 | + Local<ScriptOrModule>* script_or_module_out = nullptr); | ||
| 1672 | 1673 | ||
| 1673 | 1674 | /** | |
| 1674 | 1675 | * Creates and returns code cache for the specified unbound_script. | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -2441,70 +2441,83 @@ MaybeLocal<Function> ScriptCompiler::CompileFunctionInContext( | |||
| 2441 | 2441 | Local<Context> v8_context, Source* source, size_t arguments_count, | |
| 2442 | 2442 | Local<String> arguments[], size_t context_extension_count, | |
| 2443 | 2443 | Local<Object> context_extensions[], CompileOptions options, | |
| 2444 | - NoCacheReason no_cache_reason) { | ||
| 2445 | - PREPARE_FOR_EXECUTION(v8_context, ScriptCompiler, CompileFunctionInContext, | ||
| 2446 | - Function); | ||
| 2447 | - TRACE_EVENT_CALL_STATS_SCOPED(isolate, "v8", "V8.ScriptCompiler"); | ||
| 2444 | + NoCacheReason no_cache_reason, | ||
| 2445 | + Local<ScriptOrModule>* script_or_module_out) { | ||
| 2446 | + Local<Function> result; | ||
| 2448 | 2447 | ||
| 2449 | - DCHECK(options == CompileOptions::kConsumeCodeCache || | ||
| 2450 | - options == CompileOptions::kEagerCompile || | ||
| 2451 | - options == CompileOptions::kNoCompileOptions); | ||
| 2448 | + { | ||
| 2449 | + PREPARE_FOR_EXECUTION(v8_context, ScriptCompiler, CompileFunctionInContext, | ||
| 2450 | + Function); | ||
| 2451 | + TRACE_EVENT_CALL_STATS_SCOPED(isolate, "v8", "V8.ScriptCompiler"); | ||
| 2452 | 2452 | ||
| 2453 | - i::Handle<i::Context> context = Utils::OpenHandle(*v8_context); | ||
| 2453 | + DCHECK(options == CompileOptions::kConsumeCodeCache || | ||
| 2454 | + options == CompileOptions::kEagerCompile || | ||
| 2455 | + options == CompileOptions::kNoCompileOptions); | ||
| 2454 | 2456 | ||
| 2455 | - DCHECK(context->IsNativeContext()); | ||
| 2456 | - i::Handle<i::SharedFunctionInfo> outer_info( | ||
| 2457 | - context->empty_function().shared(), isolate); | ||
| 2458 | - | ||
| 2459 | - i::Handle<i::JSFunction> fun; | ||
| 2460 | - i::Handle<i::FixedArray> arguments_list = | ||
| 2461 | - isolate->factory()->NewFixedArray(static_cast<int>(arguments_count)); | ||
| 2462 | - for (int i = 0; i < static_cast<int>(arguments_count); i++) { | ||
| 2463 | - i::Handle<i::String> argument = Utils::OpenHandle(*arguments[i]); | ||
| 2464 | - if (!IsIdentifier(isolate, argument)) return Local<Function>(); | ||
| 2465 | - arguments_list->set(i, *argument); | ||
| 2466 | - } | ||
| 2467 | - | ||
| 2468 | - for (size_t i = 0; i < context_extension_count; ++i) { | ||
| 2469 | - i::Handle<i::JSReceiver> extension = | ||
| 2470 | - Utils::OpenHandle(*context_extensions[i]); | ||
| 2471 | - if (!extension->IsJSObject()) return Local<Function>(); | ||
| 2472 | - context = isolate->factory()->NewWithContext( | ||
| 2473 | - context, | ||
| 2474 | - i::ScopeInfo::CreateForWithScope( | ||
| 2475 | - isolate, | ||
| 2476 | - context->IsNativeContext() | ||
| 2477 | - ? i::Handle<i::ScopeInfo>::null() | ||
| 2478 | - : i::Handle<i::ScopeInfo>(context->scope_info(), isolate)), | ||
| 2479 | - extension); | ||
| 2480 | - } | ||
| 2457 | + i::Handle<i::Context> context = Utils::OpenHandle(*v8_context); | ||
| 2481 | 2458 | ||
| 2482 | - i::Compiler::ScriptDetails script_details = GetScriptDetails( | ||
| 2483 | - isolate, source->resource_name, source->resource_line_offset, | ||
| 2484 | - source->resource_column_offset, source->source_map_url, | ||
| 2485 | - source->host_defined_options); | ||
| 2459 | + DCHECK(context->IsNativeContext()); | ||
| 2486 | 2460 | ||
| 2487 | - i::ScriptData* script_data = nullptr; | ||
| 2488 | - if (options == kConsumeCodeCache) { | ||
| 2489 | - DCHECK(source->cached_data); | ||
| 2490 | - // ScriptData takes care of pointer-aligning the data. | ||
| 2491 | - script_data = new i::ScriptData(source->cached_data->data, | ||
| 2492 | - source->cached_data->length); | ||
| 2461 | + i::Handle<i::FixedArray> arguments_list = | ||
| 2462 | + isolate->factory()->NewFixedArray(static_cast<int>(arguments_count)); | ||
| 2463 | + for (int i = 0; i < static_cast<int>(arguments_count); i++) { | ||
| 2464 | + i::Handle<i::String> argument = Utils::OpenHandle(*arguments[i]); | ||
| 2465 | + if (!IsIdentifier(isolate, argument)) return Local<Function>(); | ||
| 2466 | + arguments_list->set(i, *argument); | ||
| 2467 | + } | ||
| 2468 | + | ||
| 2469 | + for (size_t i = 0; i < context_extension_count; ++i) { | ||
| 2470 | + i::Handle<i::JSReceiver> extension = | ||
| 2471 | + Utils::OpenHandle(*context_extensions[i]); | ||
| 2472 | + if (!extension->IsJSObject()) return Local<Function>(); | ||
| 2473 | + context = isolate->factory()->NewWithContext( | ||
| 2474 | + context, | ||
| 2475 | + i::ScopeInfo::CreateForWithScope( | ||
| 2476 | + isolate, | ||
| 2477 | + context->IsNativeContext() | ||
| 2478 | + ? i::Handle<i::ScopeInfo>::null() | ||
| 2479 | + : i::Handle<i::ScopeInfo>(context->scope_info(), isolate)), | ||
| 2480 | + extension); | ||
| 2481 | + } | ||
| 2482 | + | ||
| 2483 | + i::Compiler::ScriptDetails script_details = GetScriptDetails( | ||
| 2484 | + isolate, source->resource_name, source->resource_line_offset, | ||
| 2485 | + source->resource_column_offset, source->source_map_url, | ||
| 2486 | + source->host_defined_options); | ||
| 2487 | + | ||
| 2488 | + i::ScriptData* script_data = nullptr; | ||
| 2489 | + if (options == kConsumeCodeCache) { | ||
| 2490 | + DCHECK(source->cached_data); | ||
| 2491 | + // ScriptData takes care of pointer-aligning the data. | ||
| 2492 | + script_data = new i::ScriptData(source->cached_data->data, | ||
| 2493 | + source->cached_data->length); | ||
| 2494 | + } | ||
| 2495 | + | ||
| 2496 | + i::Handle<i::JSFunction> scoped_result; | ||
| 2497 | + has_pending_exception = | ||
| 2498 | + !i::Compiler::GetWrappedFunction( | ||
| 2499 | + Utils::OpenHandle(*source->source_string), arguments_list, context, | ||
| 2500 | + script_details, source->resource_options, script_data, options, | ||
| 2501 | + no_cache_reason) | ||
| 2502 | + .ToHandle(&scoped_result); | ||
| 2503 | + if (options == kConsumeCodeCache) { | ||
| 2504 | + source->cached_data->rejected = script_data->rejected(); | ||
| 2505 | + } | ||
| 2506 | + delete script_data; | ||
| 2507 | + RETURN_ON_FAILED_EXECUTION(Function); | ||
| 2508 | + result = handle_scope.Escape(Utils::CallableToLocal(scoped_result)); | ||
| 2493 | 2509 | } | |
| 2494 | 2510 | ||
| 2495 | - i::Handle<i::JSFunction> result; | ||
| 2496 | - has_pending_exception = | ||
| 2497 | - !i::Compiler::GetWrappedFunction( | ||
| 2498 | - Utils::OpenHandle(*source->source_string), arguments_list, context, | ||
| 2499 | - script_details, source->resource_options, script_data, options, | ||
| 2500 | - no_cache_reason) | ||
| 2501 | - .ToHandle(&result); | ||
| 2502 | - if (options == kConsumeCodeCache) { | ||
| 2503 | - source->cached_data->rejected = script_data->rejected(); | ||
| 2511 | + if (script_or_module_out != nullptr) { | ||
| 2512 | + i::Handle<i::JSFunction> function = | ||
| 2513 | + i::Handle<i::JSFunction>::cast(Utils::OpenHandle(*result)); | ||
| 2514 | + i::Isolate* isolate = function->GetIsolate(); | ||
| 2515 | + i::Handle<i::SharedFunctionInfo> shared(function->shared(), isolate); | ||
| 2516 | + i::Handle<i::Script> script(i::Script::cast(shared->script()), isolate); | ||
| 2517 | + *script_or_module_out = v8::Utils::ScriptOrModuleToLocal(script); | ||
| 2504 | 2518 | } | |
| 2505 | - delete script_data; | ||
| 2506 | - RETURN_ON_FAILED_EXECUTION(Function); | ||
| 2507 | - RETURN_ESCAPED(Utils::CallableToLocal(result)); | ||
| 2519 | + | ||
| 2520 | + return result; | ||
| 2508 | 2521 | } | |
| 2509 | 2522 | ||
| 2510 | 2523 | void ScriptCompiler::ScriptStreamingTask::Run() { data_->task->Run(); } | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -650,11 +650,16 @@ TEST(CompileFunctionInContextScriptOrigin) { | |||
| 650 | 650 | v8::Integer::New(CcTest::isolate(), 22), | |
| 651 | 651 | v8::Integer::New(CcTest::isolate(), 41)); | |
| 652 | 652 | v8::ScriptCompiler::Source script_source(v8_str("throw new Error()"), origin); | |
| 653 | + Local<ScriptOrModule> script; | ||
| 653 | 654 | v8::Local<v8::Function> fun = | |
| 654 | - v8::ScriptCompiler::CompileFunctionInContext(env.local(), &script_source, | ||
| 655 | - 0, nullptr, 0, nullptr) | ||
| 655 | + v8::ScriptCompiler::CompileFunctionInContext( | ||
| 656 | + env.local(), &script_source, 0, nullptr, 0, nullptr, | ||
| 657 | + v8::ScriptCompiler::CompileOptions::kNoCompileOptions, | ||
| 658 | + v8::ScriptCompiler::NoCacheReason::kNoCacheNoReason, &script) | ||
| 656 | 659 | .ToLocalChecked(); | |
| 657 | 660 | CHECK(!fun.IsEmpty()); | |
| 661 | + CHECK(!script.IsEmpty()); | ||
| 662 | + CHECK(script->GetResourceName()->StrictEquals(v8_str("test"))); | ||
| 658 | 663 | v8::TryCatch try_catch(CcTest::isolate()); | |
| 659 | 664 | CcTest::isolate()->SetCaptureStackTraceForUncaughtExceptions(true); | |
| 660 | 665 | CHECK(fun->Call(env.local(), env->Global(), 0, nullptr).IsEmpty()); | |
| Back | FazBrowse Home | New Git URL |
0 commit comments