Skip to content

Commit

Permalink
Merge pull request #13461 from JuliaLang/yyc/setindex-return
Browse files Browse the repository at this point in the history
Avoid introducing local variable (and GC frame store) in `unsafe_setindex!`
  • Loading branch information
mbauman committed Oct 7, 2015
2 parents d0a50e0 + bb247cf commit f17d5af
Showing 1 changed file with 4 additions and 1 deletion.
5 changes: 4 additions & 1 deletion base/array.jl
Original file line number Diff line number Diff line change
Expand Up @@ -303,7 +303,10 @@ end
setindex!{T}(A::Array{T}, x, i1::Real) = arrayset(A, convert(T,x)::T, to_index(i1))
setindex!{T}(A::Array{T}, x, i1::Real, i2::Real, I::Real...) = arrayset(A, convert(T,x)::T, to_index(i1), to_index(i2), to_indexes(I...)...)

unsafe_setindex!{T}(A::Array{T}, x, i1::Real, I::Real...) = @inbounds return arrayset(A, convert(T,x)::T, to_index(i1), to_indexes(I...)...)
# Type inference is confused by `@inbounds return ...` and introduces a
# !ispointerfree local variable and a GC frame
unsafe_setindex!{T}(A::Array{T}, x, i1::Real, I::Real...) =
(@inbounds arrayset(A, convert(T,x)::T, to_index(i1), to_indexes(I...)...); A)

# These are redundant with the abstract fallbacks but needed for bootstrap
function setindex!(A::Array, x, I::AbstractVector{Int})
Expand Down

0 comments on commit f17d5af

Please sign in to comment.