Skip to content

Commit 317414f

Browse files
committed
deserialize MethodTables in a world-aware manner
1 parent cc30ce8 commit 317414f

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)
@@ -788,8 +788,10 @@ function deserialize_typename_body(s::AbstractSerializer, tn, number, name, mod,
788788
if makenew
789789
tn.mt = ccall(:jl_new_method_table, Any, (Any, Any), name, mod)
790790
tn.mt.name = mtname
791-
tn.mt.defs = defs
792791
tn.mt.max_args = maxa
792+
for def in defs
793+
ccall(:jl_method_table_insert, Void, (Any, Any, Ptr{Void}), tn.mt, def, C_NULL)
794+
end
793795
end
794796
tag = Int32(read(s.io, UInt8)::UInt8)
795797
if tag != UNDEFREF_TAG

src/gf.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1016,7 +1016,7 @@ static int invalidate_conflicting(jl_typemap_entry_t *oldentry, struct typemap_i
10161016
return 1;
10171017
}
10181018

1019-
void jl_method_table_insert(jl_methtable_t *mt, jl_method_t *method, jl_tupletype_t *simpletype)
1019+
JL_DLLEXPORT void jl_method_table_insert(jl_methtable_t *mt, jl_method_t *method, jl_tupletype_t *simpletype)
10201020
{
10211021
assert(jl_is_method(method));
10221022
assert(jl_is_mtable(mt));

0 commit comments

Comments
 (0)