Example #1
0
BOOL_ARG_TYPES = {}  # type: Dict[int, bool_arg_type_t]

# Used by builtin_bracket.py
TEST_UNARY_LOOKUP = {}  # type: Dict[str, int]
TEST_BINARY_LOOKUP = {}  # type: Dict[str, int]
TEST_OTHER_LOOKUP = {}  # type: Dict[str, int]


#
# Add attributes to Id and Kind
#

ID_SPEC = id_kind.IdSpec(_ID_TO_KIND_INTEGERS, BOOL_ARG_TYPES)

id_kind.AddKinds(ID_SPEC)
id_kind.AddBoolKinds(ID_SPEC)  # must come second
id_kind.SetupTestBuiltin(ID_SPEC,
                         TEST_UNARY_LOOKUP, TEST_BINARY_LOOKUP,
                         TEST_OTHER_LOOKUP)

# Debug
_kind_sizes = ID_SPEC.kind_sizes


#
# Instantiate osh/osh.asdl
#

from _devbuild.gen import syntax_asdl  # other modules import this
unused1 = syntax_asdl  # shut up lint
Example #2
0
def main(argv):
    try:
        action = argv[1]
    except IndexError:
        raise RuntimeError('Action required')

    # NOTE: This initialization must be identical to the one in core/meta.py.  We
    # do it here to avoid circular dependencies.

    ID_SPEC = id_kind.IdSpec({}, {})

    id_kind.AddKinds(ID_SPEC)
    id_kind.AddBoolKinds(ID_SPEC)  # must come second

    id_kind.SetupTestBuiltin(ID_SPEC, {}, {}, {})

    ids = ID_SPEC.id_str2int.items()
    ids.sort(key=lambda pair: pair[1])  # Sort by ID

    if action == 'c':
        for name, id_int in ids:
            print('#define id__%s %s' % (name, id_int))

    elif action == 'cpp':
        from asdl import gen_cpp

        schema_ast = _CreateModule(ID_SPEC, ids)

        out_prefix = argv[2]

        with open(out_prefix + '.h', 'w') as f:
            f.write("""
#ifndef ID_KIND_ASDL_H
#define ID_KIND_ASDL_H

namespace id_kind_asdl {
""")

            v = gen_cpp.ClassDefVisitor(f, {}, e_suffix=False)
            v.VisitModule(schema_ast)

            f.write("""
}  // namespace id_kind_asdl

#endif  // ID_KIND_ASDL_H
""")

        with open(out_prefix + '.cc', 'w') as f:
            f.write("""\
#include <assert.h>
#include "id_kind_asdl.h"

namespace id_kind_asdl {

""")

            v = gen_cpp.MethodDefVisitor(f, {}, e_suffix=False)
            v.VisitModule(schema_ast)

            f.write('}  // namespace id_kind_asdl\n')

    elif action == 'mypy':
        from asdl import gen_python

        schema_ast = _CreateModule(ID_SPEC, ids)
        #print(schema_ast)

        f = sys.stdout

        f.write("""\
from asdl import pybase
from typing import List

""")
        # Minor style issue: we want Id and Kind, not Id_e and Kind_e
        v = gen_python.GenMyPyVisitor(f, None, e_suffix=False)
        v.VisitModule(schema_ast)

        f.write("""
ID_INSTANCES = [
  None,  # unused index 0
""")
        for name, _ in ids:
            f.write('  Id.%s,\n' % name)
        f.write(']  # type: List[Id_t]\n')

        f.write("""

KIND_INSTANCES = [
  None,  # unused index 0
""")
        for name in ID_SPEC.kind_name_list:
            f.write('  Kind.%s,\n' % name)
        f.write(']  # type: List[Kind_t]\n')

    else:
        raise RuntimeError('Invalid action %r' % action)