Skip to content

Commit d952dd4

Browse files
committed
deserialize MethodTables in a world-aware manner
1 parent e89faa3 commit d952dd4

File tree

2 files changed

+5
-3
lines changed

2 files changed

+5
-3
lines changed

base/serialize.jl

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -410,7 +410,7 @@ function serialize_typename_body(s::AbstractSerializer, t::TypeName)
410410
serialize(s, t.primary.ninitialized)
411411
if isdefined(t, :mt)
412412
serialize(s, t.mt.name)
413-
serialize(s, t.mt.defs)
413+
serialize(s, collect(Base.MethodList(t.mt)))
414414
serialize(s, t.mt.max_args)
415415
if isdefined(t.mt, :kwsorter)
416416
serialize(s, t.mt.kwsorter)
@@ -794,8 +794,10 @@ function deserialize_typename_body(s::AbstractSerializer, tn, number, name, mod,
794794
if makenew
795795
tn.mt = ccall(:jl_new_method_table, Any, (Any, Any), name, mod)
796796
tn.mt.name = mtname
797-
tn.mt.defs = defs
798797
tn.mt.max_args = maxa
798+
for def in defs
799+
ccall(:jl_method_table_insert, Void, (Any, Any, Ptr{Void}), tn.mt, def, C_NULL)
800+
end
799801
end
800802
tag = Int32(read(s.io, UInt8)::UInt8)
801803
if tag != UNDEFREF_TAG

src/gf.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -901,7 +901,7 @@ static int invalidate_conflicting(jl_typemap_entry_t *oldentry, struct typemap_i
901901
return 1;
902902
}
903903

904-
void jl_method_table_insert(jl_methtable_t *mt, jl_method_t *method, jl_tupletype_t *simpletype)
904+
JL_DLLEXPORT void jl_method_table_insert(jl_methtable_t *mt, jl_method_t *method, jl_tupletype_t *simpletype)
905905
{
906906
assert(jl_is_method(method));
907907
assert(jl_is_mtable(mt));

0 commit comments

Comments
 (0)