@@ -923,8 +923,13 @@ EXTERN_INLINE_DECLARE enum jl_partition_kind decode_restriction_kind(jl_ptr_kind
923923 uint8_t bits = (pku & 0x7 );
924924 jl_value_t * val = (jl_value_t * )(pku & ~0x7 );
925925
926- if (val == NULL && bits == BINDING_KIND_IMPLICIT ) {
927- return BINDING_KIND_GUARD ;
926+ if (val == NULL ) {
927+ if (bits == BINDING_KIND_IMPLICIT ) {
928+ return BINDING_KIND_GUARD ;
929+ }
930+ if (bits == BINDING_KIND_CONST ) {
931+ return BINDING_KIND_UNDEF_CONST ;
932+ }
928933 }
929934
930935 return (enum jl_partition_kind )bits ;
@@ -946,10 +951,14 @@ STATIC_INLINE jl_value_t *decode_restriction_value(jl_ptr_kind_union_t JL_PROPAG
946951STATIC_INLINE jl_ptr_kind_union_t encode_restriction (jl_value_t * val , enum jl_partition_kind kind ) JL_NOTSAFEPOINT
947952{
948953#ifdef _P64
949- if (kind == BINDING_KIND_GUARD || kind == BINDING_KIND_DECLARED || kind == BINDING_KIND_FAILED )
954+ if (kind == BINDING_KIND_GUARD || kind == BINDING_KIND_DECLARED || kind == BINDING_KIND_FAILED || kind == BINDING_KIND_UNDEF_CONST )
950955 assert (val == NULL );
956+ else if (kind == BINDING_KIND_IMPLICIT || kind == BINDING_KIND_CONST )
957+ assert (val != NULL );
951958 if (kind == BINDING_KIND_GUARD )
952959 kind = BINDING_KIND_IMPLICIT ;
960+ else if (kind == BINDING_KIND_UNDEF_CONST )
961+ kind = BINDING_KIND_CONST ;
953962 assert ((((uintptr_t )val ) & 0x7 ) == 0 );
954963 return ((jl_ptr_kind_union_t )val ) | kind ;
955964#else
@@ -963,6 +972,10 @@ STATIC_INLINE int jl_bkind_is_some_import(enum jl_partition_kind kind) JL_NOTSAF
963972}
964973
965974STATIC_INLINE int jl_bkind_is_some_constant (enum jl_partition_kind kind ) JL_NOTSAFEPOINT {
975+ return kind == BINDING_KIND_CONST || kind == BINDING_KIND_CONST_IMPORT || kind == BINDING_KIND_UNDEF_CONST ;
976+ }
977+
978+ STATIC_INLINE int jl_bkind_is_defined_constant (enum jl_partition_kind kind ) JL_NOTSAFEPOINT {
966979 return kind == BINDING_KIND_CONST || kind == BINDING_KIND_CONST_IMPORT ;
967980}
968981
0 commit comments