@@ -89,11 +89,23 @@ Base.IteratorEltype(::Type{<:AbstractCloseOpen}) = Base.HasEltype()
89
89
@inline Base. eltype (r:: AbstractCloseOpen ) = Int
90
90
@inline Base. eachindex (r:: AbstractCloseOpen ) = StaticInt (1 ): StaticArrayInterface. static_length (r)
91
91
92
+ # `__is_valid_range` was removed in Julia v1.11.0 (JuliaLang/julia#51606)
93
+ @inline __is_valid_range (I, rng:: AbstractUnitRange ) = I in rng
94
+ @inline function __is_valid_range (I, rng:: OrdinalRange )
95
+ if step (rng) > 0
96
+ lo, hi = first (rng), last (rng)
97
+ else
98
+ lo, hi = last (rng), first (rng)
99
+ end
100
+ lo <= I <= hi
101
+ end
102
+
103
+ # `OrdinalRangeInt` was introduced in Julia v1.7.0 (JuliaLang/julia#40594)
92
104
@static if isdefined (Base. IteratorsMD, :OrdinalRangeInt )
93
105
@inline function Base. IteratorsMD. __inc (state:: Tuple{Int,Int,Vararg{Int}} , indices:: Tuple{AbstractCloseOpen,Vararg{Base.IteratorsMD.OrdinalRangeInt}} )
94
106
rng = indices[1 ]
95
107
I1 = state[1 ] + step (rng)
96
- if Base . IteratorsMD . __is_valid_range (I1, rng) && state[1 ] != last (rng)
108
+ if __is_valid_range (I1, rng) && state[1 ] != last (rng)
97
109
return true , (I1, Base. tail (state)... )
98
110
end
99
111
valid, I = Base. IteratorsMD. __inc (Base. tail (state), Base. tail (indices))
103
115
@inline function Base. IteratorsMD. __inc (state:: Tuple{Int,Int,Vararg{Int}} , indices:: Tuple{AbstractCloseOpen,Vararg} )
104
116
rng = indices[1 ]
105
117
I1 = state[1 ] + step (rng)
106
- if Base . IteratorsMD . __is_valid_range (I1, rng) && state[1 ] != last (rng)
118
+ if __is_valid_range (I1, rng) && state[1 ] != last (rng)
107
119
return true , (I1, Base. tail (state)... )
108
120
end
109
121
valid, I = Base. IteratorsMD. __inc (Base. tail (state), Base. tail (indices))
0 commit comments