diff options
author | Travis Finkenauer <tmfinken@gmail.com> | 2018-03-11 18:26:31 -0400 |
---|---|---|
committer | Travis Finkenauer <tmfinken@gmail.com> | 2018-03-11 18:26:31 -0400 |
commit | 7b99b2512921fd7540a0b8f9717c6e38fec376e1 (patch) | |
tree | c8223a3ab4f74af1236703a05ec5cedbdd9d4db1 /src/codegen/mod.rs | |
parent | f36f4e3e38d5a4f9c712a5bbde68403ce716dab6 (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.rs | 6 |
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 |