summaryrefslogtreecommitdiff
path: root/src
AgeCommit message (Collapse)Author
2018-03-11Fix bug when enum matched multiple typesTravis Finkenauer
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
2018-03-05Auto merge of #1268 - emilio:enum-replace, r=fitzgenbors-servo
ir: Allow replacing enums and enum variants. Fixes #1267.
2018-03-04Untry.Emilio Cobos Álvarez
Use the ? operator instead of try, and add some more uses of it on Option<> that were straight-forward.
2018-03-04ir: Allow renaming variants using the replaces="" annotation or a custom ↵Emilio Cobos Álvarez
callback.
2018-03-04ir: Allow replacing enums.Emilio Cobos Álvarez
2018-03-04codegen: Avoid &String.Emilio Cobos Álvarez
2018-02-26lib: Use #[deprecated] properly.Emilio Cobos Álvarez
Fixes #1258
2018-02-14Merge pull request #1256 from fitzgen/fix-missing-dylibs. r=emilioEmilio Cobos Álvarez
Fix missing dylibs
2018-02-14Revert "Bump quote to 0.4"Nick Fitzgerald
This reverts commit 6899c275ee0ab0687ec66c490ddd1a76f8223513. The `proc_macro2` crate depends on rustc internal crates, which means that `bindgen` would need to be run under `rustup`. We can follow https://github.com/rust-lang/rust/issues/47931 to get updates on when this issue might be resolved and we can update `quote` again. Fixes #1248
2018-02-14Check for more common C++ header file extensionsSander Maijers
Also, perform `clang` parameter check earlier. If that results in `is_cpp == true`, the later `|=` operations could be elided.
2018-02-13Merge pull request #1253 from Eijebong/log. r=emilioEmilio Cobos Álvarez
Update log to 0.4 and bump version
2018-02-13Update log to 0.4 and bump versionBastien Orivel
2018-02-12codegen: Expose variant comments.Emilio Cobos Álvarez
2018-02-04ir: Make macro constants not being architecture-dependent.Emilio Cobos Álvarez
Fixes #1185
2018-01-31Auto merge of #1243 - emilio:parse-callbacks, r=fitzgenbors-servo
callbacks: Introduce MacroParsingBehavior to allow ignoring macros. This is symmetric, yet less powerful, than enum_variant_behavior. Fixes #687.
2018-01-31callbacks: Introduce MacroParsingBehavior to allow ignoring macros.Emilio Cobos Álvarez
This is symmetric, yet less powerful, than enum_variant_behavior. Fixes #687.
2018-01-29Auto merge of #1241 - emilio:fwd-decl-no-fun, r=fitzgenbors-servo
codegen: Make forward declarations go through the more generic path. Instead of special-casing. This allows to use the normal flags to control what can be or not derived for them. Arguably deriving Copy / Clone is kind of busted for those, but changing this by default broke tests (RefPtr<ForwardDeclaredType> stopped working for example). So I think this is a good compromise. Fixes #1238
2018-01-29Auto merge of #1240 - emilio:virtual-dtor-fix, r=fitzgenbors-servo
ir: Choose the right mangling for destructors on all codepaths. Fixes #1133.
2018-01-29codegen: Make forward declarations go through the more generic path.Emilio Cobos Álvarez
Instead of special-casing. This allows to use the normal flags to control what can be or not derived for them. Arguably deriving Copy / Clone is kind of busted for those, but changing this by default broke tests (RefPtr<ForwardDeclaredType> stopped working for example). So I think this is a good compromise. Fixes #1238
2018-01-29ir: Choose the right mangling for destructors on all codepaths.Emilio Cobos Álvarez
Fixes #1133.
2018-01-29codegen: Make the cyclic typedef name detection catch more cases.Emilio Cobos Álvarez
By looking through typedefs, we also catch more complex cases like the ones that appear on Android's stdlib. Fixes #946
2018-01-27Support str as input to Builder::no_* functionsRyan Osial
Previously, only String was supported on these while other functions in Builder worked with both str and String
2018-01-26lib: Add a way to override rustfmt path.Emilio Cobos Álvarez
I'll need it to format some stuff on mozilla-central.
2018-01-23Bump quote to 0.4Bastien Orivel
2018-01-22codegen: Try to reasonably handle enum : bool.Emilio Cobos Álvarez
Just use the repr name we generate, since we generate constants for that. It's not worth trying to guess the actual type to use IMO. Bindings lose a bit of portability I guess, but that's really a lost bet already, so instead of special-casing bool and map constants, let's use a consistent representation everywhere. Fixes #1145
2018-01-19Auto merge of #1228 - emilio:repr-c-enums, r=fitzgenbors-servo
codegen: Don't generate repr(C) for enums. That's only undefined for enums with fields. Fixes #1224 See also: https://botbot.me/mozilla/rustc/2018-01-19/?msg=95934948&page=2
2018-01-19codegen: Don't generate repr(C) for enums.Emilio Cobos Álvarez
That's only undefined for enums with fields. Fixes #1224 See also: https://botbot.me/mozilla/rustc/2018-01-19/?msg=95934948&page=2
2018-01-19ir: Handle _Complex _Float128 correctly.cris-b
Unfortunately we can't test it for the same alignment issues that "long double" has. Fixes #1087
2018-01-16ir: Give more info for the non-floating type complex type message.Emilio Cobos Álvarez
2018-01-09Make CARGO_PKG_VERSION option_env!, rather than env!Alex McArther
2018-01-06codegen: Be consistent about variadic signatures.Emilio Cobos Álvarez
Fixes #1216.
2018-01-05Correct type for --whitelist-type docKornel
2018-01-02Auto merge of #1189 - nox:is-dir, r=fitzgenbors-servo
Use Metadata::is_dir
2018-01-01Revert to only calling plain rustfmtKobata
2017-12-29Don't generate symbols for pure virtual functions.Emilio Cobos Álvarez
Fixes #1197.
2017-12-14Auto merge of #1183 - fitzgen:repr-c-on-enums, r=emiliobors-servo
repr(C) on enums r? @pepyakin or @emilio
2017-12-12Always add `repr(C)` to rustified enumsNick Fitzgerald
If we don't, then eddyb's recent layout optimizations will do unexpected things to them. We also need to handle empty `enum`s without variants. When `repr(C)` is on a Rust `enum`, it cannot be empty, so we need to add a dummy.
2017-12-11Use Metadata::is_dirAnthony Ramine
2017-12-09Fix command_line_flags mis-generation of rust-target's flags.Manas Karekar
Expand tests for testing the rust-target flag generated by builder.
2017-12-03Move tokens method from TranslationUnit to CursorAnthony Ramine
This makes it easier to call it without passing around a TranslationUnit, which will prove itself useful to parse `__attribute__` nodes.
2017-11-27Properly handle namespaces for enum configuration optionsTamir Duberstein
...by using canonical_path rather than canonical_name. Fixes #1125.
2017-11-23Auto merge of #1158 - glyn:large-bitfield-units, r=emiliobors-servo
Support bitfield allocation units larger than 64 bits Individual bitfields are still limited to at most 64 bits, but this restriction can be weakened when Rust supports `u128`. This implements issue #816. Usage notes: * Since common code is added to each generated binding, a program which uses more than one binding may need to work around the duplication by including each binding in its own module. * The values created by bitfield allocation unit constructors can be assigned directly to the corresponding struct fields with no need for transmutation. Implementation notes: `__BindgenBitfieldUnit` represents a bitfield allocation unit using a `Storage` type accessible as a slice of `u8`. The alignment of the unit is inherited from an `Align` type by virtue of the field: ``` align: [Align; 0], ``` The position of this field in the struct is irrelevant. It is assumed that the alignment of the `Storage` type is no larger than the alignment of the `Align` type, which will be true if the `Storage` type is, for example, an array of `u8`. This assumption is checked in a debug assertion. Although the double underscore (__) prefix is reserved for implementations of C++, there are precedents for this convention elsewhere in bindgen and so the convention is adopted here too. Acknowledgement: Thanks to @fitzgen for an initial implementation of `__BindgenBitfieldUnit` and code to integrate it into bindgen. r? @emilio
2017-11-21Support bitfield allocation units larger than 64 bitsNick Fitzgerald
Individual bitfields are still limited to at most 64 bits, but this restriction can be weakened when Rust supports u128. This implements issue #816. Usage notes: * Since common code is added to each generated binding, a program which uses more than one binding may need to work around the duplication by including each binding in its own module. * The values created by bitfield allocation unit constructors can be assigned directly to the corresponding struct fields with no need for transmutation. Implementation notes: __BindgenBitfieldUnit represents a bitfield allocation unit using a Storage type accessible as a slice of u8. The alignment of the unit is inherited from an Align type by virtue of the field: align: [Align; 0], The position of this field in the struct is irrelevant. The alignment of the Storage type is intended to be no larger than the alignment of the Align type, which will be true if the Storage type is, for example, an array of u8. Although the double underscore (__) prefix is reserved for implementations of C++, there are precedents for this convention elsewhere in bindgen and so the convention is adopted here too. Acknowledgement: Thanks to @fitzgen for an initial implementation of __BindgenBitfieldUnit and code to integrate it into bindgen.
2017-11-18Generate ptr::null rather than zero literalTamir Duberstein
2017-11-13Avoid bitfield getters and setters accessing memory beyond "self"Glyn Normington
This fixes https://github.com/rust-lang-nursery/rust-bindgen/issues/954.
2017-11-10Remove unnecessary flag from rustfmt invocationroblabla
From rustfmt docs, the --write-mode flag is unecessary when passing the flag to stdin. If we leave it there, rustfmt-nightly complains that it cannot find the file named --write-mode, so let's remove the flag.
2017-11-10Don't unwrap header metadataseemyvest
2017-11-03Make bitfield unit allocation fallibleNick Fitzgerald
Instead of panicking when we see a bitfield that does not have a layout, return an error up the stack. If we get an error when allocating bitfields into units, then make the whole struct opaque. Fixes #1140
2017-11-02Detect `#pragma pack(...)` and make `pack(n)` where `n > 1` opaqueNick Fitzgerald
This is a bandaid for #537. It does *not* fix the underlying issue, which requires `#[repr(packed = "N")]` support in Rust. However, it does make sure that we don't generate type definitions with the wrong layout, or fail our generated layout tests.
2017-11-01"Alignment of field" -> "Offset of field"Nick Fitzgerald
It isn't checking alignment at all; it's checking offsets.