|
76 | 76 | is_int_rprimitive,
|
77 | 77 | is_list_rprimitive,
|
78 | 78 | is_none_rprimitive,
|
| 79 | + is_object_rprimitive, |
79 | 80 | object_rprimitive,
|
80 | 81 | set_rprimitive,
|
81 | 82 | )
|
|
98 | 99 | from mypyc.irbuild.specialize import apply_function_specialization, apply_method_specialization
|
99 | 100 | from mypyc.primitives.bytes_ops import bytes_slice_op
|
100 | 101 | from mypyc.primitives.dict_ops import dict_get_item_op, dict_new_op, exact_dict_set_item_op
|
101 |
| -from mypyc.primitives.generic_ops import iter_op |
| 102 | +from mypyc.primitives.generic_ops import iter_op, name_op |
102 | 103 | from mypyc.primitives.list_ops import list_append_op, list_extend_op, list_slice_op
|
103 | 104 | from mypyc.primitives.misc_ops import ellipsis_op, get_module_dict_op, new_slice_op, type_op
|
104 | 105 | from mypyc.primitives.registry import builtin_names
|
@@ -218,6 +219,13 @@ def transform_member_expr(builder: IRBuilder, expr: MemberExpr) -> Value:
|
218 | 219 | obj = builder.accept(expr.expr, can_borrow=can_borrow)
|
219 | 220 | rtype = builder.node_type(expr)
|
220 | 221 |
|
| 222 | + if ( |
| 223 | + is_object_rprimitive(obj.type) |
| 224 | + and expr.name == "__name__" |
| 225 | + and builder.options.capi_version >= (3, 11) |
| 226 | + ): |
| 227 | + return builder.primitive_op(name_op, [obj], expr.line) |
| 228 | + |
221 | 229 | # Special case: for named tuples transform attribute access to faster index access.
|
222 | 230 | typ = get_proper_type(builder.types.get(expr.expr))
|
223 | 231 | if isinstance(typ, TupleType) and typ.partial_fallback.type.is_named_tuple:
|
|
0 commit comments