| 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));
 | 
| 
 |