Implement returning Box from Rust to C++
diff --git a/gen/write.rs b/gen/write.rs
index f0bcaf9..7dc625e 100644
--- a/gen/write.rs
+++ b/gen/write.rs
@@ -336,8 +336,13 @@
write!(out, " ");
} else if let Some(ret) = &efn.ret {
write!(out, "return ");
- if let Type::Ref(_) = ret {
- write!(out, "*");
+ match ret {
+ Type::RustBox(_) => {
+ write_type(out, ret);
+ write!(out, "::from_raw(");
+ }
+ Type::Ref(_) => write!(out, "*"),
+ _ => {}
}
}
for name in out.namespace.clone() {
@@ -368,7 +373,13 @@
}
write!(out, "&return$.value");
}
- writeln!(out, ");");
+ write!(out, ")");
+ if let Some(ret) = &efn.ret {
+ if let Type::RustBox(_) = ret {
+ write!(out, ")");
+ }
+ }
+ writeln!(out, ";");
if indirect_return {
writeln!(out, " return ::std::move(return$.value);");
}