Resolve Wreturn-type-c-linkage warnings
diff --git a/gen/write.rs b/gen/write.rs
index 97fdc48..ea6a812 100644
--- a/gen/write.rs
+++ b/gen/write.rs
@@ -211,8 +211,11 @@
write!(out, "new (return$) ");
write_type(out, efn.ret.as_ref().unwrap());
write!(out, "(");
- } else if efn.ret.is_some() {
+ } else if let Some(ret) = &efn.ret {
write!(out, "return ");
+ if let Type::Ref(_) = ret {
+ write!(out, "&");
+ }
}
write!(out, "{}$(", efn.ident);
for (i, arg) in efn.args.iter().enumerate() {
@@ -298,8 +301,11 @@
write_type(out, efn.ret.as_ref().unwrap());
writeln!(out, ")];");
write!(out, " ");
- } else if efn.ret.is_some() {
+ } else if let Some(ret) = &efn.ret {
write!(out, "return ");
+ if let Type::Ref(_) = ret {
+ write!(out, "*");
+ }
}
for name in out.namespace.clone() {
write!(out, "{}$", name);
@@ -352,6 +358,13 @@
write_type_space(out, &ty.inner);
write!(out, "*");
}
+ Some(Type::Ref(ty)) => {
+ if ty.mutability.is_none() {
+ write!(out, "const ");
+ }
+ write_type(out, &ty.inner);
+ write!(out, " *");
+ }
Some(Type::Str(_)) => write!(out, "cxxbridge::RustStr::Repr "),
Some(ty) if types.needs_indirect_abi(ty) => write!(out, "void "),
_ => write_return_type(out, ty),