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 97c5dcaa5ce953d6bf1aa7dbb0fbfbc70c8ecff2..c3f8ca4a6f5d4f0a3488d972c24505b3475442c5 100644 |
--- a/mojo/public/tools/bindings/pylib/mojom/parse/parser.py |
+++ b/mojo/public/tools/bindings/pylib/mojom/parse/parser.py |
@@ -87,26 +87,34 @@ class Parser(object): |
# See http://www.dabeaz.com/ply/ply.html#ply_nn25 for more details. |
# TODO(vtl): Get rid of this ('MODULE', ...) stuff and replace it with an |
- # ast.Mojom node. This will require putting the imports into a list (say |
- # ast.ImportList). |
+ # ast.Mojom node. (The ('IMPORT', ...) stuff is a hack until I do this and |
+ # update translate.py.) |
# TODO(vtl): Get rid of the braces in the module "statement". (Consider |
# renaming "module" -> "package".) |
def p_root(self, p): |
- """root : import root |
- | module LBRACE definition_list RBRACE |
- | definition_list""" |
- if len(p) == 3: |
- p[0] = p[2] |
- p[0].insert(0, p[1]) |
- elif len(p) == 5: |
- p[0] = [('MODULE', p[1].name, p[1].attribute_list, p[3])] |
+ """root : import_list module LBRACE definition_list RBRACE |
+ | import_list definition_list""" |
+ p[0] = [('IMPORT', import_statement.import_filename) \ |
+ for import_statement in p[1]] |
+ if len(p) == 6: |
+ p[0].append(('MODULE', p[2].name, p[2].attribute_list, p[4])) |
else: |
- p[0] = [('MODULE', None, None, p[1])] |
+ p[0].append(('MODULE', None, None, p[2])) |
+ |
+ def p_import_list_1(self, p): |
+ """import_list : """ |
+ p[0] = ast.ImportList() |
+ |
+ def p_import_list_2(self, p): |
+ """import_list : import_list import""" |
+ p[0] = p[1] |
+ p[0].Append(p[2]) |
def p_import(self, p): |
"""import : IMPORT STRING_LITERAL""" |
# 'eval' the literal to strip the quotes. |
- p[0] = ('IMPORT', eval(p[2])) |
+ # TODO(vtl): This eval is dubious. We should unquote/unescape ourselves. |
+ p[0] = ast.Import(eval(p[2])) |
def p_module(self, p): |
"""module : attribute_section MODULE identifier_wrapped """ |