From 81b9aa29e5cadabcb43cb7382a978d1e32bce962 Mon Sep 17 00:00:00 2001 From: Jos van den Oever Date: Tue, 8 Aug 2017 20:38:42 +0200 Subject: [PATCH] Be explicit about the interface being "C". --- common-rust/src/testimplementation.rs | 14 +++++++++----- .../rust_qt_binding_generator.cpp | 16 ++++++++-------- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/common-rust/src/testimplementation.rs b/common-rust/src/testimplementation.rs index 9edc599..4f9400d 100644 --- a/common-rust/src/testimplementation.rs +++ b/common-rust/src/testimplementation.rs @@ -1,4 +1,4 @@ -use libc::{c_int}; +use libc::c_int; use types::*; use testinterface::*; @@ -7,7 +7,7 @@ pub struct Test { username: String, age: c_int, active: bool, - misc: Variant + misc: Variant, } impl TestTrait for Test { @@ -17,13 +17,15 @@ impl TestTrait for Test { username: String::new(), age: 0, active: true, - misc: Variant::None + misc: Variant::None, } } fn emit(&self) -> &TestEmitter { &self.emit } - fn get_username(&self) -> String { self.username.clone() } + fn get_username(&self) -> String { + self.username.clone() + } fn set_username(&mut self, value: String) { self.username = value; self.emit.username_changed(); @@ -38,7 +40,9 @@ impl TestTrait for Test { self.active = value; self.emit.active_changed(); } - fn get_misc(&self) -> Variant { Variant::None } + fn get_misc(&self) -> Variant { + Variant::None + } fn set_misc(&mut self, value: Variant) { self.misc = value; self.emit.misc_changed(); diff --git a/rust_qt_binding_generator/rust_qt_binding_generator.cpp b/rust_qt_binding_generator/rust_qt_binding_generator.cpp index 0aa903e..ecc59db 100644 --- a/rust_qt_binding_generator/rust_qt_binding_generator.cpp +++ b/rust_qt_binding_generator/rust_qt_binding_generator.cpp @@ -379,7 +379,7 @@ pub struct %1Emitter { qobject: Arc>, )").arg(o.name); for (const Property& p: o.properties) { - r << QString(" %2_changed: fn (*const %1QObject),\n") + r << QString(" %2_changed: fn(*const %1QObject),\n") .arg(o.name, p.name.toLower()); } r << QString(R"(} @@ -419,9 +419,9 @@ pub trait %1Trait { r << QString(R"(} #[no_mangle] -pub extern fn %2_new(qobject: *const %1QObject)").arg(o.name, lcname); +pub extern "C" fn %2_new(qobject: *const %1QObject)").arg(o.name, lcname); for (const Property& p: o.properties) { - r << QString(",\n %2_changed: fn (*const %1QObject)") + r << QString(",\n %2_changed: fn(*const %1QObject)") .arg(o.name, p.name.toLower()); } r << QString(R"() -> *mut %1 { @@ -437,7 +437,7 @@ pub extern fn %2_new(qobject: *const %1QObject)").arg(o.name, lcname); } #[no_mangle] -pub unsafe extern fn %2_free(ptr: *mut %1) { +pub unsafe extern "C" fn %2_free(ptr: *mut %1) { Box::from_raw(ptr).emit().clear(); } )").arg(o.name, lcname); @@ -447,7 +447,7 @@ pub unsafe extern fn %2_free(ptr: *mut %1) { if (p.type.startsWith("Q")) { r << QString(R"( #[no_mangle] -pub unsafe extern fn %2_get(ptr: *const %1, p: *mut c_void, set: fn (*mut c_void, %4)) { +pub unsafe extern "C" fn %2_get(ptr: *const %1, p: *mut c_void, set: fn (*mut c_void, %4)) { let data = (&*ptr).get_%3(); set(p, %4::from(&data)); } @@ -456,7 +456,7 @@ pub unsafe extern fn %2_get(ptr: *const %1, p: *mut c_void, set: fn (*mut c_void const QString type = p.type == "QString" ? "QStringIn" : p.type; r << QString(R"( #[no_mangle] -pub unsafe extern fn %2_set(ptr: *mut %1, v: %4) { +pub unsafe extern "C" fn %2_set(ptr: *mut %1, v: %4) { (&mut *ptr).set_%3(v.convert()); } )").arg(o.name, base, p.name.toLower(), type); @@ -464,14 +464,14 @@ pub unsafe extern fn %2_set(ptr: *mut %1, v: %4) { } else { r << QString(R"( #[no_mangle] -pub unsafe extern fn %2_get(ptr: *const %1) -> %4 { +pub unsafe extern "C" fn %2_get(ptr: *const %1) -> %4 { (&*ptr).get_%3() } )").arg(o.name, base, p.name.toLower(), rustType(p)); if (p.write) { r << QString(R"( #[no_mangle] -pub unsafe extern fn %2_set(ptr: *mut %1, v: %4) { +pub unsafe extern "C" fn %2_set(ptr: *mut %1, v: %4) { (&mut *ptr).set_%3(v); } )").arg(o.name, base, p.name.toLower(), rustType(p));