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)
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)
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)
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')