|
10 | 10 |
|
11 | 11 | from __future__ import annotations |
12 | 12 |
|
13 | | -from typing import Final, Union |
| 13 | +from typing import Final, Union, overload |
14 | 14 |
|
15 | 15 | from mypy.constant_fold import constant_fold_binary_op, constant_fold_unary_op |
16 | 16 | from mypy.nodes import ( |
@@ -127,10 +127,17 @@ def constant_fold_binary_op_extended( |
127 | 127 | return None |
128 | 128 |
|
129 | 129 |
|
130 | | -def constant_fold_container_items( |
131 | | - builder: IRBuilder, expr: ListExpr | TupleExpr |
132 | | -) -> list[ConstantValue] | None: |
| 130 | +@overload |
| 131 | +def constant_fold_container_expr(builder: IRBuilder, expr: ListExpr) -> list[ConstantValue] | None: ... |
| 132 | +@overload |
| 133 | +def constant_fold_container_expr(builder: IRBuilder, expr: TupleExpr) -> tuple[ConstantValue, ...] | None: ... |
| 134 | +def constant_fold_container_expr(builder: IRBuilder, expr: ListExpr | TupleExpr) -> list[ConstantValue] | tuple[ConstantValue, ...] | None: |
133 | 135 | folded_items = [constant_fold_expr(builder, item_expr) for item_expr in expr.items] |
134 | | - if all(isinstance(item, ConstantValue) for item in folded_items): |
| 136 | + if not all(isinstance(item, ConstantValue) for item in folded_items): |
| 137 | + return None |
| 138 | + elif isinstance(expr, ListExpr): |
135 | 139 | return folded_items |
136 | | - return None |
| 140 | + elif isinstance(expr, TupleExpr): |
| 141 | + return tuple(folded_items) |
| 142 | + else: |
| 143 | + raise NotImplementedError(type(expr), expr) |
0 commit comments