| Index: mojo/public/tools/bindings/generators/cpp_templates/union_traits_definition.tmpl
|
| diff --git a/mojo/public/tools/bindings/generators/cpp_templates/union_traits_definition.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/union_traits_definition.tmpl
|
| index cde3f95669369fad483f82f05dd8142acc45fef1..f4021424601c02581543743f34196f6958ea7ac4 100644
|
| --- a/mojo/public/tools/bindings/generators/cpp_templates/union_traits_definition.tmpl
|
| +++ b/mojo/public/tools/bindings/generators/cpp_templates/union_traits_definition.tmpl
|
| @@ -4,38 +4,38 @@
|
| bool UnionTraits<{{mojom_type}}::DataView, {{mojom_type}}Ptr>::Read(
|
| {{mojom_type}}::DataView input,
|
| {{mojom_type}}Ptr* output) {
|
| - *output = {{mojom_type}}::New();
|
| - {{mojom_type}}Ptr& result = *output;
|
| + using UnionType = {{mojom_type}};
|
| + using Tag = UnionType::Tag;
|
|
|
| - internal::UnionAccessor<{{mojom_type}}> result_acc(result.get());
|
| switch (input.tag()) {
|
| {%- for field in union.fields %}
|
| - case {{mojom_type}}::Tag::{{field.name|upper}}: {
|
| + case Tag::{{field.name|upper}}: {
|
| {%- set name = field.name %}
|
| {%- set kind = field.kind %}
|
| {%- set serializer_type = kind|unmapped_type_for_serializer %}
|
| {%- if kind|is_object_kind %}
|
| - result_acc.SwitchActive({{mojom_type}}::Tag::{{name|upper}});
|
| - if (!input.Read{{name|under_to_camel}}(result_acc.data()->{{name}}))
|
| + {{kind|cpp_wrapper_type(True)}} result_{{name}};
|
| + if (!input.Read{{name|under_to_camel}}(&result_{{name}}))
|
| return false;
|
|
|
| + *output = UnionType::New{{field.name|under_to_camel}}(
|
| + std::move(result_{{name}}));
|
| {%- elif kind|is_any_handle_kind %}
|
| - auto result_{{name}} = input.Take{{name|under_to_camel}}();
|
| - result->set_{{name}}(std::move(result_{{name}}));
|
| + *output = UnionType::New{{field.name|under_to_camel}}(
|
| + input.Take{{name|under_to_camel}}());
|
|
|
| {%- elif kind|is_any_interface_kind %}
|
| - auto result_{{name}} =
|
| - input.Take{{name|under_to_camel}}<typename std::remove_reference<decltype(result->get_{{name}}())>::type>();
|
| - result->set_{{name}}(std::move(result_{{name}}));
|
| + *output = UnionType::New{{field.name|under_to_camel}}(
|
| + input.Take{{name|under_to_camel}}<{{kind|cpp_wrapper_type(True)}}>());
|
|
|
| {%- elif kind|is_enum_kind %}
|
| - decltype(result->get_{{name}}()) result_{{name}};
|
| + {{kind|cpp_wrapper_type(True)}} result_{{name}};
|
| if (!input.Read{{name|under_to_camel}}(&result_{{name}}))
|
| return false;
|
| - result->set_{{name}}(result_{{name}});
|
|
|
| + *output = UnionType::New{{field.name|under_to_camel}}(result_{{name}});
|
| {%- else %}
|
| - result->set_{{name}}(input.{{name}}());
|
| + *output = UnionType::New{{field.name|under_to_camel}}(input.{{name}}());
|
| {%- endif %}
|
| break;
|
| }
|
|
|