summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2018-03-13 12:21:39 -0400
committerGitHub <noreply@github.com>2018-03-13 12:21:39 -0400
commit22041e13d08dbd4cb0ea777fa540897735d9e7c2 (patch)
tree330e9aafb831b9da9b22896ff49efe91394c8abe /src
parent9a0edb86548dca98cce6aad9025f5a8fc92a8522 (diff)
parent8c9b3ab4d650bd30b5f50cc85a19621f920f91c6 (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.rs6
-rw-r--r--src/lib.rs17
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
diff --git a/src/lib.rs b/src/lib.rs
index 6346ff80..36378316 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -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,