X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=c-bindings-gen%2Fsrc%2Ftypes.rs;h=f47bf9ed146397cfe80ec0e67fe8c83fb4140a4b;hb=e1dd5fa811b8fecf0e0abdd6c7280a94489cc7b9;hp=c02b1dd2114fc377a4065a8323d7976774f01dc6;hpb=859b128dc384db3470da5914bb053d2ff82fdf69;p=ldk-c-bindings diff --git a/c-bindings-gen/src/types.rs b/c-bindings-gen/src/types.rs index c02b1dd..f47bf9e 100644 --- a/c-bindings-gen/src/types.rs +++ b/c-bindings-gen/src/types.rs @@ -1624,7 +1624,7 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> { let inner_name = self.get_c_mangled_container_type(vec![single_contained.unwrap()], generics, "Option").unwrap(); return Some(("if ", vec![ (format!(".is_none() {{ {}::None }} else {{ {}::Some(/* WARNING: CLONING CONVERSION HERE! &Option is otherwise un-expressable. */", inner_name, inner_name), - format!("{}.clone().unwrap()", var_access)) + format!("(*{}.as_ref().unwrap()).clone()", var_access)) ], ") }", ContainerPrefixLocation::PerConv)); } } else { @@ -1717,10 +1717,10 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> { (format!("{} {{ None }} else {{ Some(", s), format!("unsafe {{ &mut *{} }}", var_access)) ], ") }", ContainerPrefixLocation::NoPrefix)), EmptyValExpectedTy::OptionType => - return Some(("{ /* ", vec![ - (format!("*/ let {}_opt = {};", var_name, var_access), - format!("}} if {}_opt{} {{ None }} else {{ Some({{ {}_opt.take()", var_name, s, var_name)) - ], ") } }", ContainerPrefixLocation::PerConv)), + return Some(("{ /*", vec![ + (format!("*/ let {}_opt = {}; if {}_opt{} {{ None }} else {{ Some({{", var_name, var_access, var_name, s), + format!("{{ {}_opt.take() }}", var_name)) + ], "})} }", ContainerPrefixLocation::PerConv)), EmptyValExpectedTy::NonPointer => return Some(("if ", vec![ (format!("{} {{ None }} else {{ Some(", s), format!("{}", var_access)) @@ -2685,10 +2685,16 @@ impl<'a, 'c: 'a> TypeResolver<'a, 'c> { } else if let syn::Type::Path(p_arg) = t { if let Some(resolved) = self.maybe_resolve_path(&p_arg.path, generics) { if !self.is_primitive(&resolved) { - assert!(!is_ref); // We don't currently support outer reference types for non-primitive inners + if is_ref { + // We don't currently support outer reference types for non-primitive inners + return false; + } } } else { - assert!(!is_ref); // We don't currently support outer reference types for non-primitive inners + if is_ref { + // We don't currently support outer reference types for non-primitive inners + return false; + } } if !self.write_c_type_intern(w, t, generics, false, false, false, true, true) { return false; } } else {