Index: mojo/public/tools/bindings/generators/cpp_templates/union_definition.tmpl |
diff --git a/mojo/public/tools/bindings/generators/cpp_templates/union_definition.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/union_definition.tmpl |
index c9ea5d0199b1e61d85b979c299b8524c1d27bb87..23e5cfde51bfaeb1321d1f35b2affa7abb11de8a 100644 |
--- a/mojo/public/tools/bindings/generators/cpp_templates/union_definition.tmpl |
+++ b/mojo/public/tools/bindings/generators/cpp_templates/union_definition.tmpl |
@@ -9,7 +9,8 @@ |
// static |
bool {{class_name}}::Validate(const void* data, |
- mojo::internal::BoundsChecker* bounds_checker) { |
+ mojo::internal::BoundsChecker* bounds_checker, |
+ bool inlined) { |
if (!data) { |
return true; |
} |
@@ -19,7 +20,10 @@ bool {{class_name}}::Validate(const void* data, |
return false; |
} |
- if (!bounds_checker->ClaimMemory(data, sizeof({{class_name}}))) { |
+ // If the union is inlined in another structure its memory was already claimed. |
+ // This ONLY applies to the union itself, NOT anything which the union points |
+ // to. |
+ if (!inlined && !bounds_checker->ClaimMemory(data, sizeof({{class_name}}))) { |
ReportValidationError( |
mojo::internal::VALIDATION_ERROR_ILLEGAL_MEMORY_RANGE); |
return false; |
@@ -40,6 +44,12 @@ bool {{class_name}}::Validate(const void* data, |
} |
} |
+void {{class_name}}::set_null() { |
+ size = 0U; |
+ tag = static_cast<{{enum_name}}>(0); |
+ data.unknown = 0U; |
+} |
+ |
{{class_name}}::{{class_name}}() { |
} |