From: Matt Corallo Date: Wed, 25 Nov 2020 18:25:18 +0000 (-0500) Subject: [bindings] Be explicit with take_ptr calls X-Git-Tag: v0.0.13~38^2~4 X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=commitdiff_plain;h=554af1efb318e38f2428506f696cc9e9bdaaea02;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 4e84f1430..b5bd87e1a 100644 --- a/c-bindings-gen/src/types.rs +++ b/c-bindings-gen/src/types.rs @@ -798,8 +798,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 => {