Skip to content

Commit e33d4d0

Browse files
committed
Adapt to binding world-age changes (JuliaLang/julia#57102)
1 parent b60bb2b commit e33d4d0

File tree

2 files changed

+32
-14
lines changed

2 files changed

+32
-14
lines changed

src/Tracy.jl

+30-12
Original file line numberDiff line numberDiff line change
@@ -52,20 +52,38 @@ const ID = gensym(:id)
5252
const META = gensym(:meta)
5353
const METAType = Vector{TracySrcLoc}
5454

55-
function meta(m::Module; autoinit::Bool=true)
56-
if !isdefined(m, META) || getfield(m, META) === nothing
57-
autoinit ? initmeta(m) : return nothing
55+
@static if VERSION >= v"1.12-DEV"
56+
function meta(m::Module; autoinit::Bool=true)
57+
if !isdefinedglobal(m, META)
58+
autoinit ? invokelatest(initmeta, m) : return nothing
59+
end
60+
return invokelatest(getfield, m, META)::METAType
61+
end
62+
63+
function initmeta(m::Module)
64+
if !isdefinedglobal(m, META)
65+
Core.eval(m, :($META = $(METAType())))
66+
Core.eval(m, :($ID() = nothing))
67+
Core.eval(m, :($Tracy.tracepoint_enabled(::Val{$ID}, ::Val) = true))
68+
end
69+
nothing
70+
end
71+
else
72+
function meta(m::Module; autoinit::Bool=true)
73+
if !isdefined(m, META) || getfield(m, META) === nothing
74+
autoinit ? initmeta(m) : return nothing
75+
end
76+
return getfield(m, META)::METAType
5877
end
59-
return getfield(m, META)::METAType
60-
end
6178

62-
function initmeta(m::Module)
63-
if !isdefined(m, META) || getfield(m, META) === nothing
64-
Core.eval(m, :($META = $(METAType())))
65-
Core.eval(m, :($ID() = nothing))
66-
Core.eval(m, :($Tracy.tracepoint_enabled(::Val{$ID}, ::Val) = true))
79+
function initmeta(m::Module)
80+
if !isdefined(m, META) || getfield(m, META) === nothing
81+
Core.eval(m, :($META = $(METAType())))
82+
Core.eval(m, :($ID() = nothing))
83+
Core.eval(m, :($Tracy.tracepoint_enabled(::Val{$ID}, ::Val) = true))
84+
end
85+
nothing
6786
end
68-
nothing
6987
end
7088

7189
const modules = Set{Module}()
@@ -112,7 +130,7 @@ function __init__()
112130
for m in modules
113131
for (i, srcloc) in enumerate(meta(m))
114132
if pointer_from_objref(srcloc) == tracy_srcloc_ptr
115-
m_id = getfield(m, ID)
133+
m_id = invokelatest(getfield, m, ID)
116134
old_enable = srcloc.enabled
117135
if enable != old_enable
118136
if old_enable == 0xFF

src/tracepoint.jl

+2-2
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ function _tracepoint(name::Union{String, Nothing}, func::Union{String, Nothing},
141141
push!(meta(mod), srcloc)
142142

143143
N = length(meta(mod))
144-
m_id = getfield(mod, ID)
144+
m_id = invokelatest(getfield, mod, ID)
145145

146146
return quote
147147
if tracepoint_enabled(Val($m_id), Val($N))
@@ -211,7 +211,7 @@ existing code containing the tracepoint(s).
211211
It is strongly recommended to use `enable_tracepoint` instead.
212212
"""
213213
function configure_tracepoint(m::Module, enable::Bool; name="", func="", file="")
214-
m_id = getfield(m, ID)
214+
m_id = invokelatest(getfield, m, ID)
215215
for (i, srcloc) in enumerate(meta(m))
216216
contains(srcloc.name, name) || continue
217217
contains(srcloc.func, func) || continue

0 commit comments

Comments
 (0)