summaryrefslogtreecommitdiff
path: root/deno2/deno.cc
diff options
context:
space:
mode:
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 =