Skip to content

Commit 558dee1

Browse files
Update constant_fold.py
1 parent d7f75f4 commit 558dee1

File tree

1 file changed

+30
-5
lines changed

1 file changed

+30
-5
lines changed

mypy/constant_fold.py

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -77,12 +77,37 @@ def constant_fold_expr(expr: Expression, cur_mod_id: str) -> ConstantValue | Non
7777
elif isinstance(expr, IndexExpr):
7878
base = constant_fold_expr(expr.base, cur_mod_id)
7979
if base is not None:
80-
index = constant_fold_expr(expr.index, cur_mod_id)
81-
if index is not None:
82-
try:
83-
return base[index] # type: ignore [index]
84-
except Exception:
80+
index_expr = expr.index
81+
if not isinstance(index_expr, SliceExpr):
82+
index = constant_fold_expr(index_expr, cur_mod_id)
83+
if index is not None:
84+
try:
85+
return base[index] # type: ignore [index]
86+
except Exception:
87+
return None
88+
89+
if index_expr.begin_index is None:
90+
begin_index = None
91+
else:
92+
begin_index = constant_fold_expr(index_expr.begin_index, cur_mod_id)
93+
if begin_index is None:
94+
return None
95+
if index_expr.end_index is None:
96+
end_index = None
97+
else:
98+
end_index = constant_fold_expr(index_expr.end_index, cur_mod_id)
99+
if end_index is None:
85100
return None
101+
if index_expr.stride is None:
102+
stride = None
103+
else:
104+
stride = constant_fold_expr(index_expr.stride, cur_mod_id)
105+
if stride is None:
106+
return None
107+
try:
108+
return base[begin_index:end_index:stride]
109+
except Exception:
110+
return None
86111
return None
87112

88113

0 commit comments

Comments
 (0)