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

Side by Side Diff: mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl

Issue 1618963006: Mojo C++ bindings: support enum validation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 months 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 unified diff | Download patch
OLDNEW
1 {%- set class_name = struct.name ~ "_Data" %} 1 {%- set class_name = struct.name ~ "_Data" %}
2 2
3 {#- Validates the specified struct field, which is supposed to be an object 3 {#- Validates the specified struct field, which is supposed to be an object
4 (struct/array/string/map/union). 4 (struct/array/string/map/union).
5 This macro is expanded by the Validate() method. #} 5 This macro is expanded by the Validate() method. #}
6 {%- macro _validate_object(struct, packed_field) %} 6 {%- macro _validate_object(struct, packed_field) %}
7 {%- set name = packed_field.field.name %} 7 {%- set name = packed_field.field.name %}
8 {%- set kind = packed_field.field.kind %} 8 {%- set kind = packed_field.field.kind %}
9 {%- if not kind|is_nullable_kind %} 9 {%- if not kind|is_nullable_kind %}
10 {%- if kind|is_union_kind %} 10 {%- if kind|is_union_kind %}
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 if (!mojo::internal::ValidateInterfaceIdNonNullable( 84 if (!mojo::internal::ValidateInterfaceIdNonNullable(
85 {{name}}_interface_id, 85 {{name}}_interface_id,
86 "invalid {{name}} field in {{struct.name}} struct")) { 86 "invalid {{name}} field in {{struct.name}} struct")) {
87 return false; 87 return false;
88 } 88 }
89 {%- endif %} 89 {%- endif %}
90 if (!mojo::internal::ValidateAssociatedInterfaceId({{name}}_interface_id)) 90 if (!mojo::internal::ValidateAssociatedInterfaceId({{name}}_interface_id))
91 return false; 91 return false;
92 {%- endmacro %} 92 {%- endmacro %}
93 93
94 {#- Validates the specified struct field, which is supposed to be an enum.
95 This macro is expanded by the Validate() method. #}
96 {%- macro _validate_enum(struct, packed_field) %}
97 {%- set name = packed_field.field.name %}
98 {%- set kind = packed_field.field.kind %}
99 if (!mojo::internal::ValidateEnum(object->{{name}}))
100 return false;
101 {%- endmacro %}
102
94 // static 103 // static
95 {{class_name}}* {{class_name}}::New(mojo::internal::Buffer* buf) { 104 {{class_name}}* {{class_name}}::New(mojo::internal::Buffer* buf) {
96 return new (buf->Allocate(sizeof({{class_name}}))) {{class_name}}(); 105 return new (buf->Allocate(sizeof({{class_name}}))) {{class_name}}();
97 } 106 }
98 107
99 // static 108 // static
100 bool {{class_name}}::Validate(const void* data, 109 bool {{class_name}}::Validate(const void* data,
101 mojo::internal::BoundsChecker* bounds_checker) { 110 mojo::internal::BoundsChecker* bounds_checker) {
102 if (!data) 111 if (!data)
103 return true; 112 return true;
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 } 148 }
140 149
141 {#- Before validating fields introduced at a certain version, we need to add 150 {#- Before validating fields introduced at a certain version, we need to add
142 a version check, which makes sure we skip further validation if |object| 151 a version check, which makes sure we skip further validation if |object|
143 is from an earlier version. |last_checked_version| records the last 152 is from an earlier version. |last_checked_version| records the last
144 version that we have added such version check. #} 153 version that we have added such version check. #}
145 {%- set last_checked_version = 0 %} 154 {%- set last_checked_version = 0 %}
146 {%- for packed_field in struct.packed.packed_fields_in_ordinal_order %} 155 {%- for packed_field in struct.packed.packed_fields_in_ordinal_order %}
147 {%- set kind = packed_field.field.kind %} 156 {%- set kind = packed_field.field.kind %}
148 {%- if kind|is_object_kind or kind|is_any_handle_kind or 157 {%- if kind|is_object_kind or kind|is_any_handle_kind or
149 kind|is_interface_kind or kind|is_associated_kind %} 158 kind|is_interface_kind or kind|is_associated_kind or
159 kind|is_enum_kind %}
150 {%- if packed_field.min_version > last_checked_version %} 160 {%- if packed_field.min_version > last_checked_version %}
151 {%- set last_checked_version = packed_field.min_version %} 161 {%- set last_checked_version = packed_field.min_version %}
152 if (object->header_.version < {{packed_field.min_version}}) 162 if (object->header_.version < {{packed_field.min_version}})
153 return true; 163 return true;
154 {%- endif %} 164 {%- endif %}
155 {%- if kind|is_object_kind %} 165 {%- if kind|is_object_kind %}
156 {{_validate_object(struct, packed_field)}} 166 {{_validate_object(struct, packed_field)}}
157 {%- elif kind|is_any_handle_kind or kind|is_interface_kind %} 167 {%- elif kind|is_any_handle_kind or kind|is_interface_kind %}
158 {{_validate_handle(struct, packed_field)}} 168 {{_validate_handle(struct, packed_field)}}
169 {%- elif kind|is_associated_kind %}
170 {{_validate_associated(struct, packed_field)}}
159 {%- else %} 171 {%- else %}
160 {{_validate_associated(struct, packed_field)}} 172 {{_validate_enum(struct, packed_field)}}
161 {%- endif %} 173 {%- endif %}
162 {%- endif %} 174 {%- endif %}
163 {%- endfor %} 175 {%- endfor %}
164 176
165 return true; 177 return true;
166 } 178 }
167 179
168 void {{class_name}}::EncodePointersAndHandles( 180 void {{class_name}}::EncodePointersAndHandles(
169 std::vector<mojo::Handle>* handles) { 181 std::vector<mojo::Handle>* handles) {
170 MOJO_CHECK(header_.version == {{struct.versions[-1].version}}); 182 MOJO_CHECK(header_.version == {{struct.versions[-1].version}});
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 mojo::internal::DecodeHandle(&{{name}}, handles); 217 mojo::internal::DecodeHandle(&{{name}}, handles);
206 {%- endif %} 218 {%- endif %}
207 {%- endif %} 219 {%- endif %}
208 {%- endfor %} 220 {%- endfor %}
209 } 221 }
210 222
211 {{class_name}}::{{class_name}}() { 223 {{class_name}}::{{class_name}}() {
212 header_.num_bytes = sizeof(*this); 224 header_.num_bytes = sizeof(*this);
213 header_.version = {{struct.versions[-1].version}}; 225 header_.version = {{struct.versions[-1].version}};
214 } 226 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698