Skip to content

Commit e086d0b

Browse files
authored
Merge pull request #1527 from anforowicz/named-impl-key-not-copy
Remove `#[derive(Copy, Clone)]` from `NamedImpl`
2 parents ef63c77 + e18a4a1 commit e086d0b

20 files changed

+462
-74
lines changed

BUCK

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ rust_binary(
3333
deps = [
3434
"//third-party:clap",
3535
"//third-party:codespan-reporting",
36+
"//third-party:indexmap",
3637
"//third-party:proc-macro2",
3738
"//third-party:quote",
3839
"//third-party:syn",
@@ -57,6 +58,7 @@ rust_library(
5758
edition = "2021",
5859
proc_macro = True,
5960
deps = [
61+
"//third-party:indexmap",
6062
"//third-party:proc-macro2",
6163
"//third-party:quote",
6264
"//third-party:rustversion",
@@ -75,6 +77,7 @@ rust_library(
7577
deps = [
7678
"//third-party:cc",
7779
"//third-party:codespan-reporting",
80+
"//third-party:indexmap",
7881
"//third-party:proc-macro2",
7982
"//third-party:quote",
8083
"//third-party:scratch",
@@ -93,6 +96,7 @@ rust_library(
9396
deps = [
9497
"//third-party:cc",
9598
"//third-party:codespan-reporting",
99+
"//third-party:indexmap",
96100
"//third-party:proc-macro2",
97101
"//third-party:quote",
98102
"//third-party:syn",

BUILD.bazel

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ rust_binary(
3333
deps = [
3434
"@crates.io//:clap",
3535
"@crates.io//:codespan-reporting",
36+
"@crates.io//:indexmap",
3637
"@crates.io//:proc-macro2",
3738
"@crates.io//:quote",
3839
"@crates.io//:syn",
@@ -62,6 +63,7 @@ rust_proc_macro(
6263
"@crates.io//:rustversion",
6364
],
6465
deps = [
66+
"@crates.io//:indexmap",
6567
"@crates.io//:proc-macro2",
6668
"@crates.io//:quote",
6769
"@crates.io//:syn",
@@ -76,6 +78,7 @@ rust_library(
7678
deps = [
7779
"@crates.io//:cc",
7880
"@crates.io//:codespan-reporting",
81+
"@crates.io//:indexmap",
7982
"@crates.io//:proc-macro2",
8083
"@crates.io//:quote",
8184
"@crates.io//:scratch",
@@ -92,6 +95,7 @@ rust_library(
9295
deps = [
9396
"@crates.io//:cc",
9497
"@crates.io//:codespan-reporting",
98+
"@crates.io//:indexmap",
9599
"@crates.io//:proc-macro2",
96100
"@crates.io//:quote",
97101
"@crates.io//:syn",

gen/build/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ experimental-async-fn = []
2121
[dependencies]
2222
cc = "1.0.83"
2323
codespan-reporting = "0.12"
24+
indexmap = "2.9.0"
2425
proc-macro2 = { version = "1.0.74", default-features = false, features = ["span-locations"] }
2526
quote = { version = "1.0.35", default-features = false }
2627
scratch = "1.0.5"

gen/cmd/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ experimental-async-fn = []
2323
[dependencies]
2424
clap = { version = "4.3.11", default-features = false, features = ["error-context", "help", "std", "suggestions", "usage"] }
2525
codespan-reporting = "0.12"
26+
indexmap = "2.9.0"
2627
proc-macro2 = { version = "1.0.74", default-features = false, features = ["span-locations"] }
2728
quote = { version = "1.0.35", default-features = false }
2829
syn = { version = "2.0.46", default-features = false, features = ["clone-impls", "full", "parsing", "printing"] }

gen/lib/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ rust-version = "1.73"
1414

1515
[dependencies]
1616
codespan-reporting = "0.12"
17+
indexmap = "2.9.0"
1718
proc-macro2 = { version = "1.0.74", default-features = false, features = ["span-locations"] }
1819
quote = { version = "1.0.35", default-features = false }
1920
syn = { version = "2.0.46", default-features = false, features = ["clone-impls", "full", "parsing", "printing"] }

gen/src/write.rs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1440,7 +1440,7 @@ fn write_generic_instantiations(out: &mut OutFile) {
14401440
out.begin_block(Block::ExternC);
14411441
for impl_key in out.types.impls.keys() {
14421442
out.next_section();
1443-
match *impl_key {
1443+
match impl_key {
14441444
ImplKey::RustBox(ident) => write_rust_box_extern(out, ident),
14451445
ImplKey::RustVec(ident) => write_rust_vec_extern(out, ident),
14461446
ImplKey::UniquePtr(ident) => write_unique_ptr(out, ident),
@@ -1454,7 +1454,7 @@ fn write_generic_instantiations(out: &mut OutFile) {
14541454
out.begin_block(Block::Namespace("rust"));
14551455
out.begin_block(Block::InlineNamespace("cxxbridge1"));
14561456
for impl_key in out.types.impls.keys() {
1457-
match *impl_key {
1457+
match impl_key {
14581458
ImplKey::RustBox(ident) => write_rust_box_impl(out, ident),
14591459
ImplKey::RustVec(ident) => write_rust_vec_impl(out, ident),
14601460
_ => {}
@@ -1464,8 +1464,8 @@ fn write_generic_instantiations(out: &mut OutFile) {
14641464
out.end_block(Block::Namespace("rust"));
14651465
}
14661466

1467-
fn write_rust_box_extern(out: &mut OutFile, key: NamedImplKey) {
1468-
let resolve = out.types.resolve(&key);
1467+
fn write_rust_box_extern(out: &mut OutFile, key: &NamedImplKey) {
1468+
let resolve = out.types.resolve(key);
14691469
let inner = resolve.name.to_fully_qualified();
14701470
let instance = resolve.name.to_symbol();
14711471

@@ -1486,7 +1486,7 @@ fn write_rust_box_extern(out: &mut OutFile, key: NamedImplKey) {
14861486
);
14871487
}
14881488

1489-
fn write_rust_vec_extern(out: &mut OutFile, key: NamedImplKey) {
1489+
fn write_rust_vec_extern(out: &mut OutFile, key: &NamedImplKey) {
14901490
let element = key.rust;
14911491
let inner = element.to_typename(out.types);
14921492
let instance = element.to_mangled(out.types);
@@ -1535,8 +1535,8 @@ fn write_rust_vec_extern(out: &mut OutFile, key: NamedImplKey) {
15351535
);
15361536
}
15371537

1538-
fn write_rust_box_impl(out: &mut OutFile, key: NamedImplKey) {
1539-
let resolve = out.types.resolve(&key);
1538+
fn write_rust_box_impl(out: &mut OutFile, key: &NamedImplKey) {
1539+
let resolve = out.types.resolve(key);
15401540
let inner = resolve.name.to_fully_qualified();
15411541
let instance = resolve.name.to_symbol();
15421542

@@ -1567,7 +1567,7 @@ fn write_rust_box_impl(out: &mut OutFile, key: NamedImplKey) {
15671567
writeln!(out, "}}");
15681568
}
15691569

1570-
fn write_rust_vec_impl(out: &mut OutFile, key: NamedImplKey) {
1570+
fn write_rust_vec_impl(out: &mut OutFile, key: &NamedImplKey) {
15711571
let element = key.rust;
15721572
let inner = element.to_typename(out.types);
15731573
let instance = element.to_mangled(out.types);
@@ -1655,7 +1655,7 @@ fn write_rust_vec_impl(out: &mut OutFile, key: NamedImplKey) {
16551655
writeln!(out, "}}");
16561656
}
16571657

1658-
fn write_unique_ptr(out: &mut OutFile, key: NamedImplKey) {
1658+
fn write_unique_ptr(out: &mut OutFile, key: &NamedImplKey) {
16591659
let ty = UniquePtr::Ident(key.rust);
16601660
write_unique_ptr_common(out, ty);
16611661
}
@@ -1779,7 +1779,7 @@ fn write_unique_ptr_common(out: &mut OutFile, ty: UniquePtr) {
17791779
writeln!(out, "}}");
17801780
}
17811781

1782-
fn write_shared_ptr(out: &mut OutFile, key: NamedImplKey) {
1782+
fn write_shared_ptr(out: &mut OutFile, key: &NamedImplKey) {
17831783
let ident = key.rust;
17841784
let resolve = out.types.resolve(ident);
17851785
let inner = resolve.name.to_fully_qualified();
@@ -1860,8 +1860,8 @@ fn write_shared_ptr(out: &mut OutFile, key: NamedImplKey) {
18601860
writeln!(out, "}}");
18611861
}
18621862

1863-
fn write_weak_ptr(out: &mut OutFile, key: NamedImplKey) {
1864-
let resolve = out.types.resolve(&key);
1863+
fn write_weak_ptr(out: &mut OutFile, key: &NamedImplKey) {
1864+
let resolve = out.types.resolve(key);
18651865
let inner = resolve.name.to_fully_qualified();
18661866
let instance = resolve.name.to_symbol();
18671867

@@ -1929,7 +1929,7 @@ fn write_weak_ptr(out: &mut OutFile, key: NamedImplKey) {
19291929
writeln!(out, "}}");
19301930
}
19311931

1932-
fn write_cxx_vector(out: &mut OutFile, key: NamedImplKey) {
1932+
fn write_cxx_vector(out: &mut OutFile, key: &NamedImplKey) {
19331933
let element = key.rust;
19341934
let inner = element.to_typename(out.types);
19351935
let instance = element.to_mangled(out.types);

macro/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ experimental-async-fn = []
2121
experimental-enum-variants-from-header = ["clang-ast", "flate2", "memmap", "serde", "serde_derive", "serde_json"]
2222

2323
[dependencies]
24+
indexmap = "2.9.0"
2425
proc-macro2 = "1.0.74"
2526
quote = "1.0.35"
2627
rustversion = "1"

macro/src/expand.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ fn expand(ffi: Module, doc: Doc, attrs: OtherAttrs, apis: &[Api], types: &Types)
9292
}
9393

9494
for (impl_key, &explicit_impl) in &types.impls {
95-
match *impl_key {
95+
match impl_key {
9696
ImplKey::RustBox(ident) => {
9797
hidden.extend(expand_rust_box(ident, types, explicit_impl));
9898
}
@@ -1296,7 +1296,7 @@ fn type_id(name: &Pair) -> TokenStream {
12961296
crate::type_id::expand(Crate::Cxx, qualified)
12971297
}
12981298

1299-
fn expand_rust_box(key: NamedImplKey, types: &Types, explicit_impl: Option<&Impl>) -> TokenStream {
1299+
fn expand_rust_box(key: &NamedImplKey, types: &Types, explicit_impl: Option<&Impl>) -> TokenStream {
13001300
let ident = key.rust;
13011301
let resolve = types.resolve(ident);
13021302
let link_prefix = format!("cxxbridge1$box${}$", resolve.name.to_symbol());
@@ -1345,7 +1345,7 @@ fn expand_rust_box(key: NamedImplKey, types: &Types, explicit_impl: Option<&Impl
13451345
}
13461346
}
13471347

1348-
fn expand_rust_vec(key: NamedImplKey, types: &Types, explicit_impl: Option<&Impl>) -> TokenStream {
1348+
fn expand_rust_vec(key: &NamedImplKey, types: &Types, explicit_impl: Option<&Impl>) -> TokenStream {
13491349
let elem = key.rust;
13501350
let resolve = types.resolve(elem);
13511351
let link_prefix = format!("cxxbridge1$rust_vec${}$", resolve.name.to_symbol());
@@ -1443,7 +1443,7 @@ fn expand_rust_vec(key: NamedImplKey, types: &Types, explicit_impl: Option<&Impl
14431443
}
14441444

14451445
fn expand_unique_ptr(
1446-
key: NamedImplKey,
1446+
key: &NamedImplKey,
14471447
types: &Types,
14481448
explicit_impl: Option<&Impl>,
14491449
) -> TokenStream {
@@ -1555,7 +1555,7 @@ fn expand_unique_ptr(
15551555
}
15561556

15571557
fn expand_shared_ptr(
1558-
key: NamedImplKey,
1558+
key: &NamedImplKey,
15591559
types: &Types,
15601560
explicit_impl: Option<&Impl>,
15611561
) -> TokenStream {
@@ -1637,7 +1637,7 @@ fn expand_shared_ptr(
16371637
}
16381638
}
16391639

1640-
fn expand_weak_ptr(key: NamedImplKey, types: &Types, explicit_impl: Option<&Impl>) -> TokenStream {
1640+
fn expand_weak_ptr(key: &NamedImplKey, types: &Types, explicit_impl: Option<&Impl>) -> TokenStream {
16411641
let ident = key.rust;
16421642
let name = ident.to_string();
16431643
let resolve = types.resolve(ident);
@@ -1710,7 +1710,7 @@ fn expand_weak_ptr(key: NamedImplKey, types: &Types, explicit_impl: Option<&Impl
17101710
}
17111711

17121712
fn expand_cxx_vector(
1713-
key: NamedImplKey,
1713+
key: &NamedImplKey,
17141714
explicit_impl: Option<&Impl>,
17151715
types: &Types,
17161716
) -> TokenStream {

macro/src/generics.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,13 @@ pub(crate) struct ImplGenerics<'a> {
1111
}
1212

1313
pub(crate) struct TyGenerics<'a> {
14-
key: NamedImplKey<'a>,
14+
key: &'a NamedImplKey<'a>,
1515
explicit_impl: Option<&'a Impl>,
1616
resolve: Resolution<'a>,
1717
}
1818

1919
pub(crate) fn split_for_impl<'a>(
20-
key: NamedImplKey<'a>,
20+
key: &'a NamedImplKey<'a>,
2121
explicit_impl: Option<&'a Impl>,
2222
resolve: Resolution<'a>,
2323
) -> (ImplGenerics<'a>, TyGenerics<'a>) {

syntax/instantiate.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use proc_macro2::{Ident, Span};
33
use std::hash::{Hash, Hasher};
44
use syn::Token;
55

6-
#[derive(Copy, Clone, PartialEq, Eq, Hash)]
6+
#[derive(PartialEq, Eq, Hash)]
77
pub(crate) enum ImplKey<'a> {
88
RustBox(NamedImplKey<'a>),
99
RustVec(NamedImplKey<'a>),
@@ -13,7 +13,6 @@ pub(crate) enum ImplKey<'a> {
1313
CxxVector(NamedImplKey<'a>),
1414
}
1515

16-
#[derive(Copy, Clone)]
1716
pub(crate) struct NamedImplKey<'a> {
1817
#[allow(dead_code)] // only used by cxxbridge-macro, not cxx-build
1918
pub begin_span: Span,

0 commit comments

Comments
 (0)