Track the angle brackets attached to generic implicit impls
diff --git a/gen/src/write.rs b/gen/src/write.rs
index 7b0b49b..406018a 100644
--- a/gen/src/write.rs
+++ b/gen/src/write.rs
@@ -3,7 +3,7 @@
use crate::gen::out::OutFile;
use crate::gen::{builtin, include, Opt};
use crate::syntax::atom::Atom::{self, *};
-use crate::syntax::instantiate::ImplKey;
+use crate::syntax::instantiate::{ImplKey, NamedImplKey};
use crate::syntax::map::UnorderedMap as Map;
use crate::syntax::set::UnorderedSet;
use crate::syntax::symbol::Symbol;
@@ -1349,7 +1349,7 @@
out.begin_block(Block::ExternC);
for impl_key in out.types.impls.keys() {
out.next_section();
- match impl_key {
+ match *impl_key {
ImplKey::RustBox(ident) => write_rust_box_extern(out, ident),
ImplKey::RustVec(ident) => write_rust_vec_extern(out, ident),
ImplKey::UniquePtr(ident) => write_unique_ptr(out, ident),
@@ -1363,7 +1363,7 @@
out.begin_block(Block::Namespace("rust"));
out.begin_block(Block::InlineNamespace("cxxbridge1"));
for impl_key in out.types.impls.keys() {
- match impl_key {
+ match *impl_key {
ImplKey::RustBox(ident) => write_rust_box_impl(out, ident),
ImplKey::RustVec(ident) => write_rust_vec_impl(out, ident),
_ => {}
@@ -1373,7 +1373,8 @@
out.end_block(Block::Namespace("rust"));
}
-fn write_rust_box_extern(out: &mut OutFile, ident: &Ident) {
+fn write_rust_box_extern(out: &mut OutFile, key: NamedImplKey) {
+ let ident = key.rust;
let resolve = out.types.resolve(ident);
let inner = resolve.name.to_fully_qualified();
let instance = resolve.name.to_symbol();
@@ -1395,7 +1396,8 @@
);
}
-fn write_rust_vec_extern(out: &mut OutFile, element: &Ident) {
+fn write_rust_vec_extern(out: &mut OutFile, key: NamedImplKey) {
+ let element = key.rust;
let inner = element.to_typename(out.types);
let instance = element.to_mangled(out.types);
@@ -1438,7 +1440,8 @@
);
}
-fn write_rust_box_impl(out: &mut OutFile, ident: &Ident) {
+fn write_rust_box_impl(out: &mut OutFile, key: NamedImplKey) {
+ let ident = key.rust;
let resolve = out.types.resolve(ident);
let inner = resolve.name.to_fully_qualified();
let instance = resolve.name.to_symbol();
@@ -1470,7 +1473,8 @@
writeln!(out, "}}");
}
-fn write_rust_vec_impl(out: &mut OutFile, element: &Ident) {
+fn write_rust_vec_impl(out: &mut OutFile, key: NamedImplKey) {
+ let element = key.rust;
let inner = element.to_typename(out.types);
let instance = element.to_mangled(out.types);
@@ -1547,8 +1551,8 @@
writeln!(out, "}}");
}
-fn write_unique_ptr(out: &mut OutFile, ident: &Ident) {
- let ty = UniquePtr::Ident(ident);
+fn write_unique_ptr(out: &mut OutFile, key: NamedImplKey) {
+ let ty = UniquePtr::Ident(key.rust);
write_unique_ptr_common(out, ty);
}
@@ -1663,7 +1667,8 @@
writeln!(out, "}}");
}
-fn write_shared_ptr(out: &mut OutFile, ident: &Ident) {
+fn write_shared_ptr(out: &mut OutFile, key: NamedImplKey) {
+ let ident = key.rust;
let resolve = out.types.resolve(ident);
let inner = resolve.name.to_fully_qualified();
let instance = resolve.name.to_symbol();
@@ -1735,7 +1740,8 @@
writeln!(out, "}}");
}
-fn write_weak_ptr(out: &mut OutFile, ident: &Ident) {
+fn write_weak_ptr(out: &mut OutFile, key: NamedImplKey) {
+ let ident = key.rust;
let resolve = out.types.resolve(ident);
let inner = resolve.name.to_fully_qualified();
let instance = resolve.name.to_symbol();
@@ -1794,7 +1800,8 @@
writeln!(out, "}}");
}
-fn write_cxx_vector(out: &mut OutFile, element: &Ident) {
+fn write_cxx_vector(out: &mut OutFile, key: NamedImplKey) {
+ let element = key.rust;
let inner = element.to_typename(out.types);
let instance = element.to_mangled(out.types);