@@ -1087,10 +1087,7 @@ static unsigned jl_typemap_list_count_locked(jl_typemap_entry_t *ml) JL_NOTSAFEP
1087
1087
return count ;
1088
1088
}
1089
1089
1090
- static void jl_typemap_level_insert_ (jl_typemap_t * map , jl_typemap_level_t * cache , jl_typemap_entry_t * newrec , int8_t offs , const struct jl_typemap_info * tparams );
1091
- static void jl_typemap_list_insert_sorted (
1092
- jl_typemap_t * map , jl_typemap_entry_t * * pml , jl_value_t * parent ,
1093
- jl_typemap_entry_t * newrec , const struct jl_typemap_info * tparams );
1090
+ static void jl_typemap_level_insert_ (jl_typemap_t * map , jl_typemap_level_t * cache , jl_typemap_entry_t * newrec , int8_t offs );
1094
1091
1095
1092
static jl_typemap_level_t * jl_new_typemap_level (void )
1096
1093
{
@@ -1108,8 +1105,7 @@ static jl_typemap_level_t *jl_new_typemap_level(void)
1108
1105
}
1109
1106
1110
1107
static jl_typemap_level_t * jl_method_convert_list_to_cache (
1111
- jl_typemap_t * map , jl_typemap_entry_t * ml , int8_t offs ,
1112
- const struct jl_typemap_info * tparams )
1108
+ jl_typemap_t * map , jl_typemap_entry_t * ml , int8_t offs )
1113
1109
{
1114
1110
jl_typemap_level_t * cache = jl_new_typemap_level ();
1115
1111
jl_typemap_entry_t * next = NULL ;
@@ -1118,7 +1114,7 @@ static jl_typemap_level_t *jl_method_convert_list_to_cache(
1118
1114
next = ml -> next ;
1119
1115
ml -> next = (jl_typemap_entry_t * )jl_nothing ;
1120
1116
// TODO: is it safe to be doing this concurrently with lookups?
1121
- jl_typemap_level_insert_ (map , cache , ml , offs , tparams );
1117
+ jl_typemap_level_insert_ (map , cache , ml , offs );
1122
1118
ml = next ;
1123
1119
}
1124
1120
JL_GC_POP ();
@@ -1127,58 +1123,59 @@ static jl_typemap_level_t *jl_method_convert_list_to_cache(
1127
1123
1128
1124
static void jl_typemap_list_insert_ (
1129
1125
jl_typemap_t * map , jl_typemap_entry_t * * pml , jl_value_t * parent ,
1130
- jl_typemap_entry_t * newrec , const struct jl_typemap_info * tparams )
1126
+ jl_typemap_entry_t * newrec )
1131
1127
{
1132
- if ( * pml == ( void * ) jl_nothing || newrec -> isleafsig || ( tparams && tparams -> unsorted )) {
1133
- newrec -> next = * pml ;
1134
- jl_gc_wb (newrec , newrec -> next );
1135
- jl_atomic_store_release ( pml , newrec );
1136
- jl_gc_wb ( parent , newrec ) ;
1137
- }
1138
- else {
1139
- jl_typemap_list_insert_sorted ( map , pml , parent , newrec , tparams ) ;
1128
+ jl_typemap_entry_t * l = * pml ;
1129
+ while (( jl_value_t * ) l != jl_nothing ) {
1130
+ if (newrec -> isleafsig || ! l -> isleafsig )
1131
+ if ( newrec -> issimplesig || ! l -> issimplesig )
1132
+ break ;
1133
+ pml = & l -> next ;
1134
+ parent = ( jl_value_t * ) l ;
1135
+ l = l -> next ;
1140
1136
}
1137
+ newrec -> next = l ;
1138
+ jl_gc_wb (newrec , newrec -> next );
1139
+ jl_atomic_store_release (pml , newrec );
1140
+ jl_gc_wb (parent , newrec );
1141
1141
}
1142
1142
1143
1143
static void jl_typemap_insert_generic (
1144
1144
jl_typemap_t * map , jl_typemap_t * * pml , jl_value_t * parent ,
1145
- jl_typemap_entry_t * newrec , int8_t offs ,
1146
- const struct jl_typemap_info * tparams )
1145
+ jl_typemap_entry_t * newrec , int8_t offs )
1147
1146
{
1148
1147
if (jl_typeof (* pml ) == (jl_value_t * )jl_typemap_level_type ) {
1149
- jl_typemap_level_insert_ (map , (jl_typemap_level_t * )* pml , newrec , offs , tparams );
1148
+ jl_typemap_level_insert_ (map , (jl_typemap_level_t * )* pml , newrec , offs );
1150
1149
return ;
1151
1150
}
1152
1151
1153
1152
unsigned count = jl_typemap_list_count_locked ((jl_typemap_entry_t * )* pml );
1154
1153
if (count > MAX_METHLIST_COUNT ) {
1155
1154
* pml = (jl_typemap_t * )jl_method_convert_list_to_cache (
1156
1155
map , (jl_typemap_entry_t * )* pml ,
1157
- offs , tparams );
1156
+ offs );
1158
1157
jl_gc_wb (parent , * pml );
1159
- jl_typemap_level_insert_ (map , (jl_typemap_level_t * )* pml , newrec , offs , tparams );
1158
+ jl_typemap_level_insert_ (map , (jl_typemap_level_t * )* pml , newrec , offs );
1160
1159
return ;
1161
1160
}
1162
1161
1163
1162
jl_typemap_list_insert_ (map , (jl_typemap_entry_t * * )pml ,
1164
- parent , newrec , tparams );
1163
+ parent , newrec );
1165
1164
}
1166
1165
1167
1166
static void jl_typemap_array_insert_ (
1168
1167
jl_typemap_t * map , jl_array_t * * cache , jl_value_t * key , jl_typemap_entry_t * newrec ,
1169
- jl_value_t * parent , int8_t offs ,
1170
- const struct jl_typemap_info * tparams )
1168
+ jl_value_t * parent , int8_t offs )
1171
1169
{
1172
1170
jl_typemap_t * * pml = mtcache_hash_lookup_bp (* cache , key );
1173
1171
if (pml != NULL )
1174
- jl_typemap_insert_generic (map , pml , (jl_value_t * )* cache , newrec , offs + 1 , tparams );
1172
+ jl_typemap_insert_generic (map , pml , (jl_value_t * )* cache , newrec , offs + 1 );
1175
1173
else
1176
1174
mtcache_hash_insert (cache , parent , key , (jl_typemap_t * )newrec );
1177
1175
}
1178
1176
1179
1177
static void jl_typemap_level_insert_ (
1180
- jl_typemap_t * map , jl_typemap_level_t * cache , jl_typemap_entry_t * newrec , int8_t offs ,
1181
- const struct jl_typemap_info * tparams )
1178
+ jl_typemap_t * map , jl_typemap_level_t * cache , jl_typemap_entry_t * newrec , int8_t offs )
1182
1179
{
1183
1180
jl_value_t * ttypes = jl_unwrap_unionall ((jl_value_t * )newrec -> sig );
1184
1181
size_t l = jl_nparams (ttypes );
@@ -1205,7 +1202,7 @@ static void jl_typemap_level_insert_(
1205
1202
t1 = (jl_value_t * )jl_assume (jl_typeofbottom_type )-> super ;
1206
1203
// If the type at `offs` is Any, put it in the Any list
1207
1204
if (t1 && jl_is_any (t1 )) {
1208
- jl_typemap_insert_generic (map , & cache -> any , (jl_value_t * )cache , newrec , offs + 1 , tparams );
1205
+ jl_typemap_insert_generic (map , & cache -> any , (jl_value_t * )cache , newrec , offs + 1 );
1209
1206
return ;
1210
1207
}
1211
1208
// Don't put Varargs in the optimized caches (too hard to handle in lookup and bp)
@@ -1216,12 +1213,12 @@ static void jl_typemap_level_insert_(
1216
1213
// and we use the table indexed for that purpose.
1217
1214
jl_value_t * a0 = jl_tparam0 (t1 );
1218
1215
if (is_cache_leaf (a0 , 1 )) {
1219
- jl_typemap_array_insert_ (map , & cache -> targ , a0 , newrec , (jl_value_t * )cache , offs , tparams );
1216
+ jl_typemap_array_insert_ (map , & cache -> targ , a0 , newrec , (jl_value_t * )cache , offs );
1220
1217
return ;
1221
1218
}
1222
1219
}
1223
1220
if (is_cache_leaf (t1 , 0 )) {
1224
- jl_typemap_array_insert_ (map , & cache -> arg1 , t1 , newrec , (jl_value_t * )cache , offs , tparams );
1221
+ jl_typemap_array_insert_ (map , & cache -> arg1 , t1 , newrec , (jl_value_t * )cache , offs );
1225
1222
return ;
1226
1223
}
1227
1224
@@ -1231,16 +1228,16 @@ static void jl_typemap_level_insert_(
1231
1228
if (jl_is_type_type (t1 )) {
1232
1229
a0 = jl_type_extract_name (jl_tparam0 (t1 ));
1233
1230
jl_datatype_t * super = a0 ? (jl_datatype_t * )jl_unwrap_unionall (((jl_typename_t * )a0 )-> wrapper ) : jl_any_type ;
1234
- jl_typemap_array_insert_ (map , & cache -> tname , (jl_value_t * )super -> name , newrec , (jl_value_t * )cache , offs , tparams );
1231
+ jl_typemap_array_insert_ (map , & cache -> tname , (jl_value_t * )super -> name , newrec , (jl_value_t * )cache , offs );
1235
1232
return ;
1236
1233
}
1237
1234
a0 = jl_type_extract_name (t1 );
1238
1235
if (a0 && a0 != (jl_value_t * )jl_any_type -> name ) {
1239
- jl_typemap_array_insert_ (map , & cache -> name1 , a0 , newrec , (jl_value_t * )cache , offs , tparams );
1236
+ jl_typemap_array_insert_ (map , & cache -> name1 , a0 , newrec , (jl_value_t * )cache , offs );
1240
1237
return ;
1241
1238
}
1242
1239
}
1243
- jl_typemap_list_insert_ (map , & cache -> linear , (jl_value_t * )cache , newrec , tparams );
1240
+ jl_typemap_list_insert_ (map , & cache -> linear , (jl_value_t * )cache , newrec );
1244
1241
}
1245
1242
1246
1243
jl_typemap_entry_t * jl_typemap_alloc (
@@ -1289,43 +1286,9 @@ jl_typemap_entry_t *jl_typemap_alloc(
1289
1286
}
1290
1287
1291
1288
void jl_typemap_insert (jl_typemap_t * * cache , jl_value_t * parent ,
1292
- jl_typemap_entry_t * newrec , int8_t offs ,
1293
- const struct jl_typemap_info * tparams )
1294
- {
1295
- jl_typemap_insert_generic (* cache , cache , parent , newrec , offs , tparams );
1296
- }
1297
-
1298
- static void jl_typemap_list_insert_sorted (
1299
- jl_typemap_t * map , jl_typemap_entry_t * * pml , jl_value_t * parent ,
1300
- jl_typemap_entry_t * newrec , const struct jl_typemap_info * tparams )
1289
+ jl_typemap_entry_t * newrec , int8_t offs )
1301
1290
{
1302
- jl_typemap_entry_t * l , * * pl ;
1303
- pl = pml ;
1304
- l = * pml ;
1305
- jl_value_t * pa = parent ;
1306
- while ((jl_value_t * )l != jl_nothing ) {
1307
- if (!l -> isleafsig ) { // quickly ignore all of the leafsig entries (these were handled by caller)
1308
- if (jl_type_morespecific ((jl_value_t * )newrec -> sig , (jl_value_t * )l -> sig )) {
1309
- if (l -> simplesig == (void * )jl_nothing ||
1310
- newrec -> simplesig != (void * )jl_nothing ||
1311
- !jl_types_equal ((jl_value_t * )l -> sig , (jl_value_t * )newrec -> sig )) {
1312
- // might need to insert multiple entries for a lookup differing only by their simplesig
1313
- // when simplesig contains a kind
1314
- // TODO: make this test more correct or figure out a better way to compute this
1315
- break ;
1316
- }
1317
- }
1318
- }
1319
- pl = & l -> next ;
1320
- pa = (jl_value_t * )l ;
1321
- l = l -> next ;
1322
- }
1323
-
1324
- // insert newrec at the first point it is more specific than the following method
1325
- newrec -> next = l ;
1326
- jl_gc_wb (newrec , l );
1327
- jl_atomic_store_release (pl , newrec );
1328
- jl_gc_wb (pa , newrec );
1291
+ jl_typemap_insert_generic (* cache , cache , parent , newrec , offs );
1329
1292
}
1330
1293
1331
1294
#ifdef __cplusplus
0 commit comments