mirror of
https://github.com/nodejs/node.git
synced 2024-12-01 16:10:02 +01:00
src: move context bootstrap to js
PR-URL: https://github.com/nodejs/node/pull/21518 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Anna Henningsen <anna@addaleax.net>
This commit is contained in:
parent
759809f674
commit
d13cdd9c48
16
lib/internal/per_context.js
Normal file
16
lib/internal/per_context.js
Normal file
@ -0,0 +1,16 @@
|
||||
'use strict';
|
||||
|
||||
// node::NewContext calls this script
|
||||
|
||||
(function(global) {
|
||||
// https://github.com/nodejs/node/issues/14909
|
||||
delete global.Intl.v8BreakIterator;
|
||||
|
||||
// https://github.com/nodejs/node/issues/21219
|
||||
Object.defineProperty(global.Atomics, 'notify', {
|
||||
value: global.Atomics.wake,
|
||||
writable: true,
|
||||
enumerable: false,
|
||||
configurable: true,
|
||||
});
|
||||
}(this));
|
1
node.gyp
1
node.gyp
@ -25,6 +25,7 @@
|
||||
'node_lib_target_name%': 'node_lib',
|
||||
'node_intermediate_lib_type%': 'static_library',
|
||||
'library_files': [
|
||||
'lib/internal/per_context.js',
|
||||
'lib/internal/bootstrap/cache.js',
|
||||
'lib/internal/bootstrap/loaders.js',
|
||||
'lib/internal/bootstrap/node.js',
|
||||
|
36
src/node.cc
36
src/node.cc
@ -3497,35 +3497,19 @@ Local<Context> NewContext(Isolate* isolate,
|
||||
auto context = Context::New(isolate, nullptr, object_template);
|
||||
if (context.IsEmpty()) return context;
|
||||
HandleScope handle_scope(isolate);
|
||||
|
||||
context->SetEmbedderData(
|
||||
ContextEmbedderIndex::kAllowWasmCodeGeneration, True(isolate));
|
||||
|
||||
auto intl_key = FIXED_ONE_BYTE_STRING(isolate, "Intl");
|
||||
auto break_iter_key = FIXED_ONE_BYTE_STRING(isolate, "v8BreakIterator");
|
||||
Local<Value> intl_v;
|
||||
if (context->Global()->Get(context, intl_key).ToLocal(&intl_v) &&
|
||||
intl_v->IsObject()) {
|
||||
Local<Object> intl = intl_v.As<Object>();
|
||||
intl->Delete(context, break_iter_key).FromJust();
|
||||
}
|
||||
|
||||
// https://github.com/nodejs/node/issues/21219
|
||||
// TODO(devsnek): remove when v8 supports Atomics.notify
|
||||
auto atomics_key = FIXED_ONE_BYTE_STRING(isolate, "Atomics");
|
||||
Local<Value> atomics_v;
|
||||
if (context->Global()->Get(context, atomics_key).ToLocal(&atomics_v) &&
|
||||
atomics_v->IsObject()) {
|
||||
Local<Object> atomics = atomics_v.As<Object>();
|
||||
auto wake_key = FIXED_ONE_BYTE_STRING(isolate, "wake");
|
||||
|
||||
Local<Value> wake = atomics->Get(context, wake_key).ToLocalChecked();
|
||||
auto notify_key = FIXED_ONE_BYTE_STRING(isolate, "notify");
|
||||
|
||||
v8::PropertyDescriptor desc(wake, true);
|
||||
desc.set_enumerable(false);
|
||||
desc.set_configurable(true);
|
||||
|
||||
atomics->DefineProperty(context, notify_key, desc).ToChecked();
|
||||
{
|
||||
// Run lib/internal/per_context.js
|
||||
Context::Scope context_scope(context);
|
||||
Local<String> per_context = NodePerContextSource(isolate);
|
||||
v8::ScriptCompiler::Source per_context_src(per_context, nullptr);
|
||||
Local<v8::Script> s = v8::ScriptCompiler::Compile(
|
||||
context,
|
||||
&per_context_src).ToLocalChecked();
|
||||
s->Run(context).ToLocalChecked();
|
||||
}
|
||||
|
||||
return context;
|
||||
|
@ -241,9 +241,7 @@ class MultiIsolatePlatform : public v8::Platform {
|
||||
// Creates a new isolate with Node.js-specific settings.
|
||||
NODE_EXTERN v8::Isolate* NewIsolate(ArrayBufferAllocator* allocator);
|
||||
|
||||
// Creates a new context with Node.js-specific tweaks. Currently, it removes
|
||||
// the `v8BreakIterator` property from the global `Intl` object if present.
|
||||
// See https://github.com/nodejs/node/issues/14909 for more info.
|
||||
// Creates a new context with Node.js-specific tweaks.
|
||||
NODE_EXTERN v8::Local<v8::Context> NewContext(
|
||||
v8::Isolate* isolate,
|
||||
v8::Local<v8::ObjectTemplate> object_template =
|
||||
|
@ -29,6 +29,7 @@
|
||||
namespace node {
|
||||
|
||||
void DefineJavaScript(Environment* env, v8::Local<v8::Object> target);
|
||||
v8::Local<v8::String> NodePerContextSource(v8::Isolate* isolate);
|
||||
v8::Local<v8::String> LoadersBootstrapperSource(Environment* env);
|
||||
v8::Local<v8::String> NodeBootstrapperSource(Environment* env);
|
||||
|
||||
|
@ -189,6 +189,10 @@ namespace {{
|
||||
|
||||
}} // anonymous namespace
|
||||
|
||||
v8::Local<v8::String> NodePerContextSource(v8::Isolate* isolate) {{
|
||||
return internal_per_context_value.ToStringChecked(isolate);
|
||||
}}
|
||||
|
||||
v8::Local<v8::String> LoadersBootstrapperSource(Environment* env) {{
|
||||
return internal_bootstrap_loaders_value.ToStringChecked(env->isolate());
|
||||
}}
|
||||
|
Loading…
Reference in New Issue
Block a user