@@ -39,11 +39,24 @@ def rewrite_Statement(self, node: ir.Statement) -> RewriteResult:
3939 return RewriteResult (has_done_something = has_done_something )
4040
4141 def rewrite_Constant (self , node : Constant ) -> RewriteResult :
42- if isinstance (node .value , ir .PyAttr ) and isinstance (node .value .data , list ):
43- stmt = Constant (value = IList (data = node .value .data ))
42+ if not isinstance (node .value , ir .PyAttr ):
43+ return RewriteResult ()
44+
45+ if isinstance (data := node .value .data , list ):
46+ stmt = Constant (value = IList (data = data ))
47+ node .replace_by (stmt )
48+ self ._rewrite_IList_type (stmt .result , data )
49+ return RewriteResult (has_done_something = True )
50+ elif isinstance (data , range ):
51+ new_constant = IList (data = data , elem = types .Int )
52+ stmt = Constant (value = new_constant )
53+ # specializing the type computation since we know that a
54+ # range will always be integer typed.
55+ stmt .result .hints ["const" ] = const .Value (new_constant )
56+ stmt .result .type = IListType [types .Int , types .Literal (len (data ))]
4457 node .replace_by (stmt )
45- self ._rewrite_IList_type (stmt .result , node .value .data )
4658 return RewriteResult (has_done_something = True )
59+
4760 return RewriteResult ()
4861
4962 def _rewrite_IList_type (self , result : ir .SSAValue , data ):
0 commit comments