@@ -1336,11 +1336,15 @@ fn write_generic_instantiations(out: &mut OutFile) {
1336
1336
out. set_namespace ( Default :: default ( ) ) ;
1337
1337
out. begin_block ( Block :: ExternC ) ;
1338
1338
for ty in out. types {
1339
+ let impl_key = match ty. impl_key ( ) {
1340
+ Some ( impl_key) => impl_key,
1341
+ None => continue ,
1342
+ } ;
1339
1343
if let Type :: RustBox ( ptr) = ty {
1340
1344
if let Type :: Ident ( inner) = & ptr. inner {
1341
1345
if Atom :: from ( & inner. rust ) . is_none ( )
1342
1346
&& ( !out. types . aliases . contains_key ( & inner. rust )
1343
- || out. types . explicit_impls . contains ( ty ) )
1347
+ || out. types . explicit_impls . contains_key ( & impl_key ) )
1344
1348
{
1345
1349
out. next_section ( ) ;
1346
1350
write_rust_box_extern ( out, & out. types . resolve ( & inner) ) ;
@@ -1350,7 +1354,7 @@ fn write_generic_instantiations(out: &mut OutFile) {
1350
1354
if let Type :: Ident ( inner) = & vec. inner {
1351
1355
if Atom :: from ( & inner. rust ) . is_none ( )
1352
1356
&& ( !out. types . aliases . contains_key ( & inner. rust )
1353
- || out. types . explicit_impls . contains ( ty ) )
1357
+ || out. types . explicit_impls . contains_key ( & impl_key ) )
1354
1358
{
1355
1359
out. next_section ( ) ;
1356
1360
write_rust_vec_extern ( out, inner) ;
@@ -1360,7 +1364,7 @@ fn write_generic_instantiations(out: &mut OutFile) {
1360
1364
if let Type :: Ident ( inner) = & ptr. inner {
1361
1365
if Atom :: from ( & inner. rust ) . is_none ( )
1362
1366
&& ( !out. types . aliases . contains_key ( & inner. rust )
1363
- || out. types . explicit_impls . contains ( ty ) )
1367
+ || out. types . explicit_impls . contains_key ( & impl_key ) )
1364
1368
{
1365
1369
out. next_section ( ) ;
1366
1370
write_unique_ptr ( out, inner) ;
@@ -1370,7 +1374,7 @@ fn write_generic_instantiations(out: &mut OutFile) {
1370
1374
if let Type :: Ident ( inner) = & ptr. inner {
1371
1375
if Atom :: from ( & inner. rust ) . is_none ( )
1372
1376
&& ( !out. types . aliases . contains_key ( & inner. rust )
1373
- || out. types . explicit_impls . contains ( ty ) )
1377
+ || out. types . explicit_impls . contains_key ( & impl_key ) )
1374
1378
{
1375
1379
out. next_section ( ) ;
1376
1380
write_shared_ptr ( out, inner) ;
@@ -1380,7 +1384,7 @@ fn write_generic_instantiations(out: &mut OutFile) {
1380
1384
if let Type :: Ident ( inner) = & ptr. inner {
1381
1385
if Atom :: from ( & inner. rust ) . is_none ( )
1382
1386
&& ( !out. types . aliases . contains_key ( & inner. rust )
1383
- || out. types . explicit_impls . contains ( ty ) )
1387
+ || out. types . explicit_impls . contains_key ( & impl_key ) )
1384
1388
{
1385
1389
out. next_section ( ) ;
1386
1390
write_weak_ptr ( out, inner) ;
@@ -1390,7 +1394,7 @@ fn write_generic_instantiations(out: &mut OutFile) {
1390
1394
if let Type :: Ident ( inner) = & vector. inner {
1391
1395
if Atom :: from ( & inner. rust ) . is_none ( )
1392
1396
&& ( !out. types . aliases . contains_key ( & inner. rust )
1393
- || out. types . explicit_impls . contains ( ty ) )
1397
+ || out. types . explicit_impls . contains_key ( & impl_key ) )
1394
1398
{
1395
1399
out. next_section ( ) ;
1396
1400
write_cxx_vector ( out, inner) ;
@@ -1403,11 +1407,15 @@ fn write_generic_instantiations(out: &mut OutFile) {
1403
1407
out. begin_block ( Block :: Namespace ( "rust" ) ) ;
1404
1408
out. begin_block ( Block :: InlineNamespace ( "cxxbridge1" ) ) ;
1405
1409
for ty in out. types {
1410
+ let impl_key = match ty. impl_key ( ) {
1411
+ Some ( impl_key) => impl_key,
1412
+ None => continue ,
1413
+ } ;
1406
1414
if let Type :: RustBox ( ptr) = ty {
1407
1415
if let Type :: Ident ( inner) = & ptr. inner {
1408
1416
if Atom :: from ( & inner. rust ) . is_none ( )
1409
1417
&& ( !out. types . aliases . contains_key ( & inner. rust )
1410
- || out. types . explicit_impls . contains ( ty ) )
1418
+ || out. types . explicit_impls . contains_key ( & impl_key ) )
1411
1419
{
1412
1420
write_rust_box_impl ( out, & out. types . resolve ( & inner) ) ;
1413
1421
}
@@ -1416,7 +1424,7 @@ fn write_generic_instantiations(out: &mut OutFile) {
1416
1424
if let Type :: Ident ( inner) = & vec. inner {
1417
1425
if Atom :: from ( & inner. rust ) . is_none ( )
1418
1426
&& ( !out. types . aliases . contains_key ( & inner. rust )
1419
- || out. types . explicit_impls . contains ( ty ) )
1427
+ || out. types . explicit_impls . contains_key ( & impl_key ) )
1420
1428
{
1421
1429
write_rust_vec_impl ( out, inner) ;
1422
1430
}
0 commit comments