Commit 6798619a authored by Camillo Bruni's avatar Camillo Bruni Committed by Commit Bot

[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:1064
Change-Id: I84e434452463afb93ae403f890d8841b20b00703
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2400990Reviewed-by: 's avatarToon Verwaest <verwaest@chromium.org>
Commit-Queue: Camillo Bruni <cbruni@chromium.org>
Cr-Commit-Position: refs/heads/master@{#69801}
parent c06d24b9
...@@ -2071,6 +2071,11 @@ Local<String> Shell::Stringify(Isolate* isolate, Local<Value> value) { ...@@ -2071,6 +2071,11 @@ Local<String> Shell::Stringify(Isolate* isolate, Local<Value> value) {
Local<ObjectTemplate> Shell::CreateGlobalTemplate(Isolate* isolate) { Local<ObjectTemplate> Shell::CreateGlobalTemplate(Isolate* isolate) {
Local<ObjectTemplate> global_template = ObjectTemplate::New(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, "print", FunctionTemplate::New(isolate, Print));
global_template->Set(isolate, "printErr", global_template->Set(isolate, "printErr",
FunctionTemplate::New(isolate, PrintErr)); FunctionTemplate::New(isolate, PrintErr));
...@@ -2089,57 +2094,37 @@ Local<ObjectTemplate> Shell::CreateGlobalTemplate(Isolate* isolate) { ...@@ -2089,57 +2094,37 @@ Local<ObjectTemplate> Shell::CreateGlobalTemplate(Isolate* isolate) {
if (!options.omit_quit) { if (!options.omit_quit) {
global_template->Set(isolate, "quit", FunctionTemplate::New(isolate, Quit)); global_template->Set(isolate, "quit", FunctionTemplate::New(isolate, Quit));
} }
Local<ObjectTemplate> test_template = ObjectTemplate::New(isolate); global_template->Set(isolate, "testRunner",
global_template->Set(isolate, "testRunner", test_template); Shell::CreateTestRunnerTemplate(isolate));
test_template->Set(isolate, "notifyDone", global_template->Set(isolate, "Realm", Shell::CreateRealmTemplate(isolate));
FunctionTemplate::New(isolate, NotifyDone)); global_template->Set(isolate, "performance",
test_template->Set(isolate, "waitUntilDone", Shell::CreatePerformanceTemplate(isolate));
FunctionTemplate::New(isolate, WaitUntilDone)); global_template->Set(isolate, "Worker", Shell::CreateWorkerTemplate(isolate));
// Reliable access to quit functionality. The "quit" method function global_template->Set(isolate, "os", Shell::CreateOSTemplate(isolate));
// installed on the global object can be hidden with the --omit-quit flag global_template->Set(isolate, "d8", Shell::CreateD8Template(isolate));
// (e.g. on asan bots).
test_template->Set(isolate, "quit", FunctionTemplate::New(isolate, Quit));
global_template->Set(isolate, "version", #ifdef V8_FUZZILLI
FunctionTemplate::New(isolate, Version)); global_template->Set(
global_template->Set(Symbol::GetToStringTag(isolate), String::NewFromUtf8(isolate, "fuzzilli", NewStringType::kNormal)
String::NewFromUtf8Literal(isolate, "global")); .ToLocalChecked(),
FunctionTemplate::New(isolate, Fuzzilli), PropertyAttribute::DontEnum);
#endif // V8_FUZZILLI
// Bind the Realm object. if (i::FLAG_expose_async_hooks) {
Local<ObjectTemplate> realm_template = ObjectTemplate::New(isolate); global_template->Set(isolate, "async_hooks",
realm_template->Set(isolate, "current", Shell::CreateAsyncHookTemplate(isolate));
FunctionTemplate::New(isolate, RealmCurrent)); }
realm_template->Set(isolate, "owner",
FunctionTemplate::New(isolate, RealmOwner));
realm_template->Set(isolate, "global",
FunctionTemplate::New(isolate, RealmGlobal));
realm_template->Set(isolate, "create",
FunctionTemplate::New(isolate, RealmCreate));
realm_template->Set(
isolate, "createAllowCrossRealmAccess",
FunctionTemplate::New(isolate, RealmCreateAllowCrossRealmAccess));
realm_template->Set(isolate, "navigate",
FunctionTemplate::New(isolate, RealmNavigate));
realm_template->Set(isolate, "detachGlobal",
FunctionTemplate::New(isolate, RealmDetachGlobal));
realm_template->Set(isolate, "dispose",
FunctionTemplate::New(isolate, RealmDispose));
realm_template->Set(isolate, "switch",
FunctionTemplate::New(isolate, RealmSwitch));
realm_template->Set(isolate, "eval",
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); return global_template;
performance_template->Set(isolate, "now", }
FunctionTemplate::New(isolate, PerformanceNow));
performance_template->Set( Local<ObjectTemplate> Shell::CreateOSTemplate(Isolate* isolate) {
isolate, "measureMemory", Local<ObjectTemplate> os_template = ObjectTemplate::New(isolate);
FunctionTemplate::New(isolate, PerformanceMeasureMemory)); AddOSMethods(isolate, os_template);
global_template->Set(isolate, "performance", performance_template); return os_template;
}
Local<FunctionTemplate> Shell::CreateWorkerTemplate(Isolate* isolate) {
Local<FunctionTemplate> worker_fun_template = Local<FunctionTemplate> worker_fun_template =
FunctionTemplate::New(isolate, WorkerNew); FunctionTemplate::New(isolate, WorkerNew);
Local<Signature> worker_signature = Local<Signature> worker_signature =
...@@ -2164,23 +2149,12 @@ Local<ObjectTemplate> Shell::CreateGlobalTemplate(Isolate* isolate) { ...@@ -2164,23 +2149,12 @@ Local<ObjectTemplate> Shell::CreateGlobalTemplate(Isolate* isolate) {
FunctionTemplate::New(isolate, WorkerGetMessage, Local<Value>(), FunctionTemplate::New(isolate, WorkerGetMessage, Local<Value>(),
worker_signature)); worker_signature));
worker_fun_template->InstanceTemplate()->SetInternalFieldCount(1); worker_fun_template->InstanceTemplate()->SetInternalFieldCount(1);
global_template->Set(isolate, "Worker", worker_fun_template); return worker_fun_template;
}
Local<ObjectTemplate> os_templ = ObjectTemplate::New(isolate);
AddOSMethods(isolate, os_templ);
global_template->Set(isolate, "os", os_templ);
#ifdef V8_FUZZILLI
global_template->Set(
String::NewFromUtf8(isolate, "fuzzilli", NewStringType::kNormal)
.ToLocalChecked(),
FunctionTemplate::New(isolate, Fuzzilli), PropertyAttribute::DontEnum);
#endif // V8_FUZZILLI
if (i::FLAG_expose_async_hooks) { Local<ObjectTemplate> Shell::CreateAsyncHookTemplate(Isolate* isolate) {
Local<ObjectTemplate> async_hooks_templ = ObjectTemplate::New(isolate); Local<ObjectTemplate> async_hooks_templ = ObjectTemplate::New(isolate);
async_hooks_templ->Set( async_hooks_templ->Set(isolate, "createHook",
isolate, "createHook",
FunctionTemplate::New(isolate, AsyncHooksCreateHook)); FunctionTemplate::New(isolate, AsyncHooksCreateHook));
async_hooks_templ->Set( async_hooks_templ->Set(
isolate, "executionAsyncId", isolate, "executionAsyncId",
...@@ -2188,10 +2162,63 @@ Local<ObjectTemplate> Shell::CreateGlobalTemplate(Isolate* isolate) { ...@@ -2188,10 +2162,63 @@ Local<ObjectTemplate> Shell::CreateGlobalTemplate(Isolate* isolate) {
async_hooks_templ->Set( async_hooks_templ->Set(
isolate, "triggerAsyncId", isolate, "triggerAsyncId",
FunctionTemplate::New(isolate, AsyncHooksTriggerAsyncId)); FunctionTemplate::New(isolate, AsyncHooksTriggerAsyncId));
global_template->Set(isolate, "async_hooks", async_hooks_templ); return async_hooks_templ;
} }
return global_template; Local<ObjectTemplate> Shell::CreateTestRunnerTemplate(Isolate* isolate) {
Local<ObjectTemplate> test_template = ObjectTemplate::New(isolate);
test_template->Set(isolate, "notifyDone",
FunctionTemplate::New(isolate, NotifyDone));
test_template->Set(isolate, "waitUntilDone",
FunctionTemplate::New(isolate, WaitUntilDone));
// Reliable access to quit functionality. The "quit" method function
// 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;
}
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;
}
Local<ObjectTemplate> Shell::CreateRealmTemplate(Isolate* isolate) {
Local<ObjectTemplate> realm_template = ObjectTemplate::New(isolate);
realm_template->Set(isolate, "current",
FunctionTemplate::New(isolate, RealmCurrent));
realm_template->Set(isolate, "owner",
FunctionTemplate::New(isolate, RealmOwner));
realm_template->Set(isolate, "global",
FunctionTemplate::New(isolate, RealmGlobal));
realm_template->Set(isolate, "create",
FunctionTemplate::New(isolate, RealmCreate));
realm_template->Set(
isolate, "createAllowCrossRealmAccess",
FunctionTemplate::New(isolate, RealmCreateAllowCrossRealmAccess));
realm_template->Set(isolate, "navigate",
FunctionTemplate::New(isolate, RealmNavigate));
realm_template->Set(isolate, "detachGlobal",
FunctionTemplate::New(isolate, RealmDetachGlobal));
realm_template->Set(isolate, "dispose",
FunctionTemplate::New(isolate, RealmDispose));
realm_template->Set(isolate, "switch",
FunctionTemplate::New(isolate, RealmSwitch));
realm_template->Set(isolate, "eval",
FunctionTemplate::New(isolate, RealmEval));
realm_template->SetAccessor(String::NewFromUtf8Literal(isolate, "shared"),
RealmSharedGet, RealmSharedSet);
return realm_template;
}
Local<ObjectTemplate> Shell::CreateD8Template(Isolate* isolate) {
Local<ObjectTemplate> d8_template = ObjectTemplate::New(isolate);
return d8_template;
} }
static void PrintMessageCallback(Local<Message> message, Local<Value> error) { static void PrintMessageCallback(Local<Message> message, Local<Value> error) {
......
...@@ -539,7 +539,16 @@ class Shell : public i::AllStatic { ...@@ -539,7 +539,16 @@ class Shell : public i::AllStatic {
static Local<String> Stringify(Isolate* isolate, Local<Value> value); static Local<String> Stringify(Isolate* isolate, Local<Value> value);
static void RunShell(Isolate* isolate); static void RunShell(Isolate* isolate);
static bool SetOptions(int argc, char* argv[]); static bool SetOptions(int argc, char* argv[]);
static Local<ObjectTemplate> CreateGlobalTemplate(Isolate* isolate); 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> 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( static MaybeLocal<Context> CreateRealm(
const v8::FunctionCallbackInfo<v8::Value>& args, int index, const v8::FunctionCallbackInfo<v8::Value>& args, int index,
v8::MaybeLocal<Value> global_object); v8::MaybeLocal<Value> global_object);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment