Cthulhu.jl
Cthulhu.jl copied to clipboard
`::Any::Any` written for certain code pattern
This is for:
z = 0
function f_global(x)
for v in x
global z += v
end
end
Note the double ::Any.
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.