@@ -78,14 +78,14 @@ static const intptr_t LongPhic_tag = 27;
7878static const intptr_t LiteralVal_tag = 28 ;
7979static const intptr_t SmallInt64_tag = 29 ;
8080static const intptr_t SmallDataType_tag = 30 ;
81- static const intptr_t Int32_tag = 31 ;
8281static const intptr_t Array1d_tag = 32 ;
8382static const intptr_t Singleton_tag = 33 ;
8483static const intptr_t CommonSym_tag = 34 ;
8584static const intptr_t NearbyGlobal_tag = 35 ; // a GlobalRef pointing to tree_enclosing_module
8685static const intptr_t CoreMod_tag = 36 ;
8786static const intptr_t BaseMod_tag = 37 ;
8887static const intptr_t BITypeName_tag = 38 ; // builtin TypeName
88+ static const intptr_t NearbyModule_tag = 39 ;
8989static const intptr_t Null_tag = 253 ;
9090static const intptr_t ShortBackRef_tag = 254 ;
9191static const intptr_t BackRef_tag = 255 ;
@@ -442,9 +442,8 @@ static int is_ast_node(jl_value_t *v)
442442 return jl_is_symbol (v ) || jl_is_slot (v ) || jl_is_ssavalue (v ) ||
443443 jl_is_uniontype (v ) || jl_is_expr (v ) || jl_is_newvarnode (v ) ||
444444 jl_is_svec (v ) || jl_is_tuple (v ) || ((jl_datatype_t * )jl_typeof (v ))-> instance ||
445- jl_is_int32 (v ) || jl_is_int64 (v ) || jl_is_bool (v ) ||
446- jl_is_quotenode (v ) || jl_is_gotonode (v ) ||
447- jl_is_linenode (v ) || jl_is_globalref (v ) ||
445+ jl_is_int32 (v ) || jl_is_int64 (v ) || jl_is_bool (v ) || jl_is_uint8 (v ) ||
446+ jl_is_quotenode (v ) || jl_is_gotonode (v ) || jl_is_linenode (v ) || jl_is_globalref (v ) ||
448447 jl_is_phinode (v ) || jl_is_phicnode (v ) || jl_is_upsilonnode (v ) || jl_is_pinode (v ) ||
449448 jl_typeis (v , jl_lineinfonode_type );
450449}
@@ -491,6 +490,10 @@ static void jl_serialize_value_(jl_serializer_state *s, jl_value_t *v, int as_li
491490 writetag (s -> s , (jl_value_t * )BaseMod_tag );
492491 return ;
493492 }
493+ else if (v == (jl_value_t * )s -> tree_enclosing_module ) {
494+ writetag (s -> s , (jl_value_t * )NearbyModule_tag );
495+ return ;
496+ }
494497 else if (!as_literal && !is_ast_node (v )) {
495498 writetag (s -> s , (jl_value_t * )LiteralVal_tag );
496499 int id = literal_val_id (s , v );
@@ -499,7 +502,7 @@ static void jl_serialize_value_(jl_serializer_state *s, jl_value_t *v, int as_li
499502 return ;
500503 }
501504 }
502- else {
505+ else if (! jl_is_uint8 ( v )) {
503506 bp = ptrhash_bp (& backref_table , v );
504507 if (* bp != HT_NOTFOUND ) {
505508 uintptr_t pos = (char * )* bp - (char * )HT_NOTFOUND - 1 ;
@@ -804,19 +807,29 @@ static void jl_serialize_value_(jl_serializer_state *s, jl_value_t *v, int as_li
804807 te = te -> next ;
805808 }
806809 }
807- else {
808- jl_datatype_t * t = (jl_datatype_t * )jl_typeof (v );
810+ else if (jl_typeis (v , jl_int64_type )) {
809811 void * data = jl_data_ptr (v );
810- if (t == jl_int64_type &&
811- * (int64_t * )data >= S32_MIN && * (int64_t * )data <= S32_MAX ) {
812+ if (* (int64_t * )data >= S32_MIN && * (int64_t * )data <= S32_MAX ) {
812813 writetag (s -> s , (jl_value_t * )SmallInt64_tag );
813814 write_int32 (s -> s , (int32_t )* (int64_t * )data );
814815 }
815- else if (t == jl_int32_type ) {
816- writetag (s -> s , (jl_value_t * )Int32_tag );
817- write_int32 (s -> s , (int32_t )* (int32_t * )data );
818- }
819816 else {
817+ writetag (s -> s , (jl_value_t * )jl_int64_type );
818+ write_int64 (s -> s , * (int64_t * )data );
819+ }
820+ }
821+ else if (jl_typeis (v , jl_int32_type )) {
822+ writetag (s -> s , (jl_value_t * )jl_int32_type );
823+ write_int32 (s -> s , * (int32_t * )jl_data_ptr (v ));
824+ }
825+ else if (jl_typeis (v , jl_uint8_type )) {
826+ writetag (s -> s , (jl_value_t * )jl_uint8_type );
827+ write_int8 (s -> s , * (int8_t * )jl_data_ptr (v ));
828+ }
829+ else {
830+ jl_datatype_t * t = (jl_datatype_t * )jl_typeof (v );
831+ void * data = jl_data_ptr (v );
832+ {
820833 if (v == t -> instance ) {
821834 if (s -> mode == MODE_MODULE && !type_in_worklist (t )) {
822835 // also flag this in the backref table as special
@@ -1948,17 +1961,30 @@ static jl_value_t *jl_deserialize_value_(jl_serializer_state *s, jl_value_t *vta
19481961 arraylist_push (& backref_list , v );
19491962 return v ;
19501963 }
1951- else if (vtag == (jl_value_t * )Int32_tag ) {
1964+ else if (vtag == (jl_value_t * )jl_int64_type ) {
1965+ jl_value_t * v = jl_box_int64 ((int64_t )read_uint64 (s -> s ));
1966+ if (usetable )
1967+ arraylist_push (& backref_list , v );
1968+ return v ;
1969+ }
1970+ else if (vtag == (jl_value_t * )jl_int32_type ) {
19521971 jl_value_t * v = jl_box_int32 (read_int32 (s -> s ));
19531972 if (usetable )
19541973 arraylist_push (& backref_list , v );
19551974 return v ;
19561975 }
1976+ else if (vtag == (jl_value_t * )jl_uint8_type ) {
1977+ return jl_box_uint8 (read_uint8 (s -> s ));
1978+ }
19571979 else if (vtag == (jl_value_t * )NearbyGlobal_tag ) {
19581980 assert (s -> tree_enclosing_module != NULL );
19591981 jl_value_t * sym = jl_deserialize_value (s , NULL );
19601982 return jl_module_globalref (s -> tree_enclosing_module , (jl_sym_t * )sym );
19611983 }
1984+ else if (vtag == (jl_value_t * )NearbyModule_tag ) {
1985+ assert (s -> tree_enclosing_module != NULL );
1986+ return (jl_value_t * )s -> tree_enclosing_module ;
1987+ }
19621988 else if (vtag == (jl_value_t * )jl_globalref_type ) {
19631989 return jl_deserialize_value_globalref (s );
19641990 }
@@ -2952,10 +2978,11 @@ void jl_init_serializer(void)
29522978 (void * )LongExpr_tag , (void * )LongPhi_tag , (void * )LongPhic_tag ,
29532979 (void * )LiteralVal_tag , jl_string_type ,
29542980 (void * )SmallInt64_tag , (void * )SmallDataType_tag , jl_typemap_entry_type ,
2955- (void * )Int32_tag , ( void * ) Array1d_tag , (void * )Singleton_tag ,
2981+ (void * )Array1d_tag , (void * )Singleton_tag ,
29562982 jl_module_type , jl_tvar_type , jl_method_instance_type , jl_method_type ,
29572983 (void * )CommonSym_tag , (void * )NearbyGlobal_tag , jl_globalref_type ,
29582984 (void * )CoreMod_tag , (void * )BaseMod_tag , (void * )BITypeName_tag ,
2985+ (void * )NearbyModule_tag , jl_int32_type , jl_int64_type , jl_uint8_type ,
29592986 // everything above here represents a class of object rather than only a literal
29602987
29612988 jl_emptysvec , jl_emptytuple , jl_false , jl_true , jl_nothing , jl_any_type ,
@@ -2986,10 +3013,9 @@ void jl_init_serializer(void)
29863013 jl_box_int64 (18 ), jl_box_int64 (19 ), jl_box_int64 (20 ),
29873014 jl_box_int64 (21 ), jl_box_int64 (22 ), jl_box_int64 (23 ),
29883015 jl_box_int64 (24 ), jl_box_int64 (25 ), jl_box_int64 (26 ),
2989- jl_box_int64 (27 ), jl_box_int64 ( 28 ),
3016+ jl_box_int64 (27 ),
29903017
2991- jl_bool_type , jl_int32_type , jl_int64_type ,
2992- jl_gotonode_type , jl_linenumbernode_type , jl_lineinfonode_type ,
3018+ jl_bool_type , jl_gotonode_type , jl_linenumbernode_type , jl_lineinfonode_type ,
29933019 jl_quotenode_type , jl_pinode_type , jl_upsilonnode_type ,
29943020 jl_type_type , jl_bottom_type , jl_ref_type ,
29953021 jl_pointer_type , jl_vararg_type , jl_abstractarray_type , jl_void_type ,
@@ -3000,7 +3026,7 @@ void jl_init_serializer(void)
30003026 jl_voidpointer_type , jl_newvarnode_type , jl_abstractstring_type ,
30013027 jl_array_symbol_type , jl_anytuple_type , jl_tparam0 (jl_anytuple_type ),
30023028 jl_emptytuple_type , jl_array_uint8_type , jl_code_info_type ,
3003- jl_typeofbottom_type , jl_namedtuple_type , jl_array_int_type ,
3029+ jl_typeofbottom_type , jl_namedtuple_type , jl_array_int32_type ,
30043030
30053031 ptls -> root_task ,
30063032
0 commit comments