| 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 106a18d8c99a5c6bf4db8370f1728921d44363e4..2f8f2df86bf8f720f3464e675a580da14108950a 100644
|
| --- a/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl
|
| +++ b/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl
|
| @@ -1,3 +1,37 @@
|
| +{%- macro validate(struct, class_name) %}
|
| + if (!data)
|
| + return true;
|
| +
|
| + if (!ValidateStructHeader(
|
| + data, sizeof({{class_name}}),
|
| + {{struct.packed.packed_fields|length}}, bounds_checker)) {
|
| + return false;
|
| + }
|
| +
|
| + const {{class_name}}* MOJO_ALLOW_UNUSED object =
|
| + static_cast<const {{class_name}}*>(data);
|
| +
|
| +{%- for packed_field in struct.packed.packed_fields
|
| + if packed_field.field.kind|is_object_kind %}
|
| +{%- set wrapper_type = packed_field.field.kind|cpp_wrapper_type %}
|
| +{%- set name = packed_field.field.name %}
|
| + if (!mojo::internal::ValidateEncodedPointer(&object->{{name}}_.offset) ||
|
| + !{{wrapper_type}}::Data::Validate(
|
| + mojo::internal::DecodePointerRaw(&object->{{name}}_.offset),
|
| + bounds_checker)) {
|
| + return false;
|
| + }
|
| +{%- endfor %}
|
| +{%- for packed_field in struct.packed.packed_fields
|
| + if packed_field.field.kind|is_handle_kind %}
|
| +{%- set name = packed_field.field.name %}
|
| + if (!bounds_checker->ClaimHandle(object->{{name}}_))
|
| + return false;
|
| +{%- endfor %}
|
| +
|
| + return true;
|
| +{%- endmacro %}
|
| +
|
| {%- macro setters(struct) %}
|
| {% for packed_field in struct.packed.packed_fields %}
|
| {%- set type = packed_field.field.kind|cpp_type %}
|
|
|