| Index: third_party/mojo/src/mojo/public/tools/bindings/generators/cpp_templates/union_serialization_definition.tmpl
|
| diff --git a/third_party/mojo/src/mojo/public/tools/bindings/generators/cpp_templates/union_serialization_definition.tmpl b/third_party/mojo/src/mojo/public/tools/bindings/generators/cpp_templates/union_serialization_definition.tmpl
|
| index 7df17c1fead7dca9d9ca35cc54456bdf3e5ef7f7..c9cc307b1e716a105a60d2fb3446f24de8f2becb 100644
|
| --- a/third_party/mojo/src/mojo/public/tools/bindings/generators/cpp_templates/union_serialization_definition.tmpl
|
| +++ b/third_party/mojo/src/mojo/public/tools/bindings/generators/cpp_templates/union_serialization_definition.tmpl
|
| @@ -12,7 +12,11 @@ size_t GetSerializedSize_(const {{union.name}}Ptr& input, bool inlined) {
|
| {% for field in union.fields %}
|
| {% if field.kind|is_object_kind %}
|
| case {{union.name}}::Tag::{{field.name|upper}}:
|
| +{% if field.kind|is_union_kind %}
|
| + size += GetSerializedSize_(*(input_acc.data()->{{field.name}}), false);
|
| +{% else %}
|
| size += GetSerializedSize_(*(input_acc.data()->{{field.name}}));
|
| +{% endif %}
|
| break;
|
| {%- endif %}
|
| {%- endfor %}
|
| @@ -38,24 +42,34 @@ void SerializeUnion_({{union.name}}Ptr input, mojo::internal::Buffer* buf,
|
| {% for field in union.fields %}
|
| case {{union.name}}::Tag::{{field.name|upper}}: {
|
| {% if field.kind|is_object_kind %}
|
| - {{field.kind|cpp_field_type}}* {{field.name}}_ptr = reinterpret_cast<{{field.kind|cpp_field_type}}*>(&result->data.f_{{field.name}});
|
| {% if field.kind|is_string_kind %}
|
| - Serialize_(*(input_acc.data()->{{field.name}}), buf, &{{field.name}}_ptr->ptr);
|
| + Serialize_(
|
| + *(input_acc.data()->{{field.name}}),
|
| + buf, &result->data.f_{{field.name}}.ptr);
|
| {% elif field.kind|is_struct_kind %}
|
| - Serialize_(mojo::internal::Forward(*(input_acc.data()->{{field.name}})), buf, &{{field.name}}_ptr->ptr);
|
| + Serialize_(
|
| + mojo::internal::Forward(*(input_acc.data()->{{field.name}})),
|
| + buf, &result->data.f_{{field.name}}.ptr);
|
| +{% elif field.kind|is_union_kind %}
|
| + SerializeUnion_(
|
| + mojo::internal::Forward(*(input_acc.data()->{{field.name}})),
|
| + buf, &result->data.f_{{field.name}}.ptr, false);
|
| {% elif field.kind|is_array_kind %}
|
| const mojo::internal::ArrayValidateParams {{field.name}}_validate_params =
|
| {{field.kind|get_array_validate_params|indent(16)}};
|
| SerializeArray_(
|
| mojo::internal::Forward(*(input_acc.data()->{{field.name}})),
|
| - buf, &{{field.name}}_ptr->ptr, &{{field.name}}_validate_params);
|
| + buf, &result->data.f_{{field.name}}.ptr, &{{field.name}}_validate_params);
|
| {% elif field.kind|is_map_kind %}
|
| const mojo::internal::ArrayValidateParams {{field.name}}_validate_params =
|
| {{field.kind.value_kind|get_map_validate_params|indent(16)}};
|
| SerializeMap_(
|
| mojo::internal::Forward(*(input_acc.data()->{{field.name}})),
|
| - buf, &{{field.name}}_ptr->ptr, &{{field.name}}_validate_params);
|
| + buf, &result->data.f_{{field.name}}.ptr, &{{field.name}}_validate_params);
|
| {%- endif %}
|
| +{% elif field.kind|is_any_handle_kind %}
|
| + result->data.f_{{field.name}} =
|
| + input_acc.data()->{{field.name}}->release().value();
|
| {% else %}
|
| result->data.f_{{field.name}} = input_acc.data()->{{field.name}};
|
| {%- endif %}
|
| @@ -81,8 +95,13 @@ void Deserialize_(internal::{{union.name}}_Data* input,
|
| case {{union.name}}::Tag::{{field.name|upper}}: {
|
| {% if field.kind|is_object_kind %}
|
| result_acc.SwitchActive({{union.name}}::Tag::{{field.name|upper}});
|
| - {{field.kind|cpp_field_type}}* {{field.name}}_ptr = reinterpret_cast<{{field.kind|cpp_field_type}}*>(&input->data.f_{{field.name}});
|
| - Deserialize_({{field.name}}_ptr->ptr, result_acc.data()->{{field.name}});
|
| + Deserialize_(input->data.f_{{field.name}}.ptr, result_acc.data()->{{field.name}});
|
| +{% elif field.kind|is_any_handle_kind %}
|
| + {{field.kind|cpp_wrapper_type}}* {{field.name}} =
|
| + reinterpret_cast<{{field.kind|cpp_wrapper_type}}*>(&input->data.f_{{field.name}});
|
| + result->set_{{field.name}}({{field.name}}->Pass());
|
| +{% elif field.kind|is_enum_kind %}
|
| + result->set_{{field.name}}(static_cast<{{field.kind|cpp_wrapper_type}}>(input->data.f_{{field.name}}));
|
| {% else %}
|
| result->set_{{field.name}}(input->data.f_{{field.name}});
|
| {%- endif %}
|
|
|