diff options
author | Ryan Dahl <ry@tinyclouds.org> | 2018-06-12 06:36:01 +0200 |
---|---|---|
committer | Ryan Dahl <ry@tinyclouds.org> | 2018-06-12 17:26:18 +0200 |
commit | 7784cc2c1537a23b8b8ffa634b1a9b1ddf88886a (patch) | |
tree | 9c9d1de258b586e7fe866b8a4085cecf9fda430a /deno2/deno.cc | |
parent | dd48f8095c3357e6ec0e66042141c4e342707da5 (diff) |
Fix protobufjs snapshotting.
Diffstat (limited to 'deno2/deno.cc')
-rw-r--r-- | deno2/deno.cc | 16 |
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 = |