@@ -1139,6 +1139,7 @@ static jl_value_t *jl_deserialize_value(jl_serializer_state *s, jl_value_t **loc
1139
1139
1140
1140
static jl_value_t * jl_deserialize_datatype (jl_serializer_state * s , int pos , jl_value_t * * loc ) JL_GC_DISABLED
1141
1141
{
1142
+ assert (pos == backref_list .len - 1 && "nothing should have been deserialized since assigning pos" );
1142
1143
int tag = read_uint8 (s -> s );
1143
1144
if (tag == 6 || tag == 7 ) {
1144
1145
jl_typename_t * name = (jl_typename_t * )jl_deserialize_value (s , NULL );
@@ -1154,18 +1155,17 @@ static jl_value_t *jl_deserialize_datatype(jl_serializer_state *s, int pos, jl_v
1154
1155
backref_list .items [pos ] = dtv ;
1155
1156
return dtv ;
1156
1157
}
1157
- size_t size = read_int32 (s -> s );
1158
- uint8_t flags = read_uint8 (s -> s );
1159
- uint8_t memflags = read_uint8 (s -> s );
1160
- jl_datatype_t * dt = NULL ;
1161
- if (tag == 0 || tag == 5 || tag == 10 || tag == 11 || tag == 12 )
1162
- dt = jl_new_uninitialized_datatype ();
1163
- else {
1158
+ if (!(tag == 0 || tag == 5 || tag == 10 || tag == 11 || tag == 12 )) {
1164
1159
assert (0 && "corrupt deserialization state" );
1165
1160
abort ();
1166
1161
}
1167
- assert ( pos == backref_list . len - 1 && "nothing should have been deserialized since assigning pos" );
1162
+ jl_datatype_t * dt = jl_new_uninitialized_datatype ( );
1168
1163
backref_list .items [pos ] = dt ;
1164
+ if (loc != NULL && loc != HT_NOTFOUND )
1165
+ * loc = (jl_value_t * )dt ;
1166
+ size_t size = read_int32 (s -> s );
1167
+ uint8_t flags = read_uint8 (s -> s );
1168
+ uint8_t memflags = read_uint8 (s -> s );
1169
1169
dt -> size = size ;
1170
1170
dt -> abstract = flags & 1 ;
1171
1171
dt -> mutabl = (flags >> 1 ) & 1 ;
@@ -1179,11 +1179,6 @@ static jl_value_t *jl_deserialize_datatype(jl_serializer_state *s, int pos, jl_v
1179
1179
dt -> isinlinealloc = (memflags >> 5 ) & 1 ;
1180
1180
dt -> has_concrete_subtype = (memflags >> 6 ) & 1 ;
1181
1181
dt -> cached_by_hash = (memflags >> 7 ) & 1 ;
1182
- dt -> types = NULL ;
1183
- dt -> parameters = NULL ;
1184
- dt -> name = NULL ;
1185
- dt -> super = NULL ;
1186
- dt -> layout = NULL ;
1187
1182
if (!dt -> abstract )
1188
1183
dt -> ninitialized = read_uint16 (s -> s );
1189
1184
else
@@ -1247,14 +1242,16 @@ static jl_value_t *jl_deserialize_datatype(jl_serializer_state *s, int pos, jl_v
1247
1242
return (jl_value_t * )dt ;
1248
1243
}
1249
1244
1250
- static jl_value_t * jl_deserialize_value_svec (jl_serializer_state * s , uint8_t tag ) JL_GC_DISABLED
1245
+ static jl_value_t * jl_deserialize_value_svec (jl_serializer_state * s , uint8_t tag , jl_value_t * * loc ) JL_GC_DISABLED
1251
1246
{
1252
1247
size_t i , len ;
1253
1248
if (tag == TAG_SVEC )
1254
1249
len = read_uint8 (s -> s );
1255
1250
else
1256
1251
len = read_int32 (s -> s );
1257
- jl_svec_t * sv = jl_alloc_svec_uninit (len );
1252
+ jl_svec_t * sv = jl_alloc_svec (len );
1253
+ if (loc != NULL )
1254
+ * loc = (jl_value_t * )sv ;
1258
1255
arraylist_push (& backref_list , (jl_value_t * )sv );
1259
1256
jl_value_t * * data = jl_svec_data (sv );
1260
1257
for (i = 0 ; i < len ; i ++ ) {
@@ -1689,7 +1686,7 @@ static jl_value_t *jl_deserialize_value(jl_serializer_state *s, jl_value_t **loc
1689
1686
}
1690
1687
return (jl_value_t * )bp ;
1691
1688
case TAG_SVEC : JL_FALLTHROUGH ; case TAG_LONG_SVEC :
1692
- return jl_deserialize_value_svec (s , tag );
1689
+ return jl_deserialize_value_svec (s , tag , loc );
1693
1690
case TAG_COMMONSYM :
1694
1691
return deser_symbols [read_uint8 (s -> s )];
1695
1692
case TAG_SYMBOL : JL_FALLTHROUGH ; case TAG_LONG_SYMBOL :
0 commit comments