diff --git a/base/abstractarray.jl b/base/abstractarray.jl index 1a61da847e75f9..f09f8b69dd06e7 100644 --- a/base/abstractarray.jl +++ b/base/abstractarray.jl @@ -853,10 +853,14 @@ _to_subscript_indices{T}(A::AbstractArray{T,0}, i::Int) = () # TODO: REMOVE FOR _to_subscript_indices{T}(A::AbstractArray{T,0}, I::Int...) = () # TODO: DEPRECATE FOR #14770 function _to_subscript_indices{T,N}(A::AbstractArray{T,N}, I::Int...) # TODO: DEPRECATE FOR #14770 @_inline_meta - J, _ = IteratorsMD.split(I, Val{N}) # (maybe) drop any trailing indices - sz = _remaining_size(J, size(A)) # compute trailing size (overlapping the final index) + J, Jrem = IteratorsMD.split(I, Val{N}) + _to_subscript_indices(A, J, Jrem) +end +function _to_subscript_indices(A::AbstractArray, J::Tuple, Jrem::Tuple{}) + sz = _remaining_size(J, indices(A)) # compute trailing size (overlapping the final index) (front(J)..., _unsafe_ind2sub(sz, last(J))...) # (maybe) extend the last index end +_to_subscript_indices(A, J::Tuple, Jrem::Tuple) = J # already bounds-checked, safe to drop _to_subscript_indices{T,N}(A::AbstractArray{T,N}, I::Vararg{Int,N}) = I _remaining_size(::Tuple{Any}, t::Tuple) = t _remaining_size(h::Tuple, t::Tuple) = (@_inline_meta; _remaining_size(tail(h), tail(t))) diff --git a/test/offsetarray.jl b/test/offsetarray.jl index d03bae73254e2c..42939498cb3cba 100644 --- a/test/offsetarray.jl +++ b/test/offsetarray.jl @@ -22,10 +22,10 @@ S = OffsetArray(view(A0, 1:2, 1:2), (-1,2)) # LinearSlow @test_throws ErrorException size(A, 1) # Scalar indexing -@test A[0,3] == A[1] == S[0,3] == S[1] == 1 -@test A[1,3] == A[2] == S[1,3] == S[2] == 2 -@test A[0,4] == A[3] == S[0,4] == S[3] == 3 -@test A[1,4] == A[4] == S[1,4] == S[4] == 4 +@test A[0,3] == A[1] == A[0,3,1] == S[0,3] == S[1] == S[0,3,1] == 1 +@test A[1,3] == A[2] == A[1,3,1] == S[1,3] == S[2] == S[1,3,1] == 2 +@test A[0,4] == A[3] == A[0,4,1] == S[0,4] == S[3] == S[0,4,1] == 3 +@test A[1,4] == A[4] == A[1,4,1] == S[1,4] == S[4] == S[1,4,1] == 4 @test_throws BoundsError A[1,1] @test_throws BoundsError S[1,1]