Skip to content

Commit 857fe55

Browse files
Update constant_fold.py
1 parent 8784efa commit 857fe55

1 file changed

Lines changed: 22 additions & 4 deletions

File tree

mypyc/irbuild/constant_fold.py

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -90,27 +90,45 @@ def constant_fold_expr(builder: IRBuilder, expr: Expression) -> ConstantValue |
9090
begin_index = None
9191
else:
9292
begin_index = constant_fold_expr(builder, index_expr.begin_index)
93-
if not isinstance(begin_index, int):
93+
if begin_index is None:
9494
return None
9595
if index_expr.end_index is None:
9696
end_index = None
9797
else:
9898
end_index = constant_fold_expr(builder, index_expr.end_index)
99-
if not isinstance(end_index, int):
99+
if end_index is None:
100100
return None
101101
if index_expr.stride is None:
102102
stride = None
103103
else:
104104
stride = constant_fold_expr(builder, index_expr.stride)
105-
if not isinstance(stride, int):
105+
if stride is None:
106+
return None
107+
108+
# this branching just keeps mypy happy, non-functional
109+
if isinstance(base, Sequence):
110+
indexes = begin_index, end_index, stride
111+
assert all(isinstance(v, int) or v is None for v in indexes)
112+
try:
113+
return base[begin_index:end_index:stride]
114+
except Exception:
106115
return None
107116
try:
108117
return base[begin_index:end_index:stride]
109118
except Exception:
110119
return None
111120

112121
index = constant_fold_expr(builder, index_expr)
113-
if index is not None:
122+
123+
# this branching just keeps mypy happy, non-functional
124+
if isinstance(base, Sequence):
125+
126+
if isinstance(index, int):
127+
try:
128+
return base[index]
129+
except Exception:
130+
return None
131+
else:
114132
try:
115133
return base[index]
116134
except Exception:

0 commit comments

Comments
 (0)