summaryrefslogtreecommitdiff
path: root/deno2/deno.cc
diff options
context:
space:
mode:
authorRyan Dahl <ry@tinyclouds.org>2018-06-12 06:36:01 +0200
committerRyan Dahl <ry@tinyclouds.org>2018-06-12 17:26:18 +0200
commit7784cc2c1537a23b8b8ffa634b1a9b1ddf88886a (patch)
tree9c9d1de258b586e7fe866b8a4085cecf9fda430a /deno2/deno.cc
parentdd48f8095c3357e6ec0e66042141c4e342707da5 (diff)
Fix protobufjs snapshotting.
Diffstat (limited to 'deno2/deno.cc')
-rw-r--r--deno2/deno.cc16
1 files changed, 15 insertions, 1 deletions
diff --git a/deno2/deno.cc b/deno2/deno.cc
index 26222d3b8..991654612 100644
--- a/deno2/deno.cc
+++ b/deno2/deno.cc
@@ -199,6 +199,19 @@ bool Execute(v8::Local<v8::Context> context, const char* js_filename,
return true;
}
+v8::StartupData SerializeInternalFields(v8::Local<v8::Object> holder, int index,
+ void* data) {
+ assert(data == nullptr); // TODO(ry) pass Deno* object here.
+ InternalFieldData* embedder_field = static_cast<InternalFieldData*>(
+ holder->GetAlignedPointerFromInternalField(index));
+ if (embedder_field == nullptr) return {nullptr, 0};
+ int size = sizeof(*embedder_field);
+ char* payload = new char[size];
+ // We simply use memcpy to serialize the content.
+ memcpy(payload, embedder_field, size);
+ return {payload, size};
+}
+
v8::StartupData MakeSnapshot(v8::StartupData* prev_natives_blob,
v8::StartupData* prev_snapshot_blob,
const char* js_filename, const char* js_source) {
@@ -232,7 +245,8 @@ v8::StartupData MakeSnapshot(v8::StartupData* prev_natives_blob,
bool r = Execute(context, js_filename, js_source);
assert(r);
- creator->SetDefaultContext(context);
+ creator->SetDefaultContext(context, v8::SerializeInternalFieldsCallback(
+ SerializeInternalFields, nullptr));
}
auto snapshot_blob =