@@ -930,13 +930,28 @@ static void jl_serialize_value_(ios_t *s, jl_value_t *v)
930
930
// (which will need to be rehashed during deserialization anyhow)
931
931
jl_typemap_level_t * node = (jl_typemap_level_t * )v ;
932
932
size_t i , l ;
933
- assert ( // make sure this type has the expected ordering
934
- offsetof(jl_typemap_level_t , arg1 ) == 0 * sizeof (jl_value_t * ) &&
935
- offsetof(jl_typemap_level_t , targ ) == 1 * sizeof (jl_value_t * ) &&
936
- offsetof(jl_typemap_level_t , linear ) == 2 * sizeof (jl_value_t * ) &&
937
- offsetof(jl_typemap_level_t , any ) == 3 * sizeof (jl_value_t * ) &&
938
- offsetof(jl_typemap_level_t , key ) == 4 * sizeof (jl_value_t * ) &&
939
- sizeof (jl_typemap_level_t ) == 5 * sizeof (jl_value_t * ));
933
+ static_assert ( // make sure this type has the expected ordering
934
+ offsetof(jl_typemap_level_t , targ ) == 0 * sizeof (jl_value_t * ) &&
935
+ offsetof(jl_typemap_level_t , arg1 ) == 1 * sizeof (jl_value_t * ) &&
936
+ offsetof(jl_typemap_level_t , linear_leaf ) == 2 * sizeof (jl_value_t * ) &&
937
+ offsetof(jl_typemap_level_t , tname ) == 3 * sizeof (jl_value_t * ) &&
938
+ offsetof(jl_typemap_level_t , name1 ) == 4 * sizeof (jl_value_t * ) &&
939
+ offsetof(jl_typemap_level_t , linear ) == 5 * sizeof (jl_value_t * ) &&
940
+ offsetof(jl_typemap_level_t , any ) == 6 * sizeof (jl_value_t * ) &&
941
+ offsetof(jl_typemap_level_t , key ) == 7 * sizeof (jl_value_t * ) &&
942
+ sizeof (jl_typemap_level_t ) == 8 * sizeof (jl_value_t * ), "jl_typemap_level_t layout wrong" );
943
+ if (node -> targ != (void * )jl_nothing ) {
944
+ jl_array_t * a = jl_alloc_cell_1d (0 );
945
+ for (i = 0 , l = jl_array_len (node -> targ ); i < l ; i ++ ) {
946
+ jl_value_t * d = jl_cellref (node -> targ , i );
947
+ if (d != NULL && d != jl_nothing )
948
+ jl_cell_1d_push (a , d );
949
+ }
950
+ jl_serialize_value (s , a );
951
+ }
952
+ else {
953
+ jl_serialize_value (s , jl_nothing );
954
+ }
940
955
if (node -> arg1 != (void * )jl_nothing ) {
941
956
jl_array_t * a = jl_alloc_cell_1d (0 );
942
957
for (i = 0 , l = jl_array_len (node -> arg1 ); i < l ; i ++ ) {
@@ -949,10 +964,23 @@ static void jl_serialize_value_(ios_t *s, jl_value_t *v)
949
964
else {
950
965
jl_serialize_value (s , jl_nothing );
951
966
}
952
- if (node -> targ != (void * )jl_nothing ) {
967
+ jl_serialize_value (s , node -> linear_leaf );
968
+ if (node -> tname != (void * )jl_nothing ) {
953
969
jl_array_t * a = jl_alloc_cell_1d (0 );
954
- for (i = 0 , l = jl_array_len (node -> targ ); i < l ; i ++ ) {
955
- jl_value_t * d = jl_cellref (node -> targ , i );
970
+ for (i = 0 , l = jl_array_len (node -> tname ); i < l ; i ++ ) {
971
+ jl_value_t * d = jl_cellref (node -> tname , i );
972
+ if (d != NULL && d != jl_nothing )
973
+ jl_cell_1d_push (a , d );
974
+ }
975
+ jl_serialize_value (s , a );
976
+ }
977
+ else {
978
+ jl_serialize_value (s , jl_nothing );
979
+ }
980
+ if (node -> name1 != (void * )jl_nothing ) {
981
+ jl_array_t * a = jl_alloc_cell_1d (0 );
982
+ for (i = 0 , l = jl_array_len (node -> name1 ); i < l ; i ++ ) {
983
+ jl_value_t * d = jl_cellref (node -> name1 , i );
956
984
if (d != NULL && d != jl_nothing )
957
985
jl_cell_1d_push (a , d );
958
986
}
0 commit comments