Index: src/snapshot/code-serializer.cc |
diff --git a/src/snapshot/code-serializer.cc b/src/snapshot/code-serializer.cc |
index 73edbff4f49020f0531f1ed877d0486bdcdf9b4e..197c569c84610081fd532d50b7120476f981237f 100644 |
--- a/src/snapshot/code-serializer.cc |
+++ b/src/snapshot/code-serializer.cc |
@@ -229,14 +229,20 @@ MaybeHandle<SharedFunctionInfo> CodeSerializer::Deserialize( |
return scope.CloseAndEscape(result); |
} |
+WasmCompiledModuleSerializer::WasmCompiledModuleSerializer( |
+ Isolate* isolate, uint32_t source_hash, Handle<Context> native_context, |
+ Handle<SeqOneByteString> module_bytes) |
+ : CodeSerializer(isolate, source_hash) { |
+ reference_map()->AddAttachedReference(*isolate->native_context()); |
+ reference_map()->AddAttachedReference(*module_bytes); |
+} |
+ |
std::unique_ptr<ScriptData> WasmCompiledModuleSerializer::SerializeWasmModule( |
Isolate* isolate, Handle<FixedArray> input) { |
Handle<WasmCompiledModule> compiled_module = |
Handle<WasmCompiledModule>::cast(input); |
- WasmCompiledModuleSerializer wasm_cs(isolate, 0); |
- wasm_cs.reference_map()->AddAttachedReference(*isolate->native_context()); |
- wasm_cs.reference_map()->AddAttachedReference( |
- compiled_module->module_bytes()); |
+ WasmCompiledModuleSerializer wasm_cs(isolate, 0, isolate->native_context(), |
+ handle(compiled_module->module_bytes())); |
ScriptData* data = wasm_cs.Serialize(compiled_module); |
return std::unique_ptr<ScriptData>(data); |
} |
@@ -277,11 +283,35 @@ MaybeHandle<FixedArray> WasmCompiledModuleSerializer::DeserializeWasmModule( |
Handle<WasmCompiledModule> compiled_module( |
static_cast<WasmCompiledModule*>(*obj.ToHandleChecked()), isolate); |
- WasmCompiledModule::RecreateModuleWrapper(isolate, compiled_module); |
+ WasmCompiledModule::ReinitializeAfterDeserialization(isolate, |
+ compiled_module); |
DCHECK(WasmCompiledModule::IsWasmCompiledModule(*compiled_module)); |
return compiled_module; |
} |
+void WasmCompiledModuleSerializer::SerializeCodeObject( |
+ Code* code_object, HowToCode how_to_code, WhereToPoint where_to_point) { |
+ Code::Kind kind = code_object->kind(); |
+ switch (kind) { |
+ case Code::WASM_FUNCTION: |
+ case Code::JS_TO_WASM_FUNCTION: |
+ // Just serialize the code_object. |
+ break; |
+ case Code::WASM_TO_JS_FUNCTION: |
+ // Serialize the illegal builtin instead. On instantiation of a |
+ // deserialized module, these will be replaced again. |
+ code_object = *isolate()->builtins()->Illegal(); |
+ break; |
+ default: |
+ UNREACHABLE(); |
+ } |
+ SerializeGeneric(code_object, how_to_code, where_to_point); |
+} |
+ |
+bool WasmCompiledModuleSerializer::ElideObject(Object* obj) { |
+ return obj->IsWeakCell() || obj->IsForeign() || obj->IsBreakPointInfo(); |
+} |
+ |
class Checksum { |
public: |
explicit Checksum(Vector<const byte> payload) { |