Keep type of namespace-iterator in helpers
diff --git a/gen/write.rs b/gen/write.rs
index faf3311..153b5b3 100644
--- a/gen/write.rs
+++ b/gen/write.rs
@@ -978,9 +978,8 @@
}
fn write_rust_vec_extern(out: &mut OutFile, ty: &Type) {
- let namespace = out.namespace.iter().cloned().collect::<Vec<String>>();
- let inner = ty.to_typename(&namespace);
- let instance = ty.to_mangled(&namespace);
+ let inner = ty.to_typename(&out.namespace);
+ let instance = ty.to_mangled(&out.namespace);
writeln!(out, "#ifndef CXXBRIDGE02_RUST_VEC_{}", instance);
writeln!(out, "#define CXXBRIDGE02_RUST_VEC_{}", instance);
@@ -1018,9 +1017,8 @@
}
fn write_rust_vec_impl(out: &mut OutFile, ty: &Type) {
- let namespace = out.namespace.iter().cloned().collect::<Vec<String>>();
- let inner = ty.to_typename(&namespace);
- let instance = ty.to_mangled(&namespace);
+ let inner = ty.to_typename(&out.namespace);
+ let instance = ty.to_mangled(&out.namespace);
writeln!(out, "template <>");
writeln!(out, "void Vec<{}>::drop() noexcept {{", inner);
@@ -1039,9 +1037,8 @@
fn write_unique_ptr(out: &mut OutFile, ty: &Type, types: &Types) {
out.include.utility = true;
- let namespace = out.namespace.iter().cloned().collect::<Vec<String>>();
- let inner = ty.to_typename(&namespace);
- let instance = ty.to_mangled(&namespace);
+ let inner = ty.to_typename(&out.namespace);
+ let instance = ty.to_mangled(&out.namespace);
writeln!(out, "#ifndef CXXBRIDGE02_UNIQUE_PTR_{}", instance);
writeln!(out, "#define CXXBRIDGE02_UNIQUE_PTR_{}", instance);
diff --git a/macro/src/expand.rs b/macro/src/expand.rs
index 9b17b11..d1aa638 100644
--- a/macro/src/expand.rs
+++ b/macro/src/expand.rs
@@ -548,7 +548,7 @@
fn expand_rust_vec(namespace: &Namespace, ty: &Type, ident: &Ident) -> TokenStream {
let inner = ty;
- let mangled = ty.to_mangled(&namespace.segments) + "$";
+ let mangled = ty.to_mangled(namespace) + "$";
let link_prefix = format!("cxxbridge02$rust_vec${}", mangled);
let link_drop = format!("{}drop", link_prefix);
let link_len = format!("{}len", link_prefix);
@@ -573,9 +573,9 @@
}
fn expand_unique_ptr(namespace: &Namespace, ty: &Type, types: &Types) -> TokenStream {
- let name = ty.to_typename(&namespace.segments);
+ let name = ty.to_typename(namespace);
let inner = ty;
- let mangled = ty.to_mangled(&namespace.segments) + "$";
+ let mangled = ty.to_mangled(namespace) + "$";
let prefix = format!("cxxbridge02$unique_ptr${}", mangled);
let link_null = format!("{}null", prefix);
let link_new = format!("{}new", prefix);
@@ -648,7 +648,7 @@
fn expand_vector(namespace: &Namespace, ty: &Type) -> TokenStream {
let inner = ty;
- let mangled = ty.to_mangled(&namespace.segments) + "$";
+ let mangled = ty.to_mangled(namespace) + "$";
let prefix = format!("cxxbridge02$std$vector${}", mangled);
let link_size = format!("{}size", prefix);
let link_get_unchecked = format!("{}get_unchecked", prefix);
diff --git a/syntax/mangled.rs b/syntax/mangled.rs
index 2a2fa4c..a89060d 100644
--- a/syntax/mangled.rs
+++ b/syntax/mangled.rs
@@ -1,11 +1,12 @@
+use crate::syntax::namespace::Namespace;
use crate::syntax::{Atom, Type};
pub trait ToMangled {
- fn to_mangled(&self, namespace: &Vec<String>) -> String;
+ fn to_mangled(&self, namespace: &Namespace) -> String;
}
impl ToMangled for Type {
- fn to_mangled(&self, namespace: &Vec<String>) -> String {
+ fn to_mangled(&self, namespace: &Namespace) -> String {
match self {
Type::Ident(ident) => {
let mut instance = String::new();
diff --git a/syntax/typename.rs b/syntax/typename.rs
index 016749a..b4261f9 100644
--- a/syntax/typename.rs
+++ b/syntax/typename.rs
@@ -1,11 +1,12 @@
+use crate::syntax::namespace::Namespace;
use crate::syntax::{Atom, Type};
pub trait ToTypename {
- fn to_typename(&self, namespace: &Vec<String>) -> String;
+ fn to_typename(&self, namespace: &Namespace) -> String;
}
impl ToTypename for Type {
- fn to_typename(&self, namespace: &Vec<String>) -> String {
+ fn to_typename(&self, namespace: &Namespace) -> String {
match self {
Type::Ident(ident) => {
let mut inner = String::new();