Make an UnsafeExternCFn struct to overcome fn pointer hrtb
This commit is contained in:
@@ -67,7 +67,7 @@ fn generate_impls(imp: &mut ItemImpl) -> Result<TokenStream> {
|
||||
|
||||
let ffi_register_drop = quote! {
|
||||
if ::std::mem::needs_drop::<Self>() {
|
||||
b.declare::<unsafe extern "C" fn(*mut Self)>(#ffi_drop_cname);
|
||||
b.declare::<#ffi::UnsafeExternCFn<(*mut Self,), ()>>(#ffi_drop_cname);
|
||||
b.metatable_raw("gc", ::std::format_args!("__C.{}", #ffi_drop_cname));
|
||||
}
|
||||
};
|
||||
@@ -280,9 +280,9 @@ fn generate_ffi_register(func: &FfiFunction) -> Result<TokenStream> {
|
||||
};
|
||||
|
||||
let declare = if func.ret_by_out {
|
||||
quote! { b.declare::<unsafe extern "C" fn(*mut #ret, #(#params),*)>(#c_name); }
|
||||
quote! { b.declare::<#ffi::UnsafeExternCFn<(*mut #ret, #(#params,)*), ()>>(#c_name); }
|
||||
} else {
|
||||
quote! { b.declare::<unsafe extern "C" fn(#(#params),*) -> #ret>(#c_name); }
|
||||
quote! { b.declare::<#ffi::UnsafeExternCFn<(#(#params,)*), #ret>>(#c_name); }
|
||||
};
|
||||
|
||||
let register = match func.attrs.metatable {
|
||||
|
||||
Reference in New Issue
Block a user