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

Unified Diff: mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl

Issue 303163006: Make mojo handle encoding and validation follow the depth-first traversal order. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 4d586f7631ac1c03315abbc5bd451fee709c2a0a..e1596d008cac440af9a9edf9d74ed373f15d7d49 100644
--- a/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl
+++ b/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl
@@ -11,22 +11,20 @@
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 %}
+{%- for packed_field in struct.packed.packed_fields %}
{%- set name = packed_field.field.name %}
+{%- if packed_field.field.kind|is_object_kind %}
+{%- set wrapper_type = packed_field.field.kind|cpp_wrapper_type %}
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 %}
+{%- elif packed_field.field.kind|is_handle_kind %}
if (!bounds_checker->ClaimHandle(object->{{name}}))
return false;
+{%- endif %}
{%- endfor %}
return true;
@@ -68,19 +66,21 @@
{%- endmacro %}
{%- macro encodes(struct) -%}
-{%- for pf in struct.packed.packed_fields if pf.field.kind|is_object_kind -%}
+{%- for pf in struct.packed.packed_fields %}
+{%- if pf.field.kind|is_object_kind %}
mojo::internal::Encode(&{{pf.field.name}}, handles);
-{% endfor %}
-{%- for pf in struct.packed.packed_fields if pf.field.kind|is_handle_kind -%}
+{%- elif pf.field.kind|is_handle_kind %}
mojo::internal::EncodeHandle(&{{pf.field.name}}, handles);
-{% endfor %}
+{%- endif %}
+{%- endfor %}
{%- endmacro -%}
{%- macro decodes(struct) -%}
-{%- for pf in struct.packed.packed_fields if pf.field.kind|is_object_kind -%}
+{%- for pf in struct.packed.packed_fields %}
+{%- if pf.field.kind|is_object_kind %}
mojo::internal::Decode(&{{pf.field.name}}, handles);
-{% endfor %}
-{%- for pf in struct.packed.packed_fields if pf.field.kind|is_handle_kind -%}
+{%- elif pf.field.kind|is_handle_kind %}
mojo::internal::DecodeHandle(&{{pf.field.name}}, handles);
-{% endfor %}
+{%- endif %}
+{%- endfor %}
{%- endmacro -%}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698