@@ -122,7 +122,7 @@ JL_DLLEXPORT jl_method_instance_t *jl_specializations_get_linfo(jl_method_t *m J
122
122
JL_GC_PUSH1 (& specializations ); // clang-sa doesn't realize this loop uses specializations
123
123
for (i = cl ; i > 0 ; i -- ) {
124
124
jl_method_instance_t * mi = jl_atomic_load_relaxed (& data [i - 1 ]);
125
- if (mi == NULL )
125
+ if (( jl_value_t * ) mi == jl_nothing )
126
126
break ;
127
127
if (jl_types_equal (mi -> specTypes , type )) {
128
128
if (locked )
@@ -143,19 +143,20 @@ JL_DLLEXPORT jl_method_instance_t *jl_specializations_get_linfo(jl_method_t *m J
143
143
jl_method_instance_t * * data = (jl_method_instance_t * * )jl_svec_data (specializations );
144
144
for (i = 0 ; i < cl ; i ++ ) {
145
145
jl_method_instance_t * mi = jl_atomic_load_relaxed (& data [i ]);
146
- if (mi == NULL )
146
+ if (( jl_value_t * ) mi == jl_nothing )
147
147
break ;
148
148
assert (!jl_types_equal (mi -> specTypes , type ));
149
149
}
150
150
}
151
151
jl_method_instance_t * mi = jl_get_specialized (m , type , sparams );
152
152
JL_GC_PUSH1 (& mi );
153
- if (hv ? (i + 1 >= cl || jl_svecref (specializations , i + 1 ) != NULL ) : (i <= 1 || jl_svecref (specializations , i - 2 ) != NULL )) {
153
+ if (hv ? (i + 1 >= cl || jl_svecref (specializations , i + 1 ) != jl_nothing ) : (i <= 1 || jl_svecref (specializations , i - 2 ) != jl_nothing )) {
154
154
size_t ncl = cl < 8 ? 8 : (cl * 3 )>>1 ;
155
155
jl_svec_t * nc = jl_alloc_svec_uninit (ncl );
156
156
if (i > 0 )
157
157
memcpy ((char * )jl_svec_data (nc ), jl_svec_data (specializations ), sizeof (void * ) * i );
158
- memset ((char * )jl_svec_data (nc ) + sizeof (void * ) * i , 0 , sizeof (void * ) * (ncl - cl ));
158
+ for (int j = 0 ; j < ncl - cl ; j ++ )
159
+ jl_svecset (nc , j + i , jl_nothing );
159
160
if (i < cl )
160
161
memcpy ((char * )jl_svec_data (nc ) + sizeof (void * ) * (i + ncl - cl ),
161
162
(char * )jl_svec_data (specializations ) + sizeof (void * ) * i ,
@@ -168,7 +169,7 @@ JL_DLLEXPORT jl_method_instance_t *jl_specializations_get_linfo(jl_method_t *m J
168
169
}
169
170
if (!hv )
170
171
i -= 1 ;
171
- assert (jl_svecref (specializations , i ) == NULL );
172
+ assert (jl_svecref (specializations , i ) == jl_nothing );
172
173
jl_svecset (specializations , i , mi ); // jl_atomic_store_release?
173
174
if (hv ) {
174
175
// TODO: fuse lookup and insert steps?
@@ -413,7 +414,7 @@ static int get_method_unspec_list(jl_typemap_entry_t *def, void *closure)
413
414
size_t i , l = jl_svec_len (specializations );
414
415
for (i = 0 ; i < l ; i ++ ) {
415
416
jl_method_instance_t * mi = (jl_method_instance_t * )jl_svecref (specializations , i );
416
- if (mi ) {
417
+ if (( jl_value_t * ) mi != jl_nothing ) {
417
418
assert (jl_is_method_instance (mi ));
418
419
if (jl_rettype_inferred (mi , jl_world_counter , jl_world_counter ) == jl_nothing )
419
420
jl_array_ptr_1d_push ((jl_array_t * )closure , (jl_value_t * )mi );
@@ -1561,7 +1562,7 @@ static void jl_method_table_invalidate(jl_methtable_t *mt, jl_typemap_entry_t *m
1561
1562
l = jl_svec_len (specializations );
1562
1563
for (i = 0 ; i < l ; i ++ ) {
1563
1564
jl_method_instance_t * mi = (jl_method_instance_t * )jl_svecref (specializations , i );
1564
- if (mi ) {
1565
+ if (( jl_value_t * ) mi != jl_nothing ) {
1565
1566
invalidated = 1 ;
1566
1567
invalidate_external (mi , methodentry -> max_world );
1567
1568
invalidate_backedges (mi , methodentry -> max_world , "jl_method_table_disable" );
@@ -1728,7 +1729,7 @@ JL_DLLEXPORT void jl_method_table_insert(jl_methtable_t *mt, jl_method_t *method
1728
1729
enum morespec_options ambig = morespec_unknown ;
1729
1730
for (i = 0 ; i < l ; i ++ ) {
1730
1731
jl_method_instance_t * mi = jl_atomic_load_relaxed (& data [i ]);
1731
- if (mi == NULL )
1732
+ if (( jl_value_t * ) mi == jl_nothing )
1732
1733
continue ;
1733
1734
isect3 = jl_type_intersection (m -> sig , (jl_value_t * )mi -> specTypes );
1734
1735
if (jl_type_intersection2 (type , isect3 , & isect , & isect2 )) {
0 commit comments