@@ -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