summaryrefslogtreecommitdiff
path: root/deno2/deno.cc
diff options
context:
space:
mode:
authorRyan Dahl <ry@tinyclouds.org>2018-06-13 20:55:08 +0200
committerRyan Dahl <ry@tinyclouds.org>2018-06-14 14:19:17 +0200
commitf97216609d1705a21ddbe6ca3efb04817f026fc3 (patch)
tree880f988963f5918d62f458b143854381a7c71a1f /deno2/deno.cc
parent0888f2b2aefecbf65c5430ebb1543f1e86a4f4c0 (diff)
Add InitializeContext for future deno_nosnapshot target.
Diffstat (limited to 'deno2/deno.cc')
-rw-r--r--deno2/deno.cc46
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));
}