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 d645a678ed4aba5706be1d5700ce08047bfe1748..16da07f1cce566205a908a5c660eefe5a9390162 100755 |
--- a/build/android/gyp/java_cpp_enum.py |
+++ b/build/android/gyp/java_cpp_enum.py |
@@ -130,7 +130,7 @@ class DirectiveSet(object): |
class HeaderParser(object): |
- single_line_comment_re = re.compile(r'\s*//\s*([^\n]+)') |
+ single_line_comment_re = re.compile(r'\s*//\s*([^\n]*)') |
multi_line_comment_start_re = re.compile(r'\s*/\*') |
enum_line_re = re.compile(r'^\s*(\w+)(\s*\=\s*([^,\n]+))?,?') |
enum_end_re = re.compile(r'^\s*}\s*;\.*$') |
@@ -159,6 +159,7 @@ class HeaderParser(object): |
self._current_comments = [] |
self._generator_directives = DirectiveSet() |
self._multi_line_generator_directive = None |
+ self._current_enum_entry = '' |
def _ApplyGeneratorDirectives(self): |
self._generator_directives.UpdateDefinition(self._current_definition) |
@@ -178,28 +179,50 @@ class HeaderParser(object): |
self._ParseEnumLine(line) |
def _ParseEnumLine(self, line): |
- enum_comment = HeaderParser.single_line_comment_re.match(line) |
- if enum_comment: |
- self._current_comments.append(enum_comment.groups()[0]) |
- return |
if HeaderParser.multi_line_comment_start_re.match(line): |
raise Exception('Multi-line comments in enums are not supported in ' + |
self._path) |
- enum_end = HeaderParser.enum_end_re.match(line) |
- enum_entry = HeaderParser.enum_line_re.match(line) |
- if enum_end: |
- self._ApplyGeneratorDirectives() |
- self._current_definition.Finalize() |
- self._enum_definitions.append(self._current_definition) |
- self._in_enum = False |
- elif enum_entry: |
- enum_key = enum_entry.groups()[0] |
- enum_value = enum_entry.groups()[2] |
- self._current_definition.AppendEntry(enum_key, enum_value) |
- if self._current_comments: |
- self._current_definition.AppendEntryComment( |
- enum_key, ' '.join(self._current_comments)) |
- self._current_comments = [] |
+ |
+ enum_comment = HeaderParser.single_line_comment_re.match(line) |
+ if enum_comment: |
+ comment = enum_comment.groups()[0] |
+ if comment: |
+ self._current_comments.append(comment) |
+ elif HeaderParser.enum_end_re.match(line): |
+ self._FinalizeCurrentEnumEntry() |
+ else: |
+ self._AddToCurrentEnumEntry(line) |
+ if ',' in line: |
+ self._ParseCurrentEnumEntry() |
+ |
+ def _ParseCurrentEnumEntry(self): |
+ if not self._current_enum_entry: |
+ return |
+ |
+ enum_entry = HeaderParser.enum_line_re.match(self._current_enum_entry) |
+ if not enum_entry: |
+ raise Exception('Unexpected error while attempting to parse %s as enum ' |
+ 'entry.' % self._current_enum_entry) |
+ |
+ enum_key = enum_entry.groups()[0] |
+ enum_value = enum_entry.groups()[2] |
+ self._current_definition.AppendEntry(enum_key, enum_value) |
+ if self._current_comments: |
+ self._current_definition.AppendEntryComment( |
+ enum_key, ' '.join(self._current_comments)) |
+ self._current_comments = [] |
+ self._current_enum_entry = '' |
+ |
+ def _AddToCurrentEnumEntry(self, line): |
+ self._current_enum_entry += ' ' + line.strip() |
+ |
+ def _FinalizeCurrentEnumEntry(self): |
+ if self._current_enum_entry: |
+ self._ParseCurrentEnumEntry() |
+ self._ApplyGeneratorDirectives() |
+ self._current_definition.Finalize() |
+ self._enum_definitions.append(self._current_definition) |
+ self._in_enum = False |
def _ParseMultiLineDirectiveLine(self, line): |
multi_line_directive_continuation = ( |