66
77package  reflect
88
9- import  "iter" 
9+ import  (
10+ 	"iter" 
11+ )
1012
1113func  rangeNum [T  int8  |  int16  |  int32  |  int64  |  int  | 
1214	uint8  |  uint16  |  uint32  |  uint64  |  uint  | 
13- 	uintptr , N  int64  |  uint64 ](v   N ) iter.Seq [Value ] {
15+ 	uintptr , N  int64  |  uint64 ](num   N ,  t   Type ) iter.Seq [Value ] {
1416	return  func (yield  func (v  Value ) bool ) {
17+ 		convert  :=  t .PkgPath () !=  "" 
1518		// cannot use range T(v) because no core type. 
16- 		for  i  :=  T (0 ); i  <  T (v ); i ++  {
17- 			if  ! yield (ValueOf (i )) {
19+ 		for  i  :=  T (0 ); i  <  T (num ); i ++  {
20+ 			tmp  :=  ValueOf (i )
21+ 			// if the iteration value type is define by 
22+ 			// type T built-in type. 
23+ 			if  convert  {
24+ 				tmp  =  tmp .Convert (t )
25+ 			}
26+ 			if  ! yield (tmp ) {
1827				return 
1928			}
2029		}
@@ -40,27 +49,27 @@ func (v Value) Seq() iter.Seq[Value] {
4049	// } 
4150	switch  v .Kind () {
4251	case  Int :
43- 		return  rangeNum [int ](v .Int ())
52+ 		return  rangeNum [int ](v .Int (),  v . Type () )
4453	case  Int8 :
45- 		return  rangeNum [int8 ](v .Int ())
54+ 		return  rangeNum [int8 ](v .Int (),  v . Type () )
4655	case  Int16 :
47- 		return  rangeNum [int16 ](v .Int ())
56+ 		return  rangeNum [int16 ](v .Int (),  v . Type () )
4857	case  Int32 :
49- 		return  rangeNum [int32 ](v .Int ())
58+ 		return  rangeNum [int32 ](v .Int (),  v . Type () )
5059	case  Int64 :
51- 		return  rangeNum [int64 ](v .Int ())
60+ 		return  rangeNum [int64 ](v .Int (),  v . Type () )
5261	case  Uint :
53- 		return  rangeNum [uint ](v .Uint ())
62+ 		return  rangeNum [uint ](v .Uint (),  v . Type () )
5463	case  Uint8 :
55- 		return  rangeNum [uint8 ](v .Uint ())
64+ 		return  rangeNum [uint8 ](v .Uint (),  v . Type () )
5665	case  Uint16 :
57- 		return  rangeNum [uint16 ](v .Uint ())
66+ 		return  rangeNum [uint16 ](v .Uint (),  v . Type () )
5867	case  Uint32 :
59- 		return  rangeNum [uint32 ](v .Uint ())
68+ 		return  rangeNum [uint32 ](v .Uint (),  v . Type () )
6069	case  Uint64 :
61- 		return  rangeNum [uint64 ](v .Uint ())
70+ 		return  rangeNum [uint64 ](v .Uint (),  v . Type () )
6271	case  Uintptr :
63- 		return  rangeNum [uintptr ](v .Uint ())
72+ 		return  rangeNum [uintptr ](v .Uint (),  v . Type () )
6473	case  Pointer :
6574		if  v .Elem ().Kind () !=  Array  {
6675			break 
0 commit comments