mirror of
https://github.com/topjohnwu/cxx.git
synced 2024-10-07 09:03:30 +00:00
Factor out helper for identifying maybe trivial types
This commit is contained in:
parent
9c1737feff
commit
c5f472ef62
@ -1592,11 +1592,7 @@ fn write_unique_ptr_common(out: &mut OutFile, ty: UniquePtr) {
|
|||||||
// know at code generation time, so we generate both C++ and Rust side
|
// know at code generation time, so we generate both C++ and Rust side
|
||||||
// bindings for a "new" method anyway. But the Rust code can't be called
|
// bindings for a "new" method anyway. But the Rust code can't be called
|
||||||
// for Opaque types because the 'new' method is not implemented.
|
// for Opaque types because the 'new' method is not implemented.
|
||||||
UniquePtr::Ident(ident) => {
|
UniquePtr::Ident(ident) => out.types.is_maybe_trivial(ident),
|
||||||
out.types.structs.contains_key(ident)
|
|
||||||
|| out.types.enums.contains_key(ident)
|
|
||||||
|| out.types.aliases.contains_key(ident)
|
|
||||||
}
|
|
||||||
UniquePtr::CxxVector(_) => false,
|
UniquePtr::CxxVector(_) => false,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1704,9 +1700,7 @@ fn write_shared_ptr(out: &mut OutFile, key: NamedImplKey) {
|
|||||||
// know at code generation time, so we generate both C++ and Rust side
|
// know at code generation time, so we generate both C++ and Rust side
|
||||||
// bindings for a "new" method anyway. But the Rust code can't be called for
|
// bindings for a "new" method anyway. But the Rust code can't be called for
|
||||||
// Opaque types because the 'new' method is not implemented.
|
// Opaque types because the 'new' method is not implemented.
|
||||||
let can_construct_from_value = out.types.structs.contains_key(ident)
|
let can_construct_from_value = out.types.is_maybe_trivial(ident);
|
||||||
|| out.types.enums.contains_key(ident)
|
|
||||||
|| out.types.aliases.contains_key(ident);
|
|
||||||
|
|
||||||
writeln!(
|
writeln!(
|
||||||
out,
|
out,
|
||||||
|
@ -1302,9 +1302,7 @@ fn expand_unique_ptr(
|
|||||||
|
|
||||||
let (impl_generics, ty_generics) = generics::split_for_impl(key, explicit_impl, resolve);
|
let (impl_generics, ty_generics) = generics::split_for_impl(key, explicit_impl, resolve);
|
||||||
|
|
||||||
let can_construct_from_value = types.structs.contains_key(ident)
|
let can_construct_from_value = types.is_maybe_trivial(ident);
|
||||||
|| types.enums.contains_key(ident)
|
|
||||||
|| types.aliases.contains_key(ident);
|
|
||||||
let new_method = if can_construct_from_value {
|
let new_method = if can_construct_from_value {
|
||||||
Some(quote! {
|
Some(quote! {
|
||||||
#[doc(hidden)]
|
#[doc(hidden)]
|
||||||
@ -1398,9 +1396,7 @@ fn expand_shared_ptr(
|
|||||||
|
|
||||||
let (impl_generics, ty_generics) = generics::split_for_impl(key, explicit_impl, resolve);
|
let (impl_generics, ty_generics) = generics::split_for_impl(key, explicit_impl, resolve);
|
||||||
|
|
||||||
let can_construct_from_value = types.structs.contains_key(ident)
|
let can_construct_from_value = types.is_maybe_trivial(ident);
|
||||||
|| types.enums.contains_key(ident)
|
|
||||||
|| types.aliases.contains_key(ident);
|
|
||||||
let new_method = if can_construct_from_value {
|
let new_method = if can_construct_from_value {
|
||||||
Some(quote! {
|
Some(quote! {
|
||||||
#[doc(hidden)]
|
#[doc(hidden)]
|
||||||
|
@ -250,6 +250,14 @@ impl<'a> Types<'a> {
|
|||||||
ImproperCtype::Depends(ident) => self.struct_improper_ctypes.contains(ident),
|
ImproperCtype::Depends(ident) => self.struct_improper_ctypes.contains(ident),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Types which we need to assume could possibly exist by value on the Rust
|
||||||
|
// side.
|
||||||
|
pub fn is_maybe_trivial(&self, ty: &Ident) -> bool {
|
||||||
|
self.structs.contains_key(ty)
|
||||||
|
|| self.enums.contains_key(ty)
|
||||||
|
|| self.aliases.contains_key(ty)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'t, 'a> IntoIterator for &'t Types<'a> {
|
impl<'t, 'a> IntoIterator for &'t Types<'a> {
|
||||||
|
Loading…
Reference in New Issue
Block a user