Chromium Code Reviews| 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..1c66fcd16e504020cf28bdd14baa304d3238454b 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,8 @@ |
| {%- 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)}}.get()); |
|
viettrungluu
2015/09/23 23:20:24
Can you break this line in some reasonable way?
A
vardhan
2015/09/25 19:33:05
Done.
|
| {%- else %} |
| size += GetSerializedSize_({{input_field_pattern|format(pf.field.name)}}); |
| {%- endif %} |
| @@ -47,19 +49,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 +130,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 %} |