Centralize mangled symbol joining
diff --git a/syntax/mangle.rs b/syntax/mangle.rs
index a109951..f2616d2 100644
--- a/syntax/mangle.rs
+++ b/syntax/mangle.rs
@@ -1,10 +1,18 @@
use crate::syntax::namespace::Namespace;
-use crate::syntax::ExternFn;
+use crate::syntax::{symbol, ExternFn};
+
+const CXXBRIDGE: &str = "cxxbridge02";
+
+macro_rules! join {
+ ($($segment:expr),*) => {
+ symbol::join(&[$(&$segment),*])
+ };
+}
pub fn extern_fn(namespace: &Namespace, efn: &ExternFn) -> String {
- let receiver = match &efn.receiver {
- Some(receiver) => receiver.ident.to_string() + "$",
- None => String::new(),
- };
- format!("{}cxxbridge02${}{}", namespace, receiver, efn.ident)
+ match &efn.receiver {
+ Some(receiver) => join!(namespace, CXXBRIDGE, receiver.ident, efn.ident),
+ None => join!(namespace, CXXBRIDGE, efn.ident),
+ }
+ .to_string()
}