summaryrefslogtreecommitdiff
path: root/src/codegen/mod.rs
diff options
context:
space:
mode:
authorZhiting Zhu <zzhu@mozilla.com>2017-08-10 16:22:48 -0700
committerZhiting Zhu <zzhu@mozilla.com>2017-08-14 10:19:14 -0700
commitd98535a39721a4be7a0e3d0a6171e96c52b646b1 (patch)
treec24b9df2d29f08d85d864a5ea8073f57d79d1cc6 /src/codegen/mod.rs
parent5ca05690c17e318d52f8d2e82aeef5d0feff35b3 (diff)
Can derive PartialEq analysis
Diffstat (limited to 'src/codegen/mod.rs')
-rw-r--r--src/codegen/mod.rs18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/codegen/mod.rs b/src/codegen/mod.rs
index 6113e5d5..1e4a5d48 100644
--- a/src/codegen/mod.rs
+++ b/src/codegen/mod.rs
@@ -14,7 +14,7 @@ use ir::comment;
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};
+use ir::derive::{CanDeriveCopy, CanDeriveDebug, CanDeriveDefault, CanDeriveHash, CanDerivePartialEq};
use ir::dot;
use ir::enum_ty::{Enum, EnumVariant, EnumVariantValue};
use ir::function::{Abi, Function, FunctionSig};
@@ -1495,6 +1495,10 @@ impl CodeGenerator for CompInfo {
derives.push("Hash");
}
+ if item.can_derive_partialeq(ctx) {
+ derives.push("PartialEq");
+ }
+
if !derives.is_empty() {
attributes.push(attributes::derives(&derives))
}
@@ -3569,13 +3573,23 @@ mod utils {
)
.unwrap();
+ let union_field_partialeq_impl = quote_item!(&ctx.ext_cx(),
+ impl<T> ::$prefix::cmp::PartialEq for __BindgenUnionField<T> {
+ fn eq(&self, _other: &__BindgenUnionField<T>) -> bool {
+ true
+ }
+ }
+ )
+ .unwrap();
+
let items = vec![union_field_decl,
union_field_impl,
union_field_default_impl,
union_field_clone_impl,
union_field_copy_impl,
union_field_debug_impl,
- union_field_hash_impl];
+ union_field_hash_impl,
+ union_field_partialeq_impl];
let old_items = mem::replace(result, items);
result.extend(old_items.into_iter());