@@ -463,7 +463,7 @@ JL_DLLEXPORT jl_value_t *jl_get_binding_leaf_partitions_value_if_const(jl_bindin
463463 struct restriction_kind_pair rkp = { NULL , NULL , PARTITION_KIND_GUARD , 0 };
464464 if (!jl_get_binding_leaf_partitions_restriction_kind (b , & rkp , min_world , max_world ))
465465 return NULL ;
466- if (jl_bkind_is_some_constant (rkp .kind ) && rkp . kind != PARTITION_KIND_BACKDATED_CONST ) {
466+ if (jl_bkind_is_real_constant (rkp .kind )) {
467467 * maybe_depwarn = rkp .maybe_depwarn ;
468468 return rkp .restriction ;
469469 }
@@ -581,7 +581,7 @@ JL_DLLEXPORT jl_binding_partition_t *jl_declare_constant_val3(
581581 for (;;) {
582582 enum jl_partition_kind prev_kind = jl_binding_kind (prev_bpart );
583583 if (jl_bkind_is_some_constant (prev_kind ) || prev_kind == PARTITION_KIND_GLOBAL ||
584- ( jl_bkind_is_some_import (prev_kind ) )) {
584+ jl_bkind_is_some_import (prev_kind )) {
585585 need_backdate = 0 ;
586586 break ;
587587 }
@@ -923,22 +923,23 @@ JL_DLLEXPORT jl_value_t *jl_get_binding_value_seqcst(jl_binding_t *b)
923923 return jl_atomic_load (& b -> value );
924924}
925925
926- JL_DLLEXPORT jl_value_t * jl_get_binding_value_if_const (jl_binding_t * b )
926+ JL_DLLEXPORT jl_value_t * jl_get_latest_binding_value_if_const (jl_binding_t * b )
927927{
928- jl_binding_partition_t * bpart = jl_get_binding_partition (b , jl_current_task -> world_age );
929- jl_walk_binding_inplace (& b , & bpart , jl_current_task -> world_age );
928+ // See note below. Note that this is for some deprecated uses, and should not be added to new code.
929+ size_t world = jl_atomic_load_relaxed (& jl_world_counter );
930+ jl_binding_partition_t * bpart = jl_get_binding_partition (b , world );
931+ jl_walk_binding_inplace (& b , & bpart , world );
930932 enum jl_partition_kind kind = jl_binding_kind (bpart );
931933 if (jl_bkind_is_some_guard (kind ))
932934 return NULL ;
933- if (!jl_bkind_is_some_constant (kind ))
935+ if (!jl_bkind_is_real_constant (kind ))
934936 return NULL ;
935- check_backdated_binding (b , kind );
936937 return bpart -> restriction ;
937938}
938939
939- JL_DLLEXPORT jl_value_t * jl_get_binding_value_if_latest_resolved_and_const_debug_only (jl_binding_t * b )
940+ JL_DLLEXPORT jl_value_t * jl_get_latest_binding_value_if_resolved_and_const_debug_only (jl_binding_t * b )
940941{
941- // Unlike jl_get_binding_value_if_const this doesn't try to allocate new binding partitions if they
942+ // Unlike jl_get_latest_binding_value_if_const this doesn't try to allocate new binding partitions if they
942943 // don't already exist, making this JL_NOTSAFEPOINT. However, as a result, this may fail to return
943944 // a value - even if one does exist. It should only be used for reflection/debugging when the integrity
944945 // of the runtime is not guaranteed.
@@ -948,18 +949,17 @@ JL_DLLEXPORT jl_value_t *jl_get_binding_value_if_latest_resolved_and_const_debug
948949 if (!bpart )
949950 return NULL ;
950951 size_t max_world = jl_atomic_load_relaxed (& bpart -> max_world );
951- if (jl_atomic_load_relaxed ( & bpart -> min_world ) > jl_current_task -> world_age || jl_current_task -> world_age > max_world )
952+ if (max_world != ~( size_t ) 0 )
952953 return NULL ;
953954 enum jl_partition_kind kind = jl_binding_kind (bpart );
954955 if (jl_bkind_is_some_guard (kind ))
955956 return NULL ;
956- if (!jl_bkind_is_some_constant (kind ))
957+ if (!jl_bkind_is_real_constant (kind ))
957958 return NULL ;
958- check_backdated_binding (b , kind );
959959 return bpart -> restriction ;
960960}
961961
962- JL_DLLEXPORT jl_value_t * jl_get_binding_value_if_resolved_debug_only (jl_binding_t * b )
962+ JL_DLLEXPORT jl_value_t * jl_get_latest_binding_value_if_resolved_debug_only (jl_binding_t * b )
963963{
964964 // See note above. Use for debug/reflection purposes only.
965965 if (!b )
@@ -968,15 +968,14 @@ JL_DLLEXPORT jl_value_t *jl_get_binding_value_if_resolved_debug_only(jl_binding_
968968 if (!bpart )
969969 return NULL ;
970970 size_t max_world = jl_atomic_load_relaxed (& bpart -> max_world );
971- if (jl_atomic_load_relaxed ( & bpart -> min_world ) > jl_current_task -> world_age || jl_current_task -> world_age > max_world )
971+ if (max_world != ~( size_t ) 0 )
972972 return NULL ;
973973 enum jl_partition_kind kind = jl_binding_kind (bpart );
974974 if (jl_bkind_is_some_guard (kind ))
975975 return NULL ;
976976 if (jl_bkind_is_some_import (kind ))
977977 return NULL ;
978978 if (jl_bkind_is_some_constant (kind )) {
979- check_backdated_binding (b , kind );
980979 return bpart -> restriction ;
981980 }
982981 return jl_atomic_load_relaxed (& b -> value );
@@ -1011,6 +1010,7 @@ static jl_module_t *jl_binding_dbgmodule(jl_binding_t *b)
10111010// along the way.
10121011JL_DLLEXPORT jl_value_t * jl_get_existing_strong_gf (jl_binding_t * b , size_t new_world )
10131012{
1013+ assert (new_world > jl_atomic_load_relaxed (& jl_world_counter ));
10141014 jl_binding_partition_t * bpart = jl_get_binding_partition (b , new_world );
10151015 enum jl_partition_kind kind = jl_binding_kind (bpart );
10161016 if (jl_bkind_is_some_constant (kind ) && kind != PARTITION_KIND_IMPLICIT_CONST )
@@ -1032,7 +1032,7 @@ JL_DLLEXPORT jl_value_t *jl_get_existing_strong_gf(jl_binding_t *b, size_t new_w
10321032 check_safe_newbinding (b -> globalref -> mod , b -> globalref -> name );
10331033 return NULL ;
10341034 }
1035- jl_module_t * from = jl_binding_dbgmodule (b );\
1035+ jl_module_t * from = jl_binding_dbgmodule (b );
10361036 assert (from ); // Can only be NULL if implicit, which we excluded above
10371037 jl_errorf ("invalid method definition in %s: exported function %s.%s does not exist" ,
10381038 jl_module_debug_name (b -> globalref -> mod ), jl_module_debug_name (from ), jl_symbol_name (b -> globalref -> name ));
@@ -1728,7 +1728,7 @@ JL_DLLEXPORT int jl_globalref_is_const(jl_globalref_t *gr)
17281728 b = jl_get_module_binding (gr -> mod , gr -> name , 1 );
17291729 jl_binding_partition_t * bpart = jl_get_binding_partition (b , jl_current_task -> world_age );
17301730 jl_walk_binding_inplace (& b , & bpart , jl_current_task -> world_age );
1731- return jl_bkind_is_some_constant (jl_binding_kind (bpart ));
1731+ return jl_bkind_is_real_constant (jl_binding_kind (bpart ));
17321732}
17331733
17341734JL_DLLEXPORT void jl_disable_binding (jl_globalref_t * gr )
@@ -1757,7 +1757,7 @@ JL_DLLEXPORT int jl_is_const(jl_module_t *m, jl_sym_t *var)
17571757 jl_binding_t * b = jl_get_binding (m , var );
17581758 jl_binding_partition_t * bpart = jl_get_binding_partition (b , jl_current_task -> world_age );
17591759 jl_walk_binding_inplace (& b , & bpart , jl_current_task -> world_age );
1760- return b && jl_bkind_is_some_constant (jl_binding_kind (bpart ));
1760+ return b && jl_bkind_is_real_constant (jl_binding_kind (bpart ));
17611761}
17621762
17631763// set the deprecated flag for a binding:
0 commit comments