Work around redundant_closure lint in old clippys
diff --git a/macro/src/expand.rs b/macro/src/expand.rs
index ff19bc6..5685abe 100644
--- a/macro/src/expand.rs
+++ b/macro/src/expand.rs
@@ -983,14 +983,22 @@
_ => quote!(#var),
}
});
- let vars = receiver_var.into_iter().chain(arg_vars);
+ let vars: Vec<_> = receiver_var.into_iter().chain(arg_vars).collect();
let wrap_super = invoke.map(|invoke| expand_rust_function_shim_super(sig, &local_name, invoke));
+ let mut requires_closure;
let mut call = match invoke {
- Some(_) => quote!(#local_name),
- None => quote!(::std::mem::transmute::<*const (), #sig>(__extern)),
+ Some(_) => {
+ requires_closure = false;
+ quote!(#local_name)
+ }
+ None => {
+ requires_closure = true;
+ quote!(::std::mem::transmute::<*const (), #sig>(__extern))
+ }
};
+ requires_closure |= !vars.is_empty();
call.extend(quote! { (#(#vars),*) });
let span = body_span;
@@ -1032,8 +1040,14 @@
let mut expr = match conversion {
None => call,
- Some(conversion) if !sig.throws => quote_spanned!(span=> #conversion(#call)),
- Some(conversion) => quote_spanned!(span=> ::std::result::Result::map(#call, #conversion)),
+ Some(conversion) if !sig.throws => {
+ requires_closure = true;
+ quote_spanned!(span=> #conversion(#call))
+ }
+ Some(conversion) => {
+ requires_closure = true;
+ quote_spanned!(span=> ::std::result::Result::map(#call, #conversion))
+ }
};
let mut outparam = None;
@@ -1047,12 +1061,20 @@
Some(_) => quote_spanned!(span=> __return),
None => quote_spanned!(span=> &mut ()),
};
+ requires_closure = true;
expr = quote_spanned!(span=> ::cxx::private::r#try(#out, #expr));
} else if indirect_return {
+ requires_closure = true;
expr = quote_spanned!(span=> ::std::ptr::write(__return, #expr));
}
- expr = quote_spanned!(span=> ::cxx::private::catch_unwind(__fn, move || #expr));
+ let closure = if requires_closure {
+ quote_spanned!(span=> move || #expr)
+ } else {
+ quote!(#local_name)
+ };
+
+ expr = quote_spanned!(span=> ::cxx::private::catch_unwind(__fn, #closure));
let ret = if sig.throws {
quote!(-> ::cxx::private::Result)