diff options
author | Stephen Belanger <stephen.belanger@datadoghq.com> | 2021-08-26 12:45:03 +0300 |
---|---|---|
committer | Myles Borins <mylesborins@github.com> | 2021-08-31 17:55:09 +0300 |
commit | 327838dd9670d9f3a19eb0d804dfb8929d6985b4 (patch) | |
tree | 146af9ef99f1ab25c3274510534c2f626801a85b /deps | |
parent | 89c1bbd7b2f6871858f185ace701af51e521de7c (diff) |
deps: V8: backport c9224589cf53
Original commit message:
[PATCH] Reland "[d8] Add d8 global variable"
This is a reland of 6798619a69dfe3e244f85b83c4a327d94d426b32
Original change's description:
> [d8] Add d8 global variable
>
> - Add a a "d8" global variable where d8 can provide helpers.
> This in in preparation of adding d8.log for testing our log parsers
> written in JavaScript.
>
> - Separate d8 helper creation into individual functions.
>
> Bug: v8:10668
> Change-Id: I84e434452463afb93ae403f890d8841b20b00703
> Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2400990
> Reviewed-by: Toon Verwaest <verwaest@chromium.org>
> Commit-Queue: Camillo Bruni <cbruni@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#69801}
Tbr: verwaest@chromium.org
Bug: v8:10668
Change-Id: If3256ec4e11f01ef1dc5c2e61fa33ed6d7a6aee3
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2409274
Reviewed-by: Camillo Bruni <cbruni@chromium.org>
Commit-Queue: Camillo Bruni <cbruni@chromium.org>
Cr-Commit-Position: refs/heads/master@{#69867}
Refs: https://github.com/v8/v8/commit/c9224589cf538d722ee1adccf378bbacef80eccc
PR-URL: https://github.com/nodejs/node/pull/39743
Reviewed-By: Tobias Nießen <tniessen@tnie.de>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Franziska Hinkelmann <franziska.hinkelmann@gmail.com>
Reviewed-By: Gerhard Stöbich <deb2001-github@yahoo.de>
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Diffstat (limited to 'deps')
-rw-r--r-- | deps/v8/src/d8/d8.cc | 158 | ||||
-rw-r--r-- | deps/v8/src/d8/d8.h | 10 |
2 files changed, 104 insertions, 64 deletions
diff --git a/deps/v8/src/d8/d8.cc b/deps/v8/src/d8/d8.cc index 523b3066635..a6c55be0523 100644 --- a/deps/v8/src/d8/d8.cc +++ b/deps/v8/src/d8/d8.cc @@ -1877,6 +1877,11 @@ Local<String> Shell::Stringify(Isolate* isolate, Local<Value> value) { Local<ObjectTemplate> Shell::CreateGlobalTemplate(Isolate* isolate) { Local<ObjectTemplate> global_template = ObjectTemplate::New(isolate); + global_template->Set(Symbol::GetToStringTag(isolate), + String::NewFromUtf8Literal(isolate, "global")); + global_template->Set(isolate, "version", + FunctionTemplate::New(isolate, Version)); + global_template->Set(isolate, "print", FunctionTemplate::New(isolate, Print)); global_template->Set(isolate, "printErr", FunctionTemplate::New(isolate, PrintErr)); @@ -1895,8 +1900,77 @@ Local<ObjectTemplate> Shell::CreateGlobalTemplate(Isolate* isolate) { if (!options.omit_quit) { global_template->Set(isolate, "quit", FunctionTemplate::New(isolate, Quit)); } + global_template->Set(isolate, "testRunner", + Shell::CreateTestRunnerTemplate(isolate)); + global_template->Set(isolate, "Realm", Shell::CreateRealmTemplate(isolate)); + global_template->Set(isolate, "performance", + Shell::CreatePerformanceTemplate(isolate)); + global_template->Set(isolate, "Worker", Shell::CreateWorkerTemplate(isolate)); + global_template->Set(isolate, "os", Shell::CreateOSTemplate(isolate)); + global_template->Set(isolate, "d8", Shell::CreateD8Template(isolate)); + + if (i::FLAG_expose_async_hooks) { + global_template->Set(isolate, "async_hooks", + Shell::CreateAsyncHookTemplate(isolate)); + } + + return global_template; +} + +Local<ObjectTemplate> Shell::CreateOSTemplate(Isolate* isolate) { + Local<ObjectTemplate> os_template = ObjectTemplate::New(isolate); + AddOSMethods(isolate, os_template); + return os_template; +} + +Local<FunctionTemplate> Shell::CreateWorkerTemplate(Isolate* isolate) { + Local<FunctionTemplate> worker_fun_template = + FunctionTemplate::New(isolate, WorkerNew); + Local<Signature> worker_signature = + Signature::New(isolate, worker_fun_template); + worker_fun_template->SetClassName( + String::NewFromUtf8Literal(isolate, "Worker")); + worker_fun_template->ReadOnlyPrototype(); + worker_fun_template->PrototypeTemplate()->Set( + isolate, "terminate", + FunctionTemplate::New(isolate, WorkerTerminate, Local<Value>(), + worker_signature)); + worker_fun_template->PrototypeTemplate()->Set( + isolate, "postMessage", + FunctionTemplate::New(isolate, WorkerPostMessage, Local<Value>(), + worker_signature)); + worker_fun_template->PrototypeTemplate()->Set( + isolate, "getMessage", + FunctionTemplate::New(isolate, WorkerGetMessage, Local<Value>(), + worker_signature)); + worker_fun_template->InstanceTemplate()->SetInternalFieldCount(1); + return worker_fun_template; +} + +Local<ObjectTemplate> Shell::CreateAsyncHookTemplate(Isolate* isolate) { + Local<ObjectTemplate> async_hooks_templ = ObjectTemplate::New(isolate); + async_hooks_templ->Set(isolate, "createHook", + FunctionTemplate::New(isolate, AsyncHooksCreateHook)); + async_hooks_templ->Set( + isolate, "executionAsyncId", + FunctionTemplate::New(isolate, AsyncHooksExecutionAsyncId)); + async_hooks_templ->Set( + isolate, "triggerAsyncId", + FunctionTemplate::New(isolate, AsyncHooksTriggerAsyncId)); + return async_hooks_templ; +} + +Local<ObjectTemplate> Shell::CreatePromiseHookTemplate(Isolate* isolate) { + Local<ObjectTemplate> promise_hooks_templ = ObjectTemplate::New(isolate); + promise_hooks_templ->Set( + isolate, "setHooks", + FunctionTemplate::New(isolate, SetPromiseHooks, Local<Value>(), + Local<Signature>(), 4)); + return promise_hooks_templ; +} + +Local<ObjectTemplate> Shell::CreateTestRunnerTemplate(Isolate* isolate) { Local<ObjectTemplate> test_template = ObjectTemplate::New(isolate); - global_template->Set(isolate, "testRunner", test_template); test_template->Set(isolate, "notifyDone", FunctionTemplate::New(isolate, NotifyDone)); test_template->Set(isolate, "waitUntilDone", @@ -1905,13 +1979,20 @@ Local<ObjectTemplate> Shell::CreateGlobalTemplate(Isolate* isolate) { // installed on the global object can be hidden with the --omit-quit flag // (e.g. on asan bots). test_template->Set(isolate, "quit", FunctionTemplate::New(isolate, Quit)); + return test_template; +} - global_template->Set(isolate, "version", - FunctionTemplate::New(isolate, Version)); - global_template->Set(Symbol::GetToStringTag(isolate), - String::NewFromUtf8Literal(isolate, "global")); +Local<ObjectTemplate> Shell::CreatePerformanceTemplate(Isolate* isolate) { + Local<ObjectTemplate> performance_template = ObjectTemplate::New(isolate); + performance_template->Set(isolate, "now", + FunctionTemplate::New(isolate, PerformanceNow)); + performance_template->Set( + isolate, "measureMemory", + FunctionTemplate::New(isolate, PerformanceMeasureMemory)); + return performance_template; +} - // Bind the Realm object. +Local<ObjectTemplate> Shell::CreateRealmTemplate(Isolate* isolate) { Local<ObjectTemplate> realm_template = ObjectTemplate::New(isolate); realm_template->Set(isolate, "current", FunctionTemplate::New(isolate, RealmCurrent)); @@ -1936,64 +2017,13 @@ Local<ObjectTemplate> Shell::CreateGlobalTemplate(Isolate* isolate) { FunctionTemplate::New(isolate, RealmEval)); realm_template->SetAccessor(String::NewFromUtf8Literal(isolate, "shared"), RealmSharedGet, RealmSharedSet); - global_template->Set(isolate, "Realm", realm_template); - - Local<ObjectTemplate> performance_template = ObjectTemplate::New(isolate); - performance_template->Set(isolate, "now", - FunctionTemplate::New(isolate, PerformanceNow)); - performance_template->Set( - isolate, "measureMemory", - FunctionTemplate::New(isolate, PerformanceMeasureMemory)); - global_template->Set(isolate, "performance", performance_template); - - Local<FunctionTemplate> worker_fun_template = - FunctionTemplate::New(isolate, WorkerNew); - Local<Signature> worker_signature = - Signature::New(isolate, worker_fun_template); - worker_fun_template->SetClassName( - String::NewFromUtf8Literal(isolate, "Worker")); - worker_fun_template->ReadOnlyPrototype(); - worker_fun_template->PrototypeTemplate()->Set( - isolate, "terminate", - FunctionTemplate::New(isolate, WorkerTerminate, Local<Value>(), - worker_signature)); - worker_fun_template->PrototypeTemplate()->Set( - isolate, "postMessage", - FunctionTemplate::New(isolate, WorkerPostMessage, Local<Value>(), - worker_signature)); - worker_fun_template->PrototypeTemplate()->Set( - isolate, "getMessage", - FunctionTemplate::New(isolate, WorkerGetMessage, Local<Value>(), - worker_signature)); - worker_fun_template->InstanceTemplate()->SetInternalFieldCount(1); - global_template->Set(isolate, "Worker", worker_fun_template); - - Local<ObjectTemplate> os_templ = ObjectTemplate::New(isolate); - AddOSMethods(isolate, os_templ); - global_template->Set(isolate, "os", os_templ); - - if (i::FLAG_expose_async_hooks) { - Local<ObjectTemplate> async_hooks_templ = ObjectTemplate::New(isolate); - async_hooks_templ->Set( - isolate, "createHook", - FunctionTemplate::New(isolate, AsyncHooksCreateHook)); - async_hooks_templ->Set( - isolate, "executionAsyncId", - FunctionTemplate::New(isolate, AsyncHooksExecutionAsyncId)); - async_hooks_templ->Set( - isolate, "triggerAsyncId", - FunctionTemplate::New(isolate, AsyncHooksTriggerAsyncId)); - global_template->Set(isolate, "async_hooks", async_hooks_templ); - } - { - Local<ObjectTemplate> promise_template = ObjectTemplate::New(isolate); - promise_template->Set( - isolate, "setHooks", - FunctionTemplate::New(isolate, SetPromiseHooks, Local<Value>(), - Local<Signature>(), 4)); - global_template->Set(isolate, "promise", promise_template); - } - return global_template; + return realm_template; +} +Local<ObjectTemplate> Shell::CreateD8Template(Isolate* isolate) { + Local<ObjectTemplate> d8_template = ObjectTemplate::New(isolate); + d8_template->Set(isolate, "promise", + Shell::CreatePromiseHookTemplate(isolate)); + return d8_template; } static void PrintMessageCallback(Local<Message> message, Local<Value> error) { diff --git a/deps/v8/src/d8/d8.h b/deps/v8/src/d8/d8.h index b4fbde5a9d6..069115525d4 100644 --- a/deps/v8/src/d8/d8.h +++ b/deps/v8/src/d8/d8.h @@ -492,7 +492,17 @@ class Shell : public i::AllStatic { static Local<String> Stringify(Isolate* isolate, Local<Value> value); static void RunShell(Isolate* isolate); static bool SetOptions(int argc, char* argv[]); + static Local<ObjectTemplate> CreateGlobalTemplate(Isolate* isolate); + static Local<ObjectTemplate> CreateOSTemplate(Isolate* isolate); + static Local<FunctionTemplate> CreateWorkerTemplate(Isolate* isolate); + static Local<ObjectTemplate> CreateAsyncHookTemplate(Isolate* isolate); + static Local<ObjectTemplate> CreatePromiseHookTemplate(Isolate* isolate); + static Local<ObjectTemplate> CreateTestRunnerTemplate(Isolate* isolate); + static Local<ObjectTemplate> CreatePerformanceTemplate(Isolate* isolate); + static Local<ObjectTemplate> CreateRealmTemplate(Isolate* isolate); + static Local<ObjectTemplate> CreateD8Template(Isolate* isolate); + static MaybeLocal<Context> CreateRealm( const v8::FunctionCallbackInfo<v8::Value>& args, int index, v8::MaybeLocal<Value> global_object); |