diff options
Diffstat (limited to 'src/codegen/mod.rs')
-rw-r--r-- | src/codegen/mod.rs | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/src/codegen/mod.rs b/src/codegen/mod.rs index 2ab507da..7066003b 100644 --- a/src/codegen/mod.rs +++ b/src/codegen/mod.rs @@ -15,7 +15,7 @@ use ir::comp::{Base, Bitfield, BitfieldUnit, CompInfo, CompKind, Field, FieldData, FieldMethods, Method, MethodKind}; use ir::context::{BindgenContext, ItemId}; use ir::derive::{CanDeriveCopy, CanDeriveDebug, CanDeriveDefault, - CanDeriveHash, CanDerivePartialEq}; + CanDeriveHash, CanDerivePartialEq, CanDeriveEq}; use ir::dot; use ir::enum_ty::{Enum, EnumVariant, EnumVariantValue}; use ir::function::{Abi, Function, FunctionSig}; @@ -1516,6 +1516,10 @@ impl CodeGenerator for CompInfo { derives.push("PartialEq"); } + if item.can_derive_eq(ctx) { + derives.push("Eq"); + } + if !derives.is_empty() { attributes.push(attributes::derives(&derives)) } @@ -3617,6 +3621,12 @@ mod utils { } ).unwrap(); + let union_field_eq_impl = quote_item!(&ctx.ext_cx(), + impl<T> ::$prefix::cmp::Eq for __BindgenUnionField<T> { + } + ) + .unwrap(); + let items = vec![union_field_decl, union_field_impl, union_field_default_impl, @@ -3624,7 +3634,8 @@ mod utils { union_field_copy_impl, union_field_debug_impl, union_field_hash_impl, - union_field_partialeq_impl]; + union_field_partialeq_impl, + union_field_eq_impl]; let old_items = mem::replace(result, items); result.extend(old_items.into_iter()); |