@@ -353,18 +353,18 @@ end
353353
354354for OR in [:IIUR , :IdOffsetRange ]
355355 for R in [:StepRange , :StepRangeLen , :LinRange , :UnitRange ]
356- @eval @propagate_inbounds Base. getindex (r:: $R , s:: $OR ) = OffsetArray (r[_unwrap (s)], axes (s))
356+ @eval @propagate_inbounds Base. getindex (r:: $R , s:: $OR ) = OffsetArray (r[no_offset_view (s)], axes (s))
357357 end
358358
359359 # this method is needed for ambiguity resolution
360360 @eval @propagate_inbounds Base. getindex (r:: StepRangeLen{T,<:Base.TwicePrecision,<:Base.TwicePrecision} , s:: $OR ) where T =
361- OffsetArray (r[_unwrap (s)], axes (s))
361+ OffsetArray (r[no_offset_view (s)], axes (s))
362362end
363363
364364#= Integer UnitRanges may return an appropriate AbstractUnitRange{<:Integer}, as the result may be used in indexing, and
365365indexing is faster with ranges =#
366- @propagate_inbounds Base. getindex (r:: UnitRange{<:Integer} , s:: IdOffsetRange ) = IdOffsetRange (r[_unwrap (s)] .- s. offset, s. offset)
367- @propagate_inbounds Base. getindex (r:: UnitRange{<:Integer} , s:: IIUR ) = IdentityUnitRange (r[_unwrap (s)])
366+ @propagate_inbounds Base. getindex (r:: UnitRange{<:Integer} , s:: IdOffsetRange ) = IdOffsetRange (r[no_offset_view (s)] .- s. offset, s. offset)
367+ @propagate_inbounds Base. getindex (r:: UnitRange{<:Integer} , s:: IIUR ) = IdentityUnitRange (r[no_offset_view (s)])
368368
369369function Base. show (io:: IO , r:: OffsetRange )
370370 show (io, r. parent)
@@ -435,7 +435,6 @@ julia> A
435435```
436436"""
437437no_offset_view (A:: OffsetArray ) = no_offset_view (parent (A))
438- no_offset_view (a:: AbstractUnitRange ) = UnitRange (a)
439438if isdefined (Base, :IdentityUnitRange )
440439 no_offset_view (a:: Base.Slice ) = Base. Slice (UnitRange (a)) # valid only if Slice is distinguished from IdentityUnitRange
441440 no_offset_view (S:: SubArray ) = view (parent (S), map (no_offset_view, parentindices (S))... )
@@ -445,7 +444,10 @@ no_offset_view(i::Number) = i
445444no_offset_view (A:: AbstractArray ) = _no_offset_view (axes (A), A)
446445_no_offset_view (:: Tuple{} , A:: AbstractArray{T,0} ) where T = A
447446_no_offset_view (:: Tuple{<:Base.OneTo,Vararg{<:Base.OneTo}} , A:: AbstractArray ) = A
447+ # the following method is needed for ambiguity resolution
448+ _no_offset_view (:: Tuple{<:Base.OneTo,Vararg{<:Base.OneTo}} , A:: AbstractUnitRange ) = A
448449_no_offset_view (:: Any , A:: AbstractArray ) = OffsetArray (A, Origin (1 ))
450+ _no_offset_view (:: Any , A:: AbstractUnitRange ) = UnitRange (A)
449451
450452# ###
451453# work around for segfault in searchsorted*
0 commit comments