示例#1
0
文件: opgen.py 项目: prodigeni/mypy
def add_type_map_support_for_type(map: List[str], ops: List[str],
                                  typ: TypeInfo, alt, suffix: str) -> None:
    op = '__{}ValueToType{}'.format(typ.name(), suffix)
    map.append('    {} : {},'.format(typ.name(), op))
    if typ.is_generic():
        map.append('    {} : {},'.format(typ.name() + dynamic_suffix(False),
                                         op))
    generate_type_map_op(ops, op, typ, alt)
示例#2
0
def add_type_map_support_for_type(map: List[str], ops: List[str],
                                  typ: TypeInfo, alt, suffix: str) -> None:
    op = '__{}ValueToType{}'.format(typ.name(), suffix)
    map.append('    {} : {},'.format(typ.name(), op))
    if typ.is_generic():
        map.append('    {} : {},'.format(typ.name() + dynamic_suffix(False),
                                         op))
    generate_type_map_op(ops, op, typ, alt)
示例#3
0
文件: opgen.py 项目: prodigeni/mypy
def add_slot_map_support_for_type_pair(map: List[str], ops: List[str],
                                       base: TypeInfo, typ: TypeInfo) -> None:
    op = '__{}TypeTo{}Slots'.format(base.name(), typ.name())
    map.append('    ({}, {}) : {},'.format(base.name(), typ.name(), op))
    if typ.is_generic():
        map.append('    ({}, {}) : {},'.format(
            base.name(),
            typ.name() + dynamic_suffix(False), op))
    generate_slot_map_op(ops, op, base, typ)
示例#4
0
def add_slot_map_support_for_type_pair(map: List[str], ops: List[str],
                                       base: TypeInfo, typ: TypeInfo) -> None:
    op = '__{}TypeTo{}Slots'.format(base.name(), typ.name())
    map.append('    ({}, {}) : {},'.format(base.name(), typ.name(), op))
    if typ.is_generic():
        map.append('    ({}, {}) : {},'.format(base.name(), typ.name() +
                                               dynamic_suffix(False),
                                               op))
    generate_slot_map_op(ops, op, base, typ)
示例#5
0
文件: opgen.py 项目: SRiikonen/mypy

void add_slot_map_data(str[] map, str[] ops, TypeInfo typ):
    base = typ
    while base:
        add_slot_map_support_for_type_pair(map, ops, base, typ)
        base = base.base


void add_slot_map_support_for_type_pair(str[] map, str[] ops, TypeInfo base,
                                        TypeInfo typ):
    op = '__{}TypeTo{}Slots'.format(base.name(), typ.name())
    map.append('    ({}, {}) : {},'.format(base.name(), typ.name(), op))
    if typ.is_generic():
        map.append('    ({}, {}) : {},'.format(base.name(), typ.name() +
                                               dynamic_suffix(False),
                                               op))
    generate_slot_map_op(ops, op, base, typ)


void generate_slot_map_op(str[] ops, str op, TypeInfo base, TypeInfo typ):
    ops.append('def {}(t)'.format(op))
    nslots = num_slots(typ)
    slots = compile_slot_mapping(base)
    a = <str> []
    for t in slots:
        a.append(transform_type_to_runtime_repr(t))
    for i in range(len(slots), nslots):
        a.append('__Dyn')
    ops.append('  return [' + ', '.join(a) + ']')
    ops.append('end')