| 1 | """
|
| 2 | foil/pgen_ast.py -- Parse pgen.asdl and dynamically create classes on this
|
| 3 | module.
|
| 4 |
|
| 5 | Similar to osh/ast_.py.
|
| 6 | """
|
| 7 |
|
| 8 | import os
|
| 9 | import sys
|
| 10 |
|
| 11 | from asdl import py_meta
|
| 12 | from asdl import asdl_ as asdl
|
| 13 |
|
| 14 | def _ParseAndMakeTypes(schema_path, root):
|
| 15 | module = asdl.parse(schema_path)
|
| 16 |
|
| 17 | app_types = {}
|
| 18 |
|
| 19 | # Check for type errors
|
| 20 | if not asdl.check(module, app_types):
|
| 21 | raise AssertionError('ASDL file is invalid')
|
| 22 | py_meta.MakeTypes(module, root, app_types)
|
| 23 |
|
| 24 |
|
| 25 | bin_dir = os.path.dirname(os.path.abspath(sys.argv[0])) # ~/git/oil/bin
|
| 26 | schema_path = os.path.join(bin_dir, '../foil/pgen.asdl') # ~/git/oil/osh
|
| 27 |
|
| 28 | root = sys.modules[__name__]
|
| 29 |
|
| 30 | _ParseAndMakeTypes(schema_path, root)
|