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

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

Issue 1518293002: [mojo] Add Mojo bindings support for IPC::ParamTraits (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@pickle4
Patch Set: Created 5 years 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/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 f28948aab179fafae4b28a5638cafca67b68d79b..8f71c6566bccb10a992c8648fcefc1604a832395 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,11 @@
{%- 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_native_kind %}
+ // TODO(rockot): Support sizing of native kinds. This requires adding support
+ // to IPC::ParamTraits. It's not checked and is only used for preallocating
+ // space, so for now we just short the size result and let the buffer grow
+ // a little dynamically when needed.
{%- else %}
size += GetSerializedSize_({{input_field_pattern|format(pf.field.name)}});
{%- endif %}
@@ -57,6 +62,9 @@
{%- elif kind|is_union_kind %}
internal::{{kind.name}}_Data* {{name}}_ptr = &{{output}}->{{name}};
SerializeUnion_(std::move({{input_field}}), {{buffer}}, &{{name}}_ptr, true);
+{%- elif kind|is_native_kind %}
+ mojo::internal::SerializeNative_(
+ {{input_field}}, {{buffer}}, &{{output}}->{{name}}.ptr);
{%- else %}
Serialize_(std::move({{input_field}}), {{buffer}}, &{{output}}->{{name}}.ptr);
{%- endif %}
@@ -133,9 +141,16 @@
{%- endif %}
{%- if kind|is_object_kind %}
{%- if kind|is_union_kind %}
- Deserialize_(&{{input}}->{{name}}, &{{output_field}}, {{context}});
+ if (!Deserialize_(&{{input}}->{{name}}, &{{output_field}}, {{context}}))
+ return false;
+{%- elif kind|is_native_kind %}
+ if (!DeserializeNative_(
+ {{input}}->{{name}}.ptr, &{{output_field}}, {{context}})) {
+ return false;
+ }
{%- else %}
- Deserialize_({{input}}->{{name}}.ptr, &{{output_field}}, {{context}});
+ if (!Deserialize_({{input}}->{{name}}.ptr, &{{output_field}}, {{context}}))
+ return false;
{%- endif %}
{%- elif kind|is_interface_kind %}
mojo::internal::InterfaceDataToPointer(&{{input}}->{{name}}, &{{output_field}});

Powered by Google App Engine
This is Rietveld 408576698