I'm not sure what :(::) is supposed to do below, but not giving an error at 
top level suggests to me that x[1] is "an expression computing a value." In 
any case, I was surprised that += runs but doesn't `setindex!` x


julia> x=zeros(2)
2-element Array{Float64,1}:
 0.0
 0.0
julia> x[1]::Float64 += 1.
1.0
julia> x
2-element Array{Float64,1}:
 0.0
 0.0
julia> x[1]::Float64 = 1.
ERROR: syntax: invalid assignment location "x[1]"

julia> myf(x) = x[1]::Float64+=1
myf (generic function with 1 method)
julia> code_lowered(myf,(Array,))
1-element Array{Any,1}:
 :($(Expr(:lambda, {:x}, 
{{:#s36,:#s40},{{:x,:Any,0},{:#s36,:Any,18},{:#s40,:Float64,2}},{}}, 
:(begin  # none, line 1:
        #s40 = top(typeassert)(top(convert)(Float64,getindex(x,1)),Float64)
        #s36 = top(typeassert)(#s40,Float64) + 1
        #s40 = top(typeassert)(top(convert)(Float64,#s36),Float64)
        return #s36
    end))))
julia> myf_noassert(x) = x[1]+=1
myf_noassert (generic function with 1 method)
julia> code_lowered(myf_noassert, (Array,))
1-element Array{Any,1}:
 :($(Expr(:lambda, {:x}, {{:#s30},{{:x,:Any,0},{:#s30,:Any,18}},{}}, 
:(begin  # none, line 1:
        #s30 = getindex(x,1) + 1
        setindex!(x,#s30,1)
        return #s30
    end))))

Reply via email to