Skip to content

Commit c767b4c

Browse files
Update constant_fold.py
1 parent 2f3ff7f commit c767b4c

File tree

1 file changed

+13
-6
lines changed

1 file changed

+13
-6
lines changed

mypyc/irbuild/constant_fold.py

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
from __future__ import annotations
1212

13-
from typing import Final, Union
13+
from typing import Final, Union, overload
1414

1515
from mypy.constant_fold import constant_fold_binary_op, constant_fold_unary_op
1616
from mypy.nodes import (
@@ -127,10 +127,17 @@ def constant_fold_binary_op_extended(
127127
return None
128128

129129

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:
133135
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):
135139
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

Comments
 (0)