| Index: mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl
|
| diff --git a/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl
|
| index 79a0bc4bb9cf77be61b02ca38bd2b6f98cdef642..32755cfa91f9f5a188e8b75902fd137473825c9c 100644
|
| --- a/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl
|
| +++ b/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl
|
| @@ -11,17 +11,23 @@
|
| {%- set kind = packed_field.field.kind %}
|
| {%- set wrapper_type = kind|cpp_wrapper_type %}
|
| {%- if not kind|is_nullable_kind %}
|
| +{%- if kind|is_union_kind %}
|
| + if (object->{{name}}.is_null()) {
|
| +{%- else %}
|
| if (!object->{{name}}.offset) {
|
| +{%- endif %}
|
| ReportValidationError(
|
| mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
|
| "null {{name}} field in {{struct.name}} struct");
|
| return false;
|
| }
|
| {%- endif %}
|
| +{%- if not kind|is_union_kind %}
|
| if (!mojo::internal::ValidateEncodedPointer(&object->{{name}}.offset)) {
|
| ReportValidationError(mojo::internal::VALIDATION_ERROR_ILLEGAL_POINTER);
|
| return false;
|
| }
|
| +{%- endif %}
|
| {%- if kind|is_array_kind or kind|is_string_kind %}
|
| if (!{{wrapper_type}}::Data_::Validate<
|
| {{kind|get_array_validate_params|indent(10)}}>(
|
| @@ -36,6 +42,9 @@
|
| if (!{{kind|get_name_for_kind}}::Data_::Validate(
|
| mojo::internal::DecodePointerRaw(&object->{{name}}.offset),
|
| bounds_checker)) {
|
| +{%- elif kind|is_union_kind %}
|
| + if (!{{kind|get_name_for_kind}}::Data_::Validate(
|
| + &object->{{name}}, bounds_checker, true)) {
|
| {%- else %}
|
| if (!{{wrapper_type}}::Data_::Validate(
|
| mojo::internal::DecodePointerRaw(&object->{{name}}.offset),
|
| @@ -139,7 +148,7 @@ void {{class_name}}::EncodePointersAndHandles(
|
| std::vector<mojo::Handle>* handles) {
|
| MOJO_CHECK(header_.version == {{struct.versions[-1].version}});
|
| {%- for pf in struct.packed.packed_fields_in_ordinal_order %}
|
| -{%- if pf.field.kind|is_object_kind %}
|
| +{%- if pf.field.kind|is_object_kind and not pf.field.kind|is_union_kind %}
|
| mojo::internal::Encode(&{{pf.field.name}}, handles);
|
| {%- elif pf.field.kind|is_any_handle_kind %}
|
| mojo::internal::EncodeHandle(&{{pf.field.name}}, handles);
|
| @@ -165,7 +174,9 @@ void {{class_name}}::DecodePointersAndHandles(
|
| if (header_.version < {{pf.min_version}})
|
| return;
|
| {%- endif %}
|
| -{%- if kind|is_object_kind %}
|
| +{%- if kind|is_union_kind %}
|
| + // TODO(azani): Decode handles in union.
|
| +{%- elif kind|is_object_kind %}
|
| mojo::internal::Decode(&{{name}}, handles);
|
| {%- else %}
|
| mojo::internal::DecodeHandle(&{{name}}, handles);
|
|
|