@@ -461,7 +461,7 @@ JL_DLLEXPORT jl_value_t *jl_get_binding_leaf_partitions_value_if_const(jl_bindin
461461 struct restriction_kind_pair rkp = { NULL , NULL , PARTITION_KIND_GUARD , 0 };
462462 if (!jl_get_binding_leaf_partitions_restriction_kind (b , & rkp , min_world , max_world ))
463463 return NULL ;
464- if (jl_bkind_is_some_constant (rkp .kind ) && rkp . kind != PARTITION_KIND_BACKDATED_CONST ) {
464+ if (jl_bkind_is_real_constant (rkp .kind )) {
465465 * maybe_depwarn = rkp .maybe_depwarn ;
466466 return rkp .restriction ;
467467 }
@@ -578,7 +578,7 @@ JL_DLLEXPORT jl_binding_partition_t *jl_declare_constant_val3(
578578 for (;;) {
579579 enum jl_partition_kind prev_kind = jl_binding_kind (prev_bpart );
580580 if (jl_bkind_is_some_constant (prev_kind ) || prev_kind == PARTITION_KIND_GLOBAL ||
581- ( jl_bkind_is_some_import (prev_kind ) )) {
581+ jl_bkind_is_some_import (prev_kind )) {
582582 need_backdate = 0 ;
583583 break ;
584584 }
@@ -917,22 +917,23 @@ JL_DLLEXPORT jl_value_t *jl_get_binding_value_seqcst(jl_binding_t *b)
917917 return jl_atomic_load (& b -> value );
918918}
919919
920- JL_DLLEXPORT jl_value_t * jl_get_binding_value_if_const (jl_binding_t * b )
920+ JL_DLLEXPORT jl_value_t * jl_get_latest_binding_value_if_const (jl_binding_t * b )
921921{
922- jl_binding_partition_t * bpart = jl_get_binding_partition (b , jl_current_task -> world_age );
923- jl_walk_binding_inplace (& b , & bpart , jl_current_task -> world_age );
922+ // See note below. Note that this is for some deprecated uses, and should not be added to new code.
923+ size_t world = jl_atomic_load_relaxed (& jl_world_counter );
924+ jl_binding_partition_t * bpart = jl_get_binding_partition (b , world );
925+ jl_walk_binding_inplace (& b , & bpart , world );
924926 enum jl_partition_kind kind = jl_binding_kind (bpart );
925927 if (jl_bkind_is_some_guard (kind ))
926928 return NULL ;
927- if (!jl_bkind_is_some_constant (kind ))
929+ if (!jl_bkind_is_real_constant (kind ))
928930 return NULL ;
929- check_backdated_binding (b , kind );
930931 return bpart -> restriction ;
931932}
932933
933- JL_DLLEXPORT jl_value_t * jl_get_binding_value_if_latest_resolved_and_const_debug_only (jl_binding_t * b )
934+ JL_DLLEXPORT jl_value_t * jl_get_latest_binding_value_if_resolved_and_const_debug_only (jl_binding_t * b )
934935{
935- // Unlike jl_get_binding_value_if_const this doesn't try to allocate new binding partitions if they
936+ // Unlike jl_get_latest_binding_value_if_const this doesn't try to allocate new binding partitions if they
936937 // don't already exist, making this JL_NOTSAFEPOINT. However, as a result, this may fail to return
937938 // a value - even if one does exist. It should only be used for reflection/debugging when the integrity
938939 // of the runtime is not guaranteed.
@@ -942,18 +943,17 @@ JL_DLLEXPORT jl_value_t *jl_get_binding_value_if_latest_resolved_and_const_debug
942943 if (!bpart )
943944 return NULL ;
944945 size_t max_world = jl_atomic_load_relaxed (& bpart -> max_world );
945- if (jl_atomic_load_relaxed ( & bpart -> min_world ) > jl_current_task -> world_age || jl_current_task -> world_age > max_world )
946+ if (max_world != ~( size_t ) 0 )
946947 return NULL ;
947948 enum jl_partition_kind kind = jl_binding_kind (bpart );
948949 if (jl_bkind_is_some_guard (kind ))
949950 return NULL ;
950- if (!jl_bkind_is_some_constant (kind ))
951+ if (!jl_bkind_is_real_constant (kind ))
951952 return NULL ;
952- check_backdated_binding (b , kind );
953953 return bpart -> restriction ;
954954}
955955
956- JL_DLLEXPORT jl_value_t * jl_get_binding_value_if_resolved_debug_only (jl_binding_t * b )
956+ JL_DLLEXPORT jl_value_t * jl_get_latest_binding_value_if_resolved_debug_only (jl_binding_t * b )
957957{
958958 // See note above. Use for debug/reflection purposes only.
959959 if (!b )
@@ -962,15 +962,14 @@ JL_DLLEXPORT jl_value_t *jl_get_binding_value_if_resolved_debug_only(jl_binding_
962962 if (!bpart )
963963 return NULL ;
964964 size_t max_world = jl_atomic_load_relaxed (& bpart -> max_world );
965- if (jl_atomic_load_relaxed ( & bpart -> min_world ) > jl_current_task -> world_age || jl_current_task -> world_age > max_world )
965+ if (max_world != ~( size_t ) 0 )
966966 return NULL ;
967967 enum jl_partition_kind kind = jl_binding_kind (bpart );
968968 if (jl_bkind_is_some_guard (kind ))
969969 return NULL ;
970970 if (jl_bkind_is_some_import (kind ))
971971 return NULL ;
972972 if (jl_bkind_is_some_constant (kind )) {
973- check_backdated_binding (b , kind );
974973 return bpart -> restriction ;
975974 }
976975 return jl_atomic_load_relaxed (& b -> value );
@@ -1005,6 +1004,7 @@ static jl_module_t *jl_binding_dbgmodule(jl_binding_t *b)
10051004// along the way.
10061005JL_DLLEXPORT jl_value_t * jl_get_existing_strong_gf (jl_binding_t * b , size_t new_world )
10071006{
1007+ assert (new_world > jl_atomic_load_relaxed (& jl_world_counter ));
10081008 jl_binding_partition_t * bpart = jl_get_binding_partition (b , new_world );
10091009 enum jl_partition_kind kind = jl_binding_kind (bpart );
10101010 if (jl_bkind_is_some_constant (kind ) && kind != PARTITION_KIND_IMPLICIT_CONST )
@@ -1026,7 +1026,7 @@ JL_DLLEXPORT jl_value_t *jl_get_existing_strong_gf(jl_binding_t *b, size_t new_w
10261026 check_safe_newbinding (b -> globalref -> mod , b -> globalref -> name );
10271027 return NULL ;
10281028 }
1029- jl_module_t * from = jl_binding_dbgmodule (b );\
1029+ jl_module_t * from = jl_binding_dbgmodule (b );
10301030 assert (from ); // Can only be NULL if implicit, which we excluded above
10311031 jl_errorf ("invalid method definition in %s: exported function %s.%s does not exist" ,
10321032 jl_module_debug_name (b -> globalref -> mod ), jl_module_debug_name (from ), jl_symbol_name (b -> globalref -> name ));
@@ -1722,7 +1722,7 @@ JL_DLLEXPORT int jl_globalref_is_const(jl_globalref_t *gr)
17221722 b = jl_get_module_binding (gr -> mod , gr -> name , 1 );
17231723 jl_binding_partition_t * bpart = jl_get_binding_partition (b , jl_current_task -> world_age );
17241724 jl_walk_binding_inplace (& b , & bpart , jl_current_task -> world_age );
1725- return jl_bkind_is_some_constant (jl_binding_kind (bpart ));
1725+ return jl_bkind_is_real_constant (jl_binding_kind (bpart ));
17261726}
17271727
17281728JL_DLLEXPORT void jl_disable_binding (jl_globalref_t * gr )
@@ -1751,7 +1751,7 @@ JL_DLLEXPORT int jl_is_const(jl_module_t *m, jl_sym_t *var)
17511751 jl_binding_t * b = jl_get_binding (m , var );
17521752 jl_binding_partition_t * bpart = jl_get_binding_partition (b , jl_current_task -> world_age );
17531753 jl_walk_binding_inplace (& b , & bpart , jl_current_task -> world_age );
1754- return b && jl_bkind_is_some_constant (jl_binding_kind (bpart ));
1754+ return b && jl_bkind_is_real_constant (jl_binding_kind (bpart ));
17551755}
17561756
17571757// set the deprecated flag for a binding:
0 commit comments