| Index: mojo/public/tools/bindings/generators/cpp_templates/enum_macros.tmpl
 | 
| diff --git a/mojo/public/tools/bindings/generators/cpp_templates/enum_macros.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/enum_macros.tmpl
 | 
| index d11b198bc658d7623e77a8611659a98d8a118e92..745ebf6bd189eef8d44de98515599f79397ba2bf 100644
 | 
| --- a/mojo/public/tools/bindings/generators/cpp_templates/enum_macros.tmpl
 | 
| +++ b/mojo/public/tools/bindings/generators/cpp_templates/enum_macros.tmpl
 | 
| @@ -1,9 +1,7 @@
 | 
|  {#---
 | 
|    Macro for enum definition, and the declaration of associated functions.
 | 
| -  `is_static` is relevant if this enum declaration is defined within a class, in
 | 
| -  which case associated functions need to be static.
 | 
|  ---#}
 | 
| -{%- macro enum_decl(enum, is_static=false) %}
 | 
| +{%- macro enum_decl(enum) %}
 | 
|  enum class {{enum.name}} : int32_t {
 | 
|  {%- for field in enum.fields %}
 | 
|  {%-    if field.value %}
 | 
| @@ -13,20 +11,36 @@ enum class {{enum.name}} : int32_t {
 | 
|  {%-    endif %}
 | 
|  {%- endfor %}
 | 
|  };
 | 
| -{{is_valid_enum_decl(enum, is_static)}}
 | 
|  {%- endmacro %}
 | 
|  
 | 
| -{#--- macros for the declaration & definitions of enum-associated functions.
 | 
| -      Namely:
 | 
| -  * {enum_name}_IsValidValue:  returns true if the given enum has a valid value
 | 
| -                               for this generated version of enum.
 | 
| ----#}
 | 
| +{%- macro enum_data_decl(enum) %}
 | 
| +struct {{enum.name}}_Data {
 | 
| + public:
 | 
| +  // Used to identify Mojom Enum Data Classes.
 | 
| +  typedef void MojomEnumDataType;
 | 
| +
 | 
| +  static bool const kIsExtensible = {% if enum.extensible %}true{% else %}false{% endif %};
 | 
| +
 | 
| +  static bool IsKnownValue(int32_t value) {
 | 
| +    switch (value) {
 | 
| +{%- for enum_field in enum.fields|groupby('numeric_value') %}
 | 
| +      case {{enum_field[0]}}:
 | 
| +{%- endfor %}
 | 
| +        return true;
 | 
| +    }
 | 
| +    return false;
 | 
| +  }
 | 
|  
 | 
| -{%- macro is_valid_enum_decl(enum, is_static=false) %}
 | 
| -{% if is_static %}static {% endif -%}
 | 
| -bool {{enum.name}}_IsValidValue({{enum.name}} value);
 | 
| +  int32_t value;
 | 
| +};
 | 
|  {%- endmacro %}
 | 
|  
 | 
| +{#--- macros for enum-associated functions. Namely:
 | 
| +  * operator<<(): outputs the given enum value.
 | 
| +  * IsKnownEnumValue(): returns true if the given enum value exists in this
 | 
| +        generated version of enum.
 | 
| +---#}
 | 
| +
 | 
|  {%- macro enum_stream_operator(enum) %}
 | 
|  inline std::ostream& operator<<(std::ostream& os, {{enum|get_name_for_kind}} value) {
 | 
|    switch(value) {
 | 
| @@ -48,20 +62,9 @@ inline std::ostream& operator<<(std::ostream& os, {{enum|get_name_for_kind}} val
 | 
|  }
 | 
|  {%- endmacro %}
 | 
|  
 | 
| -{%- macro is_valid_enum_def(enum, class_name = '') %}
 | 
| -{% if class_name != '' -%}
 | 
| -// static
 | 
| -bool {{class_name}}::
 | 
| -{%- else -%}
 | 
| -{{"bool "}}
 | 
| -{%- endif -%}
 | 
| -{{enum.name}}_IsValidValue({{enum.name}} value) {
 | 
| -  switch (static_cast<int32_t>(value)) {
 | 
| -{%- for enum_field in enum.fields|groupby('numeric_value') %}
 | 
| -    case {{enum_field[0]}}:
 | 
| -{%- endfor %}
 | 
| -      return true;
 | 
| -  }
 | 
| -  return false;
 | 
| +{%- macro is_known_enum_value(enum) %}
 | 
| +inline bool IsKnownEnumValue({{enum|get_name_for_kind}} value) {
 | 
| +  return {{enum|get_qualified_name_for_kind(internal=True)}}::IsKnownValue(
 | 
| +      static_cast<int32_t>(value));
 | 
|  }
 | 
|  {%- endmacro %}
 | 
| 
 |