@@ -78,36 +78,36 @@ def constant_fold_expr(expr: Expression, cur_mod_id: str) -> ConstantValue | Non
7878 base = constant_fold_expr (expr .base , cur_mod_id )
7979 if base is not None :
8080 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 :
81+ if isinstance (index_expr , SliceExpr ):
82+ if index_expr . begin_index is None :
83+ begin_index = None
84+ else :
85+ begin_index = constant_fold_expr ( index_expr . begin_index , cur_mod_id )
86+ if begin_index is None :
8787 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 :
88+ if index_expr .end_index is None :
89+ end_index = None
90+ else :
91+ end_index = constant_fold_expr (index_expr .end_index , cur_mod_id )
92+ if end_index is None :
93+ return None
94+ if index_expr .stride is None :
95+ stride = None
96+ else :
97+ stride = constant_fold_expr (index_expr .stride , cur_mod_id )
98+ if stride is None :
99+ return None
100+ try :
101+ return base [begin_index :end_index :stride ]
102+ except Exception :
100103 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 :
104+
105+ index = constant_fold_expr (index_expr , cur_mod_id )
106+ if index is not None :
107+ try :
108+ return base [index ] # type: ignore [index]
109+ except Exception :
106110 return None
107- try :
108- return base [begin_index :end_index :stride ]
109- except Exception :
110- return None
111111 return None
112112
113113
0 commit comments