summaryrefslogtreecommitdiff
path: root/src/codegen/mod.rs
diff options
context:
space:
mode:
authorTravis Finkenauer <tmfinken@gmail.com>2018-03-11 18:26:31 -0400
committerTravis Finkenauer <tmfinken@gmail.com>2018-03-11 18:26:31 -0400
commit7b99b2512921fd7540a0b8f9717c6e38fec376e1 (patch)
treec8223a3ab4f74af1236703a05ec5cedbdd9d4db1 /src/codegen/mod.rs
parentf36f4e3e38d5a4f9c712a5bbde68403ce716dab6 (diff)
Fix bug when enum matched multiple types
If an enum matched a pattern for rustified enum and constified module enum, then rust code would fail to compile with "ambiguous associated type" error. We fix the error by giving constified module enum "higher precedence". Fixes issue #1198
Diffstat (limited to 'src/codegen/mod.rs')
-rw-r--r--src/codegen/mod.rs6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/codegen/mod.rs b/src/codegen/mod.rs
index 1801520a..1a948c05 100644
--- a/src/codegen/mod.rs
+++ b/src/codegen/mod.rs
@@ -2461,12 +2461,14 @@ impl CodeGenerator for Enum {
}
};
+ // ModuleConsts has higher precedence before Rust in order to avoid problems with
+ // overlapping match patterns
let variation = if self.is_bitfield(ctx, item) {
EnumVariation::Bitfield
- } else if self.is_rustified_enum(ctx, item) {
- EnumVariation::Rust
} else if self.is_constified_enum_module(ctx, item) {
EnumVariation::ModuleConsts
+ } else if self.is_rustified_enum(ctx, item) {
+ EnumVariation::Rust
} else {
// We generate consts by default
EnumVariation::Consts