Index: src/value-serializer.cc |
diff --git a/src/value-serializer.cc b/src/value-serializer.cc |
index 6017da86aa9b52659e05615a852bd657002f2182..a6e741042f6b5640319500ee8596a9b782407b37 100644 |
--- a/src/value-serializer.cc |
+++ b/src/value-serializer.cc |
@@ -449,12 +449,7 @@ Maybe<bool> ValueSerializer::WriteJSReceiver(Handle<JSReceiver> receiver) { |
case JS_OBJECT_TYPE: |
case JS_API_OBJECT_TYPE: { |
Handle<JSObject> js_object = Handle<JSObject>::cast(receiver); |
- Map* map = js_object->map(); |
- if (!FLAG_wasm_disable_structured_cloning && |
- map->GetConstructor() == |
- isolate_->native_context()->wasm_module_constructor()) { |
- return WriteWasmModule(js_object); |
- } else if (JSObject::GetEmbedderFieldCount(map)) { |
+ if (JSObject::GetEmbedderFieldCount(js_object->map())) { |
return WriteHostObject(js_object); |
} else { |
return WriteJSObject(js_object); |
@@ -479,6 +474,11 @@ Maybe<bool> ValueSerializer::WriteJSReceiver(Handle<JSReceiver> receiver) { |
case JS_TYPED_ARRAY_TYPE: |
case JS_DATA_VIEW_TYPE: |
return WriteJSArrayBufferView(JSArrayBufferView::cast(*receiver)); |
+ case WASM_MODULE_TYPE: |
+ if (!FLAG_wasm_disable_structured_cloning) { |
+ // Only write WebAssembly modules if not disabled by a flag. |
+ return WriteWasmModule(Handle<WasmModuleObject>::cast(receiver)); |
+ } // fall through to error case |
default: |
ThrowDataCloneError(MessageTemplate::kDataCloneError, receiver); |
return Nothing<bool>(); |
@@ -815,11 +815,13 @@ Maybe<bool> ValueSerializer::WriteJSArrayBufferView(JSArrayBufferView* view) { |
return ThrowIfOutOfMemory(); |
} |
-Maybe<bool> ValueSerializer::WriteWasmModule(Handle<JSObject> object) { |
+Maybe<bool> ValueSerializer::WriteWasmModule(Handle<WasmModuleObject> object) { |
if (delegate_ != nullptr) { |
+ // TODO(titzer): introduce a Utils::ToLocal for WasmModuleObject. |
Maybe<uint32_t> transfer_id = delegate_->GetWasmModuleTransferId( |
reinterpret_cast<v8::Isolate*>(isolate_), |
- v8::Local<v8::WasmCompiledModule>::Cast(Utils::ToLocal(object))); |
+ v8::Local<v8::WasmCompiledModule>::Cast( |
+ Utils::ToLocal(Handle<JSObject>::cast(object)))); |
RETURN_VALUE_IF_SCHEDULED_EXCEPTION(isolate_, Nothing<bool>()); |
uint32_t id = 0; |
if (transfer_id.To(&id)) { |
@@ -829,8 +831,7 @@ Maybe<bool> ValueSerializer::WriteWasmModule(Handle<JSObject> object) { |
} |
} |
- Handle<WasmCompiledModule> compiled_part( |
- WasmCompiledModule::cast(object->GetEmbedderField(0)), isolate_); |
+ Handle<WasmCompiledModule> compiled_part(object->compiled_module(), isolate_); |
WasmEncodingTag encoding_tag = WasmEncodingTag::kRawBytes; |
WriteTag(SerializationTag::kWasmModule); |
WriteRawBytes(&encoding_tag, sizeof(encoding_tag)); |