From: Matt Corallo Date: Wed, 25 Nov 2020 18:25:18 +0000 (-0500) Subject: [bindings] Be explicit with take_ptr calls X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=commitdiff_plain;h=93d7a2f4c0193a965fcc9349f45ce4c800593bb9;p=rust-lightning [bindings] Be explicit with take_ptr calls If you try to call take_ptr on a pointer to an object which implements Deref, rustc hits the deref recursion limit. To avoid this, we can explicitly tell rustc that we want to treat the pointer as a pointer and call take_ptr on it directly. --- diff --git a/c-bindings-gen/src/types.rs b/c-bindings-gen/src/types.rs index 57b51edf0..b1318e72f 100644 --- a/c-bindings-gen/src/types.rs +++ b/c-bindings-gen/src/types.rs @@ -790,8 +790,8 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> { match full_path { "Result" if !is_ref => { Some(("match ", - vec![(".result_ok { true => Ok(".to_string(), format!("(*unsafe {{ Box::from_raw({}.contents.result.take_ptr()) }})", var_name)), - ("), false => Err(".to_string(), format!("(*unsafe {{ Box::from_raw({}.contents.err.take_ptr()) }})", var_name))], + vec![(".result_ok { true => Ok(".to_string(), format!("(*unsafe {{ Box::from_raw(<*mut _>::take_ptr(&mut {}.contents.result)) }})", var_name)), + ("), false => Err(".to_string(), format!("(*unsafe {{ Box::from_raw(<*mut _>::take_ptr(&mut {}.contents.err)) }})", var_name))], ")}")) }, "Vec"|"Slice" if !is_ref => {