@@ -160,13 +160,28 @@ end
160160# ## Special handling for AbstractRange
161161
162162const OffsetRange{T} = OffsetArray{T,1 ,<: AbstractRange{T} }
163+ const IIUR = IdentityUnitRange{S} where S<: AbstractUnitRange{T} where T<: Integer
163164
164165Base. step (a:: OffsetRange ) = step (parent (a))
165166
166167Base. getindex (a:: OffsetRange , r:: OffsetRange ) = OffsetArray (a[parent (r)], r. offsets)
167168Base. getindex (a:: OffsetRange , r:: AbstractRange ) = a. parent[r .- a. offsets[1 ]]
168169Base. getindex (a:: AbstractRange , r:: OffsetRange ) = OffsetArray (a[parent (r)], r. offsets)
169170
171+ @inline @propagate_inbounds Base. getindex (r:: UnitRange , s:: IIUR ) =
172+ OffsetArray (r[s. indices], s)
173+
174+ @inline @propagate_inbounds Base. getindex (r:: StepRange , s:: IIUR ) =
175+ OffsetArray (r[s. indices], s)
176+
177+ @inline @propagate_inbounds Base. getindex (r:: StepRangeLen{T,<:Base.TwicePrecision,<:Base.TwicePrecision} , s:: IIUR ) where T =
178+ OffsetArray (r[s. indices], s)
179+ @inline @propagate_inbounds Base. getindex (r:: StepRangeLen{T} , s:: IIUR ) where {T} =
180+ OffsetArray (r[s. indices], s)
181+
182+ @inline @propagate_inbounds Base. getindex (r:: LinRange , s:: IIUR ) =
183+ OffsetArray (r[s. indices], s)
184+
170185# ## Convenience functions ###
171186
172187Base. fill (x, inds:: Tuple{UnitRange,Vararg{UnitRange}} ) =
0 commit comments