| OLD | NEW |
| 1 # Copyright (C) 2013 Google Inc. All rights reserved. | 1 # Copyright (C) 2013 Google Inc. All rights reserved. |
| 2 # | 2 # |
| 3 # Redistribution and use in source and binary forms, with or without | 3 # Redistribution and use in source and binary forms, with or without |
| 4 # modification, are permitted provided that the following conditions are | 4 # modification, are permitted provided that the following conditions are |
| 5 # met: | 5 # met: |
| 6 # | 6 # |
| 7 # * Redistributions of source code must retain the above copyright | 7 # * Redistributions of source code must retain the above copyright |
| 8 # notice, this list of conditions and the following disclaimer. | 8 # notice, this list of conditions and the following disclaimer. |
| 9 # * Redistributions in binary form must reproduce the above | 9 # * Redistributions in binary form must reproduce the above |
| 10 # copyright notice, this list of conditions and the following disclaimer | 10 # copyright notice, this list of conditions and the following disclaimer |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 88 'Comments', # [0.1] | 88 'Comments', # [0.1] |
| 89 'CommentsRest', # [0.2] | 89 'CommentsRest', # [0.2] |
| 90 ] | 90 ] |
| 91 | 91 |
| 92 # Remove rules from base class | 92 # Remove rules from base class |
| 93 # FIXME: add a class method upstream: @classmethod IDLParser._RemoveRules | 93 # FIXME: add a class method upstream: @classmethod IDLParser._RemoveRules |
| 94 for rule in REMOVED_RULES: | 94 for rule in REMOVED_RULES: |
| 95 production_name = 'p_' + rule | 95 production_name = 'p_' + rule |
| 96 delattr(IDLParser, production_name) | 96 delattr(IDLParser, production_name) |
| 97 | 97 |
| 98 # The base name of cached lexer table generated by BlinkIDLLexer |
| 99 LEX_TABLE_BASENAME = 'lextab' |
| 100 |
| 101 |
| 102 def remove_cached_lex_table(outputdir): |
| 103 table_files = [ |
| 104 os.path.join(outputdir, '%s.py' % LEX_TABLE_BASENAME), |
| 105 os.path.join(outputdir, '%s.pyc' % LEX_TABLE_BASENAME), |
| 106 ] |
| 107 for table_file in table_files: |
| 108 if os.path.exists(table_file): |
| 109 os.unlink(table_file) |
| 110 |
| 98 | 111 |
| 99 class BlinkIDLParser(IDLParser): | 112 class BlinkIDLParser(IDLParser): |
| 100 # [1] | 113 # [1] |
| 101 # FIXME: Need to duplicate rule for starting symbol here, with line number | 114 # FIXME: Need to duplicate rule for starting symbol here, with line number |
| 102 # *lower* than in the base parser (idl_parser.py). | 115 # *lower* than in the base parser (idl_parser.py). |
| 103 # This is a bug in PLY: it determines starting symbol by lowest line number. | 116 # This is a bug in PLY: it determines starting symbol by lowest line number. |
| 104 # This can be overridden by the 'start' parameter, but as of PLY 3.4 this | 117 # This can be overridden by the 'start' parameter, but as of PLY 3.4 this |
| 105 # doesn't work correctly. | 118 # doesn't work correctly. |
| 106 def p_Definitions(self, p): | 119 def p_Definitions(self, p): |
| 107 """Definitions : ExtendedAttributeList Definition Definitions | 120 """Definitions : ExtendedAttributeList Definition Definitions |
| (...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 433 self._parse_errors = 0 | 446 self._parse_errors = 0 |
| 434 self._parse_warnings = 0 | 447 self._parse_warnings = 0 |
| 435 self._last_error_msg = None | 448 self._last_error_msg = None |
| 436 self._last_error_lineno = 0 | 449 self._last_error_lineno = 0 |
| 437 self._last_error_pos = 0 | 450 self._last_error_pos = 0 |
| 438 | 451 |
| 439 | 452 |
| 440 ################################################################################ | 453 ################################################################################ |
| 441 | 454 |
| 442 def main(argv): | 455 def main(argv): |
| 443 # If file itself executed, cache parse table | 456 # If file itself executed, cache parse table. Caching the parse table |
| 457 # also caches lex table. Before caching these tables, we remove the |
| 458 # previous cached lex table if exists so that the build system can keep |
| 459 # track of dependencies. See http://crbug.com/397909 |
| 444 try: | 460 try: |
| 445 outputdir = argv[1] | 461 outputdir = argv[1] |
| 446 except IndexError as err: | 462 except IndexError as err: |
| 447 print 'Usage: %s OUTPUT_DIR' % argv[0] | 463 print 'Usage: %s OUTPUT_DIR' % argv[0] |
| 448 return 1 | 464 return 1 |
| 465 remove_cached_lex_table(outputdir) |
| 449 # Important: rewrite_tables=True causes the cache file to be deleted if it | 466 # Important: rewrite_tables=True causes the cache file to be deleted if it |
| 450 # exists, thus making sure that PLY doesn't load it instead of regenerating | 467 # exists, thus making sure that PLY doesn't load it instead of regenerating |
| 451 # the parse table. | 468 # the parse table. |
| 452 parser = BlinkIDLParser(outputdir=outputdir, rewrite_tables=True) | 469 parser = BlinkIDLParser(outputdir=outputdir, rewrite_tables=True) |
| 453 | 470 |
| 454 | 471 |
| 455 if __name__ == '__main__': | 472 if __name__ == '__main__': |
| 456 sys.exit(main(sys.argv)) | 473 sys.exit(main(sys.argv)) |
| OLD | NEW |