MCPcopy Index your code
hub / github.com/python/mypy / transform_index_expr

Function transform_index_expr

mypyc/irbuild/expression.py:760–789  ·  view source on GitHub ↗
(builder: IRBuilder, expr: IndexExpr)

Source from the content-addressed store, hash-verified

758
759
760def transform_index_expr(builder: IRBuilder, expr: IndexExpr) -> Value:
761 index = expr.index
762 base_type = builder.node_type(expr.base)
763 can_borrow = is_list_rprimitive(base_type) or isinstance(base_type, RVec)
764 can_borrow_base = can_borrow and is_borrow_friendly_expr(builder, index)
765
766 # Check for dunder specialization for non-slice indexing
767 if not isinstance(index, SliceExpr):
768 specialized = apply_dunder_specialization(builder, expr.base, [index], "__getitem__", expr)
769 if specialized is not None:
770 return specialized
771
772 base = builder.accept(expr.base, can_borrow=can_borrow_base)
773
774 if isinstance(base.type, RTuple):
775 folded_index = constant_fold_expr(builder, index)
776 if isinstance(folded_index, int):
777 length = len(base.type.types)
778 if -length <= folded_index <= length - 1:
779 return builder.add(TupleGet(base, folded_index, expr.line))
780
781 if isinstance(index, SliceExpr):
782 value = try_gen_slice_op(builder, base, index)
783 if value:
784 return value
785
786 index_reg = builder.accept(expr.index, can_borrow=can_borrow)
787 return builder.builder.get_item(
788 base, index_reg, builder.node_type(expr), expr.line, can_borrow=builder.can_borrow
789 )
790
791
792def try_constant_fold(builder: IRBuilder, expr: Expression) -> Value | None:

Callers 1

visit_index_exprMethod · 0.90

Calls 12

is_list_rprimitiveFunction · 0.90
is_borrow_friendly_exprFunction · 0.90
constant_fold_exprFunction · 0.90
TupleGetClass · 0.90
isinstanceFunction · 0.85
lenFunction · 0.85
try_gen_slice_opFunction · 0.85
node_typeMethod · 0.80
get_itemMethod · 0.80
acceptMethod · 0.45
addMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…