Chromium Code Reviews| 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..63d48d22b6e51c628510dfb77fe6a901e8933eda 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 = 0; |
|
yzshen1
2015/03/27 16:26:33
nit: 0U?
azani
2015/03/27 20:50:14
Done.
|
| +} |
| + |
| {{class_name}}::{{class_name}}() { |
| } |