diff options
author | Ryan Dahl <ry@tinyclouds.org> | 2018-06-13 20:55:08 +0200 |
---|---|---|
committer | Ryan Dahl <ry@tinyclouds.org> | 2018-06-14 14:19:17 +0200 |
commit | f97216609d1705a21ddbe6ca3efb04817f026fc3 (patch) | |
tree | 880f988963f5918d62f458b143854381a7c71a1f /deno2/deno.cc | |
parent | 0888f2b2aefecbf65c5430ebb1543f1e86a4f4c0 (diff) |
Add InitializeContext for future deno_nosnapshot target.
Diffstat (limited to 'deno2/deno.cc')
-rw-r--r-- | deno2/deno.cc | 46 |
1 files changed, 25 insertions, 21 deletions
diff --git a/deno2/deno.cc b/deno2/deno.cc index 521eb7cf9..27dfefb8e 100644 --- a/deno2/deno.cc +++ b/deno2/deno.cc @@ -212,6 +212,30 @@ v8::StartupData SerializeInternalFields(v8::Local<v8::Object> holder, int index, return {payload, size}; } +void InitializeContext(v8::Isolate* isolate, v8::Local<v8::Context> context, + const char* js_filename, const char* js_source) { + v8::HandleScope handle_scope(isolate); + v8::Context::Scope context_scope(context); + + auto global = context->Global(); + // TODO(ry) Add a global namespace object "deno" and move print, sub, and + // pub inside that object. + auto print_tmpl = v8::FunctionTemplate::New(isolate, Print); + auto print_val = print_tmpl->GetFunction(context).ToLocalChecked(); + CHECK(global->Set(context, deno::v8_str("denoPrint"), print_val).FromJust()); + + auto sub_tmpl = v8::FunctionTemplate::New(isolate, Sub); + auto sub_val = sub_tmpl->GetFunction(context).ToLocalChecked(); + CHECK(global->Set(context, deno::v8_str("denoSub"), sub_val).FromJust()); + + auto pub_tmpl = v8::FunctionTemplate::New(isolate, Pub); + auto pub_val = pub_tmpl->GetFunction(context).ToLocalChecked(); + CHECK(global->Set(context, deno::v8_str("denoPub"), pub_val).FromJust()); + + bool r = Execute(context, js_filename, js_source); + CHECK(r); +} + v8::StartupData MakeSnapshot(v8::StartupData* prev_natives_blob, v8::StartupData* prev_snapshot_blob, const char* js_filename, const char* js_source) { @@ -224,27 +248,7 @@ v8::StartupData MakeSnapshot(v8::StartupData* prev_natives_blob, { v8::HandleScope handle_scope(isolate); auto context = v8::Context::New(isolate); - v8::Context::Scope context_scope(context); - - auto global = context->Global(); - // TODO(ry) Add a global namespace object "deno" and move print, sub, and - // pub inside that object. - auto print_tmpl = v8::FunctionTemplate::New(isolate, Print); - auto print_val = print_tmpl->GetFunction(context).ToLocalChecked(); - CHECK( - global->Set(context, deno::v8_str("denoPrint"), print_val).FromJust()); - - auto sub_tmpl = v8::FunctionTemplate::New(isolate, Sub); - auto sub_val = sub_tmpl->GetFunction(context).ToLocalChecked(); - CHECK(global->Set(context, deno::v8_str("denoSub"), sub_val).FromJust()); - - auto pub_tmpl = v8::FunctionTemplate::New(isolate, Pub); - auto pub_val = pub_tmpl->GetFunction(context).ToLocalChecked(); - CHECK(global->Set(context, deno::v8_str("denoPub"), pub_val).FromJust()); - - bool r = Execute(context, js_filename, js_source); - CHECK(r); - + InitializeContext(isolate, context, js_filename, js_source); creator->SetDefaultContext(context, v8::SerializeInternalFieldsCallback( SerializeInternalFields, nullptr)); } |