Cthulhu.jl icon indicating copy to clipboard operation
Cthulhu.jl copied to clipboard

`::Any::Any` written for certain code pattern

Open KristofferC opened this issue 2 years ago • 1 comments

This is for:

z = 0
function f_global(x)
    for v in x
        global z += v
    end
end
image

Note the double ::Any.

KristofferC avatar Apr 03 '23 18:04 KristofferC

Note to self:

julia> hcat(1:length(mappings), tsn.typedsource.code, mappings)
20×3 Matrix{Any}:
  1  :(_2)                               Union{TreeNode{SyntaxData}, TreeNode{TypedSyntaxData}}[x]
  2  :(_3 = Base.iterate(%1))            Union{TreeNode{SyntaxData}, TreeNode{TypedSyntaxData}}[(= v x)]
  3  :(_3 === nothing)                   Union{TreeNode{SyntaxData}, TreeNode{TypedSyntaxData}}[]
  4  :(Base.not_int(%3))                 Union{TreeNode{SyntaxData}, TreeNode{TypedSyntaxData}}[]
  5  :(goto %20 if not %4)               Union{TreeNode{SyntaxData}, TreeNode{TypedSyntaxData}}[]
  6  :(_3::Tuple{Float64, Int64})        Union{TreeNode{SyntaxData}, TreeNode{TypedSyntaxData}}[]
  7  :(_4 = Core.getfield(%6, 1))        Union{TreeNode{SyntaxData}, TreeNode{TypedSyntaxData}}[v]
  8  :(Core.getfield(%6, 2))             Union{TreeNode{SyntaxData}, TreeNode{TypedSyntaxData}}[]
  9  nothing                             Union{TreeNode{SyntaxData}, TreeNode{TypedSyntaxData}}[]
 10  :(Main.z + _4)                      Union{TreeNode{SyntaxData}, TreeNode{TypedSyntaxData}}[(+= z v)]
 11  :(Core.get_binding_type(Main, :z))  Union{TreeNode{SyntaxData}, TreeNode{TypedSyntaxData}}[(+= z v)]
 12  :(Base.convert(%11, %10))           Union{TreeNode{SyntaxData}, TreeNode{TypedSyntaxData}}[(global (+= z v))]
 13  :(Core.typeassert(%12, %11))        Union{TreeNode{SyntaxData}, TreeNode{TypedSyntaxData}}[]
 14  :(Main.z = %13)                     Union{TreeNode{SyntaxData}, TreeNode{TypedSyntaxData}}[(+= z v)]
 15  :(_3 = Base.iterate(%1, %8))        Union{TreeNode{SyntaxData}, TreeNode{TypedSyntaxData}}[]
 16  :(_3 === nothing)                   Union{TreeNode{SyntaxData}, TreeNode{TypedSyntaxData}}[]
 17  :(Base.not_int(%16))                Union{TreeNode{SyntaxData}, TreeNode{TypedSyntaxData}}[]
 18  :(goto %20 if not %17)              Union{TreeNode{SyntaxData}, TreeNode{TypedSyntaxData}}[]
 19  :(goto %6)                          Union{TreeNode{SyntaxData}, TreeNode{TypedSyntaxData}}[]
 20  :(return nothing)                   Union{TreeNode{SyntaxData}, TreeNode{TypedSyntaxData}}[]

I suspect it's the assignment after the typeassert that's doing it, but I haven't verified.

timholy avatar Apr 03 '23 18:04 timholy