Share function link name mangling logic
diff --git a/gen/write.rs b/gen/write.rs
index 59e12ed..4df404c 100644
--- a/gen/write.rs
+++ b/gen/write.rs
@@ -2,7 +2,9 @@
use crate::gen::{include, Opt};
use crate::syntax::atom::Atom::{self, *};
use crate::syntax::namespace::Namespace;
-use crate::syntax::{Api, ExternFn, ExternType, Receiver, Signature, Struct, Type, Types, Var};
+use crate::syntax::{
+ mangle, Api, ExternFn, ExternType, Receiver, Signature, Struct, Type, Types, Var,
+};
use proc_macro2::Ident;
use std::collections::HashMap;
@@ -365,15 +367,8 @@
} else {
write_extern_return_type_space(out, &efn.ret, types);
}
- let receiver_type = match &efn.receiver {
- Some(base) => base.ident.to_string(),
- None => "_".to_string(),
- };
- write!(
- out,
- "{}cxxbridge02${}${}(",
- out.namespace, receiver_type, efn.ident
- );
+ let mangled = mangle::extern_fn(&out.namespace, efn);
+ write!(out, "{}(", mangled);
if let Some(base) = &efn.receiver {
write!(out, "{} *self$", base.ident);
}
@@ -519,14 +514,7 @@
}
fn write_rust_function_decl(out: &mut OutFile, efn: &ExternFn, types: &Types) {
- let receiver_type = match &efn.receiver {
- Some(base) => base.ident.to_string(),
- None => "_".to_string(),
- };
- let link_name = format!(
- "{}cxxbridge02${}${}",
- out.namespace, receiver_type, efn.ident
- );
+ let link_name = mangle::extern_fn(&out.namespace, efn);
let indirect_call = false;
write_rust_function_decl_impl(out, &link_name, efn, types, indirect_call);
}
@@ -578,14 +566,7 @@
writeln!(out, "//{}", line);
}
let local_name = efn.ident.to_string();
- let receiver_type = match &efn.receiver {
- Some(base) => base.ident.to_string(),
- None => "_".to_string(),
- };
- let invoke = format!(
- "{}cxxbridge02${}${}",
- out.namespace, receiver_type, efn.ident
- );
+ let invoke = mangle::extern_fn(&out.namespace, efn);
let indirect_call = false;
write_rust_function_shim_impl(out, &local_name, efn, types, &invoke, indirect_call);
}