Support calling Rust methods from C++
These methods can be declared in the bridge by naming the first
argument self and making it a reference to the containing class, e.g.,
fn get(self: &R) -> usize;
fn set(self: &mut R, n: usize);
This syntax requires Rust 1.43.
diff --git a/tests/ffi/lib.rs b/tests/ffi/lib.rs
index a720a80..4da5740 100644
--- a/tests/ffi/lib.rs
+++ b/tests/ffi/lib.rs
@@ -56,6 +56,7 @@
extern "Rust" {
type R;
+ type R2;
fn r_return_primitive() -> usize;
fn r_return_shared() -> Shared;
@@ -80,11 +81,28 @@
fn r_try_return_void() -> Result<()>;
fn r_try_return_primitive() -> Result<usize>;
fn r_fail_return_primitive() -> Result<usize>;
+
+ fn r_return_r2(n: usize) -> Box<R2>;
+ fn get(self: &R2) -> usize;
+ fn set(self: &mut R2, n: usize) -> usize;
}
}
pub type R = usize;
+pub struct R2(usize);
+
+impl R2 {
+ fn get(&self) -> usize {
+ self.0
+ }
+
+ fn set(&mut self, n: usize) -> usize {
+ self.0 = n;
+ n
+ }
+}
+
#[derive(Debug)]
struct Error;
@@ -187,3 +205,7 @@
fn r_fail_return_primitive() -> Result<usize, Error> {
Err(Error)
}
+
+fn r_return_r2(n: usize) -> Box<R2> {
+ Box::new(R2(n))
+}