| Index: build/android/gyp/java_cpp_enum.py
|
| diff --git a/build/android/gyp/java_cpp_enum.py b/build/android/gyp/java_cpp_enum.py
|
| index 8ae5f36becf0d374ed1d741b61f6192eb81fe3b4..b10e7c541a12358aea15804eb98f37bf64a09426 100755
|
| --- a/build/android/gyp/java_cpp_enum.py
|
| +++ b/build/android/gyp/java_cpp_enum.py
|
| @@ -13,14 +13,21 @@ import sys
|
|
|
| from util import build_utils
|
|
|
| +# List of C++ types that are compatible with the Java code generated by this
|
| +# script.
|
| +ENUM_FIXED_TYPE_WHITELIST = ['char', 'unsigned char',
|
| + 'short', 'unsigned short',
|
| + 'int', 'int8_t', 'int16_t', 'int32_t', 'uint8_t', 'uint16_t']
|
| +
|
| class EnumDefinition(object):
|
| def __init__(self, original_enum_name=None, class_name_override=None,
|
| - enum_package=None, entries=None):
|
| + enum_package=None, entries=None, fixed_type=None):
|
| self.original_enum_name = original_enum_name
|
| self.class_name_override = class_name_override
|
| self.enum_package = enum_package
|
| self.entries = collections.OrderedDict(entries or [])
|
| self.prefix_to_strip = None
|
| + self.fixed_type = fixed_type
|
|
|
| def AppendEntry(self, key, value):
|
| if key in self.entries:
|
| @@ -40,6 +47,9 @@ class EnumDefinition(object):
|
| assert self.class_name
|
| assert self.enum_package
|
| assert self.entries
|
| + if self.fixed_type and self.fixed_type not in ENUM_FIXED_TYPE_WHITELIST:
|
| + raise Exception('Fixed type %s for enum %s not whitelisted.' %
|
| + (self.fixed_type, self.class_name))
|
|
|
| def _AssignEntryIndices(self):
|
| # Enums, if given no value, are given the value of the previous enum + 1.
|
| @@ -110,12 +120,17 @@ class DirectiveSet(object):
|
| class HeaderParser(object):
|
| single_line_comment_re = re.compile(r'\s*//')
|
| multi_line_comment_start_re = re.compile(r'\s*/\*')
|
| - enum_start_re = re.compile(r'^\s*enum\s+(\w+)\s+{\s*$')
|
| enum_line_re = re.compile(r'^\s*(\w+)(\s*\=\s*([^,\n]+))?,?')
|
| enum_end_re = re.compile(r'^\s*}\s*;\.*$')
|
| generator_directive_re = re.compile(
|
| r'^\s*//\s+GENERATED_JAVA_(\w+)\s*:\s*([\.\w]+)$')
|
|
|
| + optional_class_or_struct_re = r'(class|struct)?'
|
| + enum_name_re = r'(\w+)'
|
| + optional_fixed_type_re = r'(\:\s*(\w+\s*\w+?))?'
|
| + enum_start_re = re.compile(r'^\s*enum\s+' + optional_class_or_struct_re +
|
| + '\s*' + enum_name_re + '\s*' + optional_fixed_type_re + '\s*{\s*$')
|
| +
|
| def __init__(self, lines):
|
| self._lines = lines
|
| self._enum_definitions = []
|
| @@ -162,7 +177,8 @@ class HeaderParser(object):
|
| if self._generator_directives.empty:
|
| return
|
| self._current_definition = EnumDefinition(
|
| - original_enum_name=enum_start.groups()[0])
|
| + original_enum_name=enum_start.groups()[1],
|
| + fixed_type=enum_start.groups()[3])
|
| self._in_enum = True
|
| elif generator_directive:
|
| directive_name = generator_directive.groups()[0]
|
|
|