@@ -122,23 +122,23 @@ function invalidate_code_for_globalref!(b::Core.Binding, invalidated_bpart::Core
122122 invalidated_any |= invalidate_method_for_globalref! (gr, method, invalidated_bpart, new_max_world)
123123 end
124124 end
125- if isdefined (b, :backedges )
126- for edge in b. backedges
127- if isa (edge, CodeInstance)
128- ccall (:jl_invalidate_code_instance , Cvoid, (Any, UInt), edge, new_max_world)
129- invalidated_any = true
130- elseif isa (edge, Core. Binding)
131- isdefined (edge, :partitions ) || continue
132- latest_bpart = edge. partitions
133- latest_bpart. max_world == typemax (UInt) || continue
134- is_some_imported (binding_kind (latest_bpart)) || continue
135- if is_some_binding_imported (binding_kind (latest_bpart))
136- partition_restriction (latest_bpart) === b || continue
137- end
138- push! (queued_bindings, (edge, latest_bpart, latest_bpart))
139- else
140- invalidated_any |= invalidate_method_for_globalref! (gr, edge:: Method , invalidated_bpart, new_max_world)
125+ nbackedges = ccall (:jl_binding_backedges_length , Csize_t, (Any,), b)
126+ for i = 1 : nbackedges
127+ edge = ccall (:jl_binding_backedges_getindex , Any, (Any, Csize_t), b, i)
128+ if isa (edge, CodeInstance)
129+ ccall (:jl_invalidate_code_instance , Cvoid, (Any, UInt), edge, new_max_world)
130+ invalidated_any = true
131+ elseif isa (edge, Core. Binding)
132+ isdefined (edge, :partitions ) || continue
133+ latest_bpart = edge. partitions
134+ latest_bpart. max_world == typemax (UInt) || continue
135+ is_some_imported (binding_kind (latest_bpart)) || continue
136+ if is_some_binding_imported (binding_kind (latest_bpart))
137+ partition_restriction (latest_bpart) === b || continue
141138 end
139+ push! (queued_bindings, (edge, latest_bpart, latest_bpart))
140+ else
141+ invalidated_any |= invalidate_method_for_globalref! (gr, edge:: Method , invalidated_bpart, new_max_world)
142142 end
143143 end
144144 end
@@ -149,7 +149,7 @@ function invalidate_code_for_globalref!(b::Core.Binding, invalidated_bpart::Core
149149 usings_backedges = ccall (:jl_get_module_usings_backedges , Any, (Any,), gr. mod)
150150 if usings_backedges != = nothing
151151 for user:: Module in usings_backedges:: Vector{Any}
152- user_binding = ccall (:jl_get_module_binding_or_nothing , Any, (Any, Any), user, gr. name)
152+ user_binding = ccall (:jl_get_module_binding_or_nothing , Any, (Any, Any), user, gr. name):: Union{Core.Binding, Nothing}
153153 user_binding === nothing && continue
154154 isdefined (user_binding, :partitions ) || continue
155155 latest_bpart = user_binding. partitions
0 commit comments