| Index: mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl
|
| diff --git a/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl
|
| index 48b76e5403800490cc49e7c930eebb72ada50323..25a3ee414af454bf8aef95a1374abba0078c2364 100644
|
| --- a/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl
|
| +++ b/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl
|
| @@ -16,6 +16,10 @@
|
| {%- for pf in struct.packed.packed_fields_in_ordinal_order if pf.field.kind|is_object_kind %}
|
| {%- if pf.field.kind|is_union_kind %}
|
| size += GetSerializedSize_({{input_field_pattern|format(pf.field.name)}}, true);
|
| +{%- elif pf.field.kind|is_struct_kind %}
|
| + size += {{input_field_pattern|format(pf.field.name)}}.is_null()
|
| + ? 0
|
| + : GetSerializedSize_(*{{input_field_pattern|format(pf.field.name)}});
|
| {%- else %}
|
| size += GetSerializedSize_({{input_field_pattern|format(pf.field.name)}});
|
| {%- endif %}
|
| @@ -47,19 +51,21 @@
|
| {%- if kind|is_array_kind %}
|
| const mojo::internal::ArrayValidateParams {{name}}_validate_params(
|
| {{kind|get_array_validate_params_ctor_args|indent(10)}});
|
| - mojo::SerializeArray_(mojo::internal::Forward({{input_field}}), {{buffer}},
|
| + mojo::SerializeArray_(&{{input_field}}, {{buffer}},
|
| &{{output}}->{{name}}.ptr, &{{name}}_validate_params);
|
| {%- elif kind|is_map_kind %}
|
| const mojo::internal::ArrayValidateParams {{name}}_validate_params(
|
| {{kind.value_kind|get_map_validate_params_ctor_args|indent(10)}});
|
| mojo::SerializeMap_(
|
| - mojo::internal::Forward({{input_field}}), {{buffer}}, &{{output}}->{{name}}.ptr,
|
| + &{{input_field}}, {{buffer}}, &{{output}}->{{name}}.ptr,
|
| &{{name}}_validate_params);
|
| {%- elif kind|is_union_kind %}
|
| internal::{{kind.name}}_Data* {{name}}_ptr = &{{output}}->{{name}};
|
| - SerializeUnion_(mojo::internal::Forward({{input_field}}), {{buffer}}, &{{name}}_ptr, true);
|
| + SerializeUnion_({{input_field}}.get(), {{buffer}}, &{{name}}_ptr, true);
|
| +{%- elif kind|is_string_kind %}
|
| + SerializeString_({{input_field}}, {{buffer}}, &{{output}}->{{name}}.ptr);
|
| {%- else %}
|
| - Serialize_(mojo::internal::Forward({{input_field}}), {{buffer}}, &{{output}}->{{name}}.ptr);
|
| + Serialize_({{input_field}}.get(), {{buffer}}, &{{output}}->{{name}}.ptr);
|
| {%- endif %}
|
| {%- if not kind|is_nullable_kind %}
|
| MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING(
|
| @@ -126,8 +132,15 @@
|
| {%- endif %}
|
| {%- if kind|is_object_kind %}
|
| {%- if kind|is_union_kind %}
|
| - Deserialize_(&{{input}}->{{name}}, &{{output_field}});
|
| + {{output_field}} = {{kind|get_name_for_kind}}::New();
|
| + Deserialize_(&{{input}}->{{name}}, {{output_field}}.get());
|
| +{%- elif kind|is_struct_kind %}
|
| + if ({{input}}->{{name}}.ptr) {
|
| + {{output_field}} = {{kind|get_name_for_kind}}::New();
|
| + Deserialize_({{input}}->{{name}}.ptr, {{output_field}}.get());
|
| + }
|
| {%- else %}
|
| +{#- Arrays and Maps #}
|
| Deserialize_({{input}}->{{name}}.ptr, &{{output_field}});
|
| {%- endif %}
|
| {%- elif kind|is_interface_kind %}
|
|
|