Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(92)

Unified Diff: mojo/public/tools/bindings/generators/cpp_templates/union_traits_definition.tmpl

Issue 2694843003: Add field-initializing factory static methods to generated mojo unions. (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;
}

Powered by Google App Engine
This is Rietveld 408576698