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 %} |