Consider the following function:
function f()
> x::Float64 = 1.0
> function g(y::Float64)
> x += y
> end
> g(2.0)
> g(3.0)
> x
> end
Then @code_warntype gives:
julia> @code_warntype f()
> Variables:
> x::Float64
> g::F
> Body:
> begin # /***.jl, line 310:
> NewvarNode(:x)
> x = 1.0 # line 311:
> $(Expr(:method, :g,
> :((top(tuple))((top(tuple))(Float64)::Any,(top(tuple))()::Any)::Any),
> AST(:($(Expr(:lambda, Any[:y],
> Any[Any[symbol("#s5504")],Any[Any[:y,Any,0],Any[symbol("#s5504"),Any,18]],Any[Any[:x,Float64,7]]],
>
> :(begin # /***.jl, line 312:
> #s5504 = x + y::Any
> x =
> (top(typeassert))((top(convert))(Float64,#s5504)::Any,Float64)::Any
> return #s5504
> end::Any))))), false)) # line 314:
> (g::F)(2.0)::Any # line 315:
> (g::F)(3.0)::Any # line 316:
> return x::Float64
> end::Float64
Is there anything I can do to make it recognize that the type of x doesn't
change here? It seems to think that "y" can be Any, despite the annotation
saying it can only be Float64. I am missing something here?