diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2018-03-13 12:21:39 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-03-13 12:21:39 -0400 |
commit | 22041e13d08dbd4cb0ea777fa540897735d9e7c2 (patch) | |
tree | 330e9aafb831b9da9b22896ff49efe91394c8abe /src | |
parent | 9a0edb86548dca98cce6aad9025f5a8fc92a8522 (diff) | |
parent | 8c9b3ab4d650bd30b5f50cc85a19621f920f91c6 (diff) |
Auto merge of #1272 - tmfink:issue-1198, r=emilio
Declare precedence on enum types
Fixes issue #1198 where an enum matches the pattern for multiple enum types, such as constified module enum AND rustified enum.
Documents precedence in `Builder` doc comment.
Diffstat (limited to 'src')
-rw-r--r-- | src/codegen/mod.rs | 6 | ||||
-rw-r--r-- | src/lib.rs | 17 |
2 files changed, 21 insertions, 2 deletions
diff --git a/src/codegen/mod.rs b/src/codegen/mod.rs index a6ab3997..cf1a4f3b 100644 --- a/src/codegen/mod.rs +++ b/src/codegen/mod.rs @@ -2477,12 +2477,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 @@ -155,6 +155,23 @@ impl Default for CodegenConfig { /// // Write the generated bindings to an output file. /// bindings.write_to_file("path/to/output.rs")?; /// ``` +/// +/// # Enums +/// +/// Bindgen can map C/C++ enums into Rust in different ways. The way bindgen maps enums depends on +/// the pattern passed to several methods: +/// +/// 1. [`bitfield_enum()`](#method.bitfield_enum) +/// 2. [`constified_enum_module()`](#method.constified_enum_module) +/// 3. [`rustified_enum()`](#method.rustified_enum) +/// +/// For each C enum, bindgen tries to match the pattern in the following order: +/// +/// 1. Bitfield enum +/// 2. Constified enum module +/// 3. Rustified enum +/// +/// If none of the above patterns match, then bindgen will generate a set of Rust constants. #[derive(Debug, Default)] pub struct Builder { options: BindgenOptions, |