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

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, 9 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..d99550effadb273ae5ed4420952612135cfddb58 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,37 @@
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}}))
+ auto result = UnionType::New(UnionType::{{field.name}});
+ if (!input.Read{{name|under_to_camel}}(&result->get_{{name}}()))
return false;
+ *output = std::move(result);
{%- 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(UnionType::{{field.name}}, 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}}));
+ input.Take{{name|under_to_camel}}<typename std::remove_reference<decltype((*output)->get_{{name}}())>::type>();
+ *output = UnionType::New(UnionType::{{field.name}}, std::move(result_{{name}}));
{%- elif kind|is_enum_kind %}
- decltype(result->get_{{name}}()) result_{{name}};
+ decltype((*output)->get_{{name}}()) result_{{name}};
if (!input.Read{{name|under_to_camel}}(&result_{{name}}))
return false;
- result->set_{{name}}(result_{{name}});
+ *output = UnionType::New(UnionType::{{field.name}}, result_{{name}});
{%- else %}
- result->set_{{name}}(input.{{name}}());
+ *output = UnionType::New(UnionType::{{field.name}}, input.{{name}}());
{%- endif %}
break;
}

Powered by Google App Engine
This is Rietveld 408576698