@@ -463,7 +463,7 @@ JL_DLLEXPORT jl_value_t *jl_get_binding_leaf_partitions_value_if_const(jl_bindin
463
463
struct restriction_kind_pair rkp = { NULL , NULL , PARTITION_KIND_GUARD , 0 };
464
464
if (!jl_get_binding_leaf_partitions_restriction_kind (b , & rkp , min_world , max_world ))
465
465
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 )) {
467
467
* maybe_depwarn = rkp .maybe_depwarn ;
468
468
return rkp .restriction ;
469
469
}
@@ -581,7 +581,7 @@ JL_DLLEXPORT jl_binding_partition_t *jl_declare_constant_val3(
581
581
for (;;) {
582
582
enum jl_partition_kind prev_kind = jl_binding_kind (prev_bpart );
583
583
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 )) {
585
585
need_backdate = 0 ;
586
586
break ;
587
587
}
@@ -923,22 +923,23 @@ JL_DLLEXPORT jl_value_t *jl_get_binding_value_seqcst(jl_binding_t *b)
923
923
return jl_atomic_load (& b -> value );
924
924
}
925
925
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 )
927
927
{
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 );
930
932
enum jl_partition_kind kind = jl_binding_kind (bpart );
931
933
if (jl_bkind_is_some_guard (kind ))
932
934
return NULL ;
933
- if (!jl_bkind_is_some_constant (kind ))
935
+ if (!jl_bkind_is_real_constant (kind ))
934
936
return NULL ;
935
- check_backdated_binding (b , kind );
936
937
return bpart -> restriction ;
937
938
}
938
939
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 )
940
941
{
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
942
943
// don't already exist, making this JL_NOTSAFEPOINT. However, as a result, this may fail to return
943
944
// a value - even if one does exist. It should only be used for reflection/debugging when the integrity
944
945
// 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
948
949
if (!bpart )
949
950
return NULL ;
950
951
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 )
952
953
return NULL ;
953
954
enum jl_partition_kind kind = jl_binding_kind (bpart );
954
955
if (jl_bkind_is_some_guard (kind ))
955
956
return NULL ;
956
- if (!jl_bkind_is_some_constant (kind ))
957
+ if (!jl_bkind_is_real_constant (kind ))
957
958
return NULL ;
958
- check_backdated_binding (b , kind );
959
959
return bpart -> restriction ;
960
960
}
961
961
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 )
963
963
{
964
964
// See note above. Use for debug/reflection purposes only.
965
965
if (!b )
@@ -968,15 +968,14 @@ JL_DLLEXPORT jl_value_t *jl_get_binding_value_if_resolved_debug_only(jl_binding_
968
968
if (!bpart )
969
969
return NULL ;
970
970
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 )
972
972
return NULL ;
973
973
enum jl_partition_kind kind = jl_binding_kind (bpart );
974
974
if (jl_bkind_is_some_guard (kind ))
975
975
return NULL ;
976
976
if (jl_bkind_is_some_import (kind ))
977
977
return NULL ;
978
978
if (jl_bkind_is_some_constant (kind )) {
979
- check_backdated_binding (b , kind );
980
979
return bpart -> restriction ;
981
980
}
982
981
return jl_atomic_load_relaxed (& b -> value );
@@ -1011,6 +1010,7 @@ static jl_module_t *jl_binding_dbgmodule(jl_binding_t *b)
1011
1010
// along the way.
1012
1011
JL_DLLEXPORT jl_value_t * jl_get_existing_strong_gf (jl_binding_t * b , size_t new_world )
1013
1012
{
1013
+ assert (new_world > jl_atomic_load_relaxed (& jl_world_counter ));
1014
1014
jl_binding_partition_t * bpart = jl_get_binding_partition (b , new_world );
1015
1015
enum jl_partition_kind kind = jl_binding_kind (bpart );
1016
1016
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
1032
1032
check_safe_newbinding (b -> globalref -> mod , b -> globalref -> name );
1033
1033
return NULL ;
1034
1034
}
1035
- jl_module_t * from = jl_binding_dbgmodule (b );\
1035
+ jl_module_t * from = jl_binding_dbgmodule (b );
1036
1036
assert (from ); // Can only be NULL if implicit, which we excluded above
1037
1037
jl_errorf ("invalid method definition in %s: exported function %s.%s does not exist" ,
1038
1038
jl_module_debug_name (b -> globalref -> mod ), jl_module_debug_name (from ), jl_symbol_name (b -> globalref -> name ));
@@ -1725,7 +1725,7 @@ JL_DLLEXPORT int jl_globalref_is_const(jl_globalref_t *gr)
1725
1725
b = jl_get_module_binding (gr -> mod , gr -> name , 1 );
1726
1726
jl_binding_partition_t * bpart = jl_get_binding_partition (b , jl_current_task -> world_age );
1727
1727
jl_walk_binding_inplace (& b , & bpart , jl_current_task -> world_age );
1728
- return jl_bkind_is_some_constant (jl_binding_kind (bpart ));
1728
+ return jl_bkind_is_real_constant (jl_binding_kind (bpart ));
1729
1729
}
1730
1730
1731
1731
JL_DLLEXPORT void jl_disable_binding (jl_globalref_t * gr )
@@ -1750,7 +1750,7 @@ JL_DLLEXPORT int jl_is_const(jl_module_t *m, jl_sym_t *var)
1750
1750
jl_binding_t * b = jl_get_binding (m , var );
1751
1751
jl_binding_partition_t * bpart = jl_get_binding_partition (b , jl_current_task -> world_age );
1752
1752
jl_walk_binding_inplace (& b , & bpart , jl_current_task -> world_age );
1753
- return b && jl_bkind_is_some_constant (jl_binding_kind (bpart ));
1753
+ return b && jl_bkind_is_real_constant (jl_binding_kind (bpart ));
1754
1754
}
1755
1755
1756
1756
// set the deprecated flag for a binding:
0 commit comments