| {%- macro validate_not_null_ptr(field_expr, field, object_name) %} |
| if (!{{field_expr}}->offset) { |
| ReportValidationError( |
| mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER, |
| "null {{field.name}} field in {{object_name}}"); |
| return false; |
| } |
| {%- endmacro %} |
| |
| {%- macro validate_encoded_ptr(field_expr) %} |
| if (!mojo::internal::ValidateEncodedPointer(&{{field_expr}}->offset)) { |
| ReportValidationError(mojo::internal::VALIDATION_ERROR_ILLEGAL_POINTER); |
| return false; |
| } |
| {%- endmacro %} |
| |
| {%- macro validate_array_or_string(field_expr, field) -%} |
| if (!{{field.kind|cpp_wrapper_type}}::Data_::Validate< |
| {{field.kind|get_array_validate_params}}>( |
| mojo::internal::DecodePointerRaw(&{{field_expr}}->offset), |
| bounds_checker)) { |
| return false; |
| } |
| {%- endmacro %} |
| |
| {%- macro validate_union_field(field, union) %} |
| {%- set field_expr = "(reinterpret_cast<const " |
| ~ field.kind|cpp_field_type |
| ~ "*>(&object->data.f_" |
| ~ field.name |
| ~ "))" -%} |
| {%- if field.kind|is_object_kind -%} |
| {%- if not field.kind|is_nullable_kind -%} |
| {{ validate_not_null_ptr(field_expr, field, union.name) }} |
| {%- endif %} |
| {{ validate_encoded_ptr(field_expr) }} |
| {%- endif %} |
| |
| {%- if field.kind|is_array_kind or field.kind|is_string_kind -%} |
| {{ validate_array_or_string(field_expr, field) }} |
| {%- endif %} |
| return true; |
| {%- endmacro %} |