| Index: mojo/public/tools/bindings/pylib/mojom/parse/parser.py
|
| diff --git a/mojo/public/tools/bindings/pylib/mojom/parse/parser.py b/mojo/public/tools/bindings/pylib/mojom/parse/parser.py
|
| index 60b78e7bc3f67de9943877ee1ed200dad7002326..e4dfd7bb1d798fca9fafdb410e8d5d13e7b9de5a 100644
|
| --- a/mojo/public/tools/bindings/pylib/mojom/parse/parser.py
|
| +++ b/mojo/public/tools/bindings/pylib/mojom/parse/parser.py
|
| @@ -283,25 +283,24 @@ class Parser(object):
|
| p[0] = ast.Ordinal(None)
|
|
|
| def p_enum(self, p):
|
| - """enum : ENUM NAME LBRACE enum_field_list RBRACE SEMI"""
|
| + """enum : ENUM NAME LBRACE nonempty_enum_value_list RBRACE SEMI
|
| + | ENUM NAME LBRACE nonempty_enum_value_list COMMA RBRACE SEMI"""
|
| p[0] = ('ENUM', p[2], p[4])
|
|
|
| - def p_enum_field_list(self, p):
|
| - """enum_field_list : enum_field
|
| - | enum_field COMMA enum_field_list
|
| - | """
|
| - if len(p) == 2:
|
| - p[0] = _ListFromConcat(p[1])
|
| - elif len(p) > 3:
|
| - p[0] = _ListFromConcat(p[1], p[3])
|
| + def p_nonempty_enum_value_list_1(self, p):
|
| + """nonempty_enum_value_list : enum_value"""
|
| + p[0] = [p[1]]
|
|
|
| - def p_enum_field(self, p):
|
| - """enum_field : NAME
|
| - | NAME EQUALS constant"""
|
| - if len(p) == 2:
|
| - p[0] = ('ENUM_FIELD', p[1], None)
|
| - else:
|
| - p[0] = ('ENUM_FIELD', p[1], p[3])
|
| + def p_nonempty_enum_value_list_2(self, p):
|
| + """nonempty_enum_value_list : nonempty_enum_value_list COMMA enum_value"""
|
| + p[0] = p[1]
|
| + p[0].append(p[3])
|
| +
|
| + def p_enum_value(self, p):
|
| + """enum_value : NAME
|
| + | NAME EQUALS int
|
| + | NAME EQUALS identifier_wrapped"""
|
| + p[0] = ('ENUM_VALUE', p[1], p[3] if len(p) == 4 else None)
|
|
|
| def p_const(self, p):
|
| """const : CONST typename NAME EQUALS constant SEMI"""
|
| @@ -322,25 +321,31 @@ class Parser(object):
|
| p[0] = ''.join(p[1:])
|
|
|
| def p_literal(self, p):
|
| - """literal : number
|
| + """literal : int
|
| + | float
|
| | TRUE
|
| | FALSE
|
| | DEFAULT
|
| | STRING_LITERAL"""
|
| p[0] = p[1]
|
|
|
| - def p_number(self, p):
|
| - """number : digits
|
| - | PLUS digits
|
| - | MINUS digits"""
|
| + def p_int(self, p):
|
| + """int : int_const
|
| + | PLUS int_const
|
| + | MINUS int_const"""
|
| p[0] = ''.join(p[1:])
|
|
|
| - def p_digits(self, p):
|
| - """digits : INT_CONST_DEC
|
| - | INT_CONST_HEX
|
| - | FLOAT_CONST"""
|
| + def p_int_const(self, p):
|
| + """int_const : INT_CONST_DEC
|
| + | INT_CONST_HEX"""
|
| p[0] = p[1]
|
|
|
| + def p_float(self, p):
|
| + """float : FLOAT_CONST
|
| + | PLUS FLOAT_CONST
|
| + | MINUS FLOAT_CONST"""
|
| + p[0] = ''.join(p[1:])
|
| +
|
| def p_error(self, e):
|
| if e is None:
|
| # Unexpected EOF.
|
|
|