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

Side by Side Diff: ppapi/generators/idl_lexer.py

Issue 11565053: Allow leading underscore on identifier names in IDL parser (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: added test file that I forgot in first patchset Created 8 years 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | tools/json_schema_compiler/idl_schema_test.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """ Lexer for PPAPI IDL """ 6 """ Lexer for PPAPI IDL """
7 7
8 # 8 #
9 # IDL Lexer 9 # IDL Lexer
10 # 10 #
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 57
58 # Extra WebIDL keywords 58 # Extra WebIDL keywords
59 'CALLBACK', 59 'CALLBACK',
60 'DICTIONARY', 60 'DICTIONARY',
61 'OPTIONAL', 61 'OPTIONAL',
62 'STATIC', 62 'STATIC',
63 63
64 # Invented for apps use 64 # Invented for apps use
65 'NAMESPACE', 65 'NAMESPACE',
66 66
67
68 # Data types 67 # Data types
69 'FLOAT', 68 'FLOAT',
70 'OCT', 69 'OCT',
71 'INT', 70 'INT',
72 'HEX', 71 'HEX',
73 'STRING', 72 'STRING',
74 73
75 # Operators 74 # Operators
76 'LSHIFT', 75 'LSHIFT',
77 'RSHIFT' 76 'RSHIFT'
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 return t 136 return t
138 137
139 # Return a "preprocessor" inline block 138 # Return a "preprocessor" inline block
140 def t_INLINE(self, t): 139 def t_INLINE(self, t):
141 r'\#inline (.|\n)*?\#endinl.*' 140 r'\#inline (.|\n)*?\#endinl.*'
142 self.AddLines(t.value.count('\n')) 141 self.AddLines(t.value.count('\n'))
143 return t 142 return t
144 143
145 # A symbol or keyword. 144 # A symbol or keyword.
146 def t_KEYWORD_SYMBOL(self, t): 145 def t_KEYWORD_SYMBOL(self, t):
147 r'[A-Za-z][A-Za-z_0-9]*' 146 r'_?[A-Za-z][A-Za-z_0-9]*'
148 147
149 #All non-keywords are assumed to be symbols 148 # All non-keywords are assumed to be symbols
150 t.type = self.keywords.get(t.value, 'SYMBOL') 149 t.type = self.keywords.get(t.value, 'SYMBOL')
150
151 # We strip leading underscores so that you can specify symbols with the same
152 # value as a keywords (E.g. a dictionary named 'interface').
153 if t.value[0] == '_':
154 t.value = t.value[1:]
151 return t 155 return t
152 156
153 def t_ANY_error(self, t): 157 def t_ANY_error(self, t):
154 msg = "Unrecognized input" 158 msg = "Unrecognized input"
155 line = self.lexobj.lineno 159 line = self.lexobj.lineno
156 160
157 # If that line has not been accounted for, then we must have hit 161 # If that line has not been accounted for, then we must have hit
158 # EoF, so compute the beginning of the line that caused the problem. 162 # EoF, so compute the beginning of the line that caused the problem.
159 if line >= len(self.index): 163 if line >= len(self.index):
160 # Find the offset in the line of the first word causing the issue 164 # Find the offset in the line of the first word causing the issue
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
336 return -1 340 return -1
337 return 0 341 return 0
338 342
339 except lex.LexError as le: 343 except lex.LexError as le:
340 sys.stderr.write('%s\n' % str(le)) 344 sys.stderr.write('%s\n' % str(le))
341 return -1 345 return -1
342 346
343 347
344 if __name__ == '__main__': 348 if __name__ == '__main__':
345 sys.exit(Main(sys.argv[1:])) 349 sys.exit(Main(sys.argv[1:]))
OLDNEW
« no previous file with comments | « no previous file | tools/json_schema_compiler/idl_schema_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698