Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1848)

Unified Diff: ppapi/generators/idl_parser.py

Issue 8161006: Allow enum values in IDL files to be simple arithmetic expressions. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ppapi/generators/idl_lexer.py ('k') | ppapi/generators/test_cgen/enum_typedef.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ppapi/generators/idl_parser.py
===================================================================
--- ppapi/generators/idl_parser.py (revision 104195)
+++ ppapi/generators/idl_parser.py (working copy)
@@ -413,19 +413,52 @@
p[0] = p[1]
if self.parse_debug: DumpReduction('integer', p)
-# Numbers are integers or floats.
- def p_number(self, p):
- """number : FLOAT
- | HEX
- | INT
- | OCT"""
+#
+# Expression
+#
+# A simple arithmetic expression.
+#
+ precedence = (
+ ('left','|','&','^'),
+ ('left','LSHIFT','RSHIFT'),
+ ('left','+','-'),
+ ('left','*','/'),
+ ('right','UMINUS','~'),
+ )
+
+ def p_expression_binop(self, p):
+ """expression : expression LSHIFT expression
+ | expression RSHIFT expression
+ | expression '|' expression
+ | expression '&' expression
+ | expression '^' expression
+ | expression '+' expression
+ | expression '-' expression
+ | expression '*' expression
+ | expression '/' expression"""
+ p[0] = "%s %s %s" % (str(p[1]), str(p[2]), str(p[3]))
+ if self.parse_debug: DumpReduction('expression_binop', p)
+
+ def p_expression_unop(self, p):
+ """expression : '-' expression %prec UMINUS
+ | '~' expression %prec '~'"""
+ p[0] = "%s%s" % (str(p[1]), str(p[2]))
+ if self.parse_debug: DumpReduction('expression_unop', p)
+
+ def p_expression_term(self, p):
+ "expression : '(' expression ')'"
+ p[0] = "%s%s%s" % (str(p[1]), str(p[2]), str(p[3]))
+ if self.parse_debug: DumpReduction('expression_term', p)
+
+ def p_expression_symbol(self, p):
+ "expression : SYMBOL"
p[0] = p[1]
- if self.parse_debug: DumpReduction('number', p)
+ if self.parse_debug: DumpReduction('expression_symbol', p)
- def p_number_lshift(self, p):
- """number : integer LSHIFT INT"""
- p[0] = "%s << %s" % (p[1], p[3])
- if self.parse_debug: DumpReduction('number_lshift', p)
+ def p_expression_integer(self, p):
+ "expression : integer"
+ p[0] = p[1]
+ if self.parse_debug: DumpReduction('expression_integer', p)
#
# Array List
@@ -523,7 +556,7 @@
if self.parse_debug: DumpReduction('enum_block', p)
def p_enum_list(self, p):
- """enum_list : modifiers SYMBOL '=' number enum_cont
+ """enum_list : modifiers SYMBOL '=' expression enum_cont
| modifiers SYMBOL enum_cont"""
if len(p) > 4:
val = self.BuildAttribute('VALUE', p[4])
« no previous file with comments | « ppapi/generators/idl_lexer.py ('k') | ppapi/generators/test_cgen/enum_typedef.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698