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 77f2ab06f4a31c16ba0456bf5c783b5030687f66..a877fc7adae3af83b24a442d89b3bb9bfb3d0e3e 100644 |
--- a/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl |
+++ b/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl |
@@ -1,59 +1,48 @@ |
{%- set class_name = struct.name ~ "_Data" %} |
-{#- TODO(yzshen): Consider eliminating _validate_object() and |
- _validate_handle(). #} |
- |
{#- Validates the specified struct field, which is supposed to be an object |
(struct/array/string/map/union). |
This macro is expanded by the Validate() method. #} |
{%- macro _validate_object(struct, packed_field) %} |
{%- set name = packed_field.field.name %} |
{%- 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"); |
+ if (!mojo::internal::ValidateInlinedUnionNonNullable( |
+ object->{{name}}, "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); |
+{%- else %} |
+ if (!mojo::internal::ValidatePointerNonNullable( |
+ object->{{name}}, "null {{name}} field in {{struct.name}} struct")) { |
return false; |
} |
+{%- endif %} |
{%- endif %} |
{%- if kind|is_array_kind or kind|is_string_kind %} |
const mojo::internal::ArrayValidateParams {{name}}_validate_params( |
{{kind|get_array_validate_params_ctor_args|indent(6)}}); |
- if (!{{wrapper_type}}::Data_::Validate( |
- mojo::internal::DecodePointerRaw(&object->{{name}}.offset), |
- bounds_checker, &{{name}}_validate_params)) { |
+ if (!mojo::internal::ValidateArray(object->{{name}}, bounds_checker, |
+ &{{name}}_validate_params)) { |
+ return false; |
+ } |
{%- elif kind|is_map_kind %} |
const mojo::internal::ArrayValidateParams {{name}}_validate_params( |
{{kind.value_kind|get_map_validate_params_ctor_args|indent(6)}}); |
- if (!{{wrapper_type}}::Data_::Validate( |
- mojo::internal::DecodePointerRaw(&object->{{name}}.offset), |
- bounds_checker, &{{name}}_validate_params)) { |
+ if (!mojo::internal::ValidateMap(object->{{name}}, bounds_checker, |
+ &{{name}}_validate_params)) { |
+ return false; |
+ } |
{%- elif kind|is_struct_kind %} |
- if (!{{kind|get_name_for_kind}}::Data_::Validate( |
- mojo::internal::DecodePointerRaw(&object->{{name}}.offset), |
- bounds_checker)) { |
+ if (!mojo::internal::ValidateStruct(object->{{name}}, bounds_checker)) |
+ return false; |
{%- 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), |
- bounds_checker)) { |
-{%- endif %} |
+ if (!mojo::internal::ValidateInlinedUnion(object->{{name}}, bounds_checker)) { |
return false; |
} |
+{%- else %} |
+#error Not reached! |
+{%- endif %} |
{%- endmacro %} |
{#- Validates the specified struct field, which is supposed to be a handle or |
@@ -68,24 +57,37 @@ |
const mojo::Handle {{name}}_handle = object->{{name}}; |
{%- endif %} |
{%- if not kind|is_nullable_kind %} |
- if ({{name}}_handle.value() == mojo::internal::kEncodedInvalidHandleValue) { |
- ReportValidationError( |
- mojo::internal::VALIDATION_ERROR_UNEXPECTED_INVALID_HANDLE, |
- "invalid {{name}} field in {{struct.name}} struct"); |
+ if (!mojo::internal::ValidateHandleNonNullable( |
+ {{name}}_handle, |
+ "invalid {{name}} field in {{struct.name}} struct")) { |
return false; |
} |
{%- endif %} |
- if (!bounds_checker->ClaimHandle({{name}}_handle)) { |
- ReportValidationError(mojo::internal::VALIDATION_ERROR_ILLEGAL_HANDLE); |
+ if (!mojo::internal::ValidateHandle({{name}}_handle, bounds_checker)) |
return false; |
- } |
{%- endmacro %} |
{#- Validates the specified struct field, which is supposed to be an associated |
interface or an associated interface request. |
This macro is expanded by the Validate() method. #} |
{%- macro _validate_associated(struct, packed_field) %} |
- // TODO(yzshen): add validation for associated kinds. |
+{%- set name = packed_field.field.name %} |
+{%- set kind = packed_field.field.kind %} |
+{%- if kind|is_associated_interface_kind %} |
+ const mojo::internal::InterfaceId {{name}}_interface_id = |
+ object->{{name}}.interface_id; |
+{%- else %} |
+ const mojo::internal::InterfaceId {{name}}_interface_id = object->{{name}}; |
+{%- endif %} |
+{%- if not kind|is_nullable_kind %} |
+ if (!mojo::internal::ValidateInterfaceIdNonNullable( |
+ {{name}}_interface_id, |
+ "invalid {{name}} field in {{struct.name}} struct")) { |
+ return false; |
+ } |
+{%- endif %} |
+ if (!mojo::internal::ValidateAssociatedInterfaceId({{name}}_interface_id)) |
+ return false; |
{%- endmacro %} |
// static |