summaryrefslogtreecommitdiff
path: root/src
AgeCommit message (Collapse)Author
2017-10-02Introduce the `TypeId` newtype over `ItemId`Nick Fitzgerald
This commit also makes `BindgenContext::resolve_type` take a `TypeId`, and adds unchecked conversions everywhere that we call it. Next, I'm going to go through the code base, replacing these unchecked conversions with checked ones, and tightening up types as I go.
2017-09-29ir: Prefer using known semantic parentsNick Fitzgerald
When choosing a parent ID for a type that we are parsing, prefer known semantic parents over the provided parent ID. It seems like we shouldn't even be passing explicit parent IDs around (they're often buggy), and instead should expand the `known_semantic_parent` infrastructure, but I'll leave that to some future work. Fixes #1048
2017-09-25Auto merge of #1022 - harlanhaskins:rustfmt-by-default, r=fitzgenbors-servo
Enable --rustfmt-bindings by default This patch flips --rustfmt-bindings to --no-rustfmt-bindings and enables formatting by default. If rustfmt is not accessible, a warning is printed and the bindings are printed unformatted. Addresses #977.
2017-09-25Auto merge of #1030 - emilio:repr, r=fitzgenbors-servo
codegen: Avoid generating wrong type for enums with unknown representation Fixes #1025
2017-09-25Auto merge of #1031 - emilio:warn-stderr, r=fitzgenbors-servo
lib: Print warnings to stderr instead of stdout. Seems like the right thing to do, and allows me to test stuff piping to rustc instead of saving to a file.
2017-09-25Auto merge of #1026 - alexeyzab:fix-compiling-expectations-macos, r=fitzgenbors-servo
Make objc-related expectations compile Fixes #1004. After looking at how `msg_send!` is supposed to be used, I realized that we were erroneously passing type signatures to it. The expectations compile now, but some of them are not formatted properly. My guess is that `rustfmt` does not know how to format the following: ``` msg_send!(obj, arg1:1 arg2:2 arg3:3) ``` Notice the lack of separatros between the `arg`s. Any advice on how to proceed here is appreciated. r? @fitzgen
2017-09-25lib: Print warnings to stderr instead of stdout.Emilio Cobos Álvarez
2017-09-25codegen: Avoid generating wrong type for enums with unknown representations.Emilio Cobos Álvarez
2017-09-24Auto merge of #1005 - fitzgen:some-little-deriving-cleanups, r=emiliobors-servo
Some little deriving cleanups See each commit for details. r? @emilio
2017-09-23Make objc-related expectations compileAlexey Zabelin
WIP, fixes #1004. After looking at how `msg_send!` is supposed to be used, I realized that we were erroneously passing type signatures to it. The expectations compile now, but some of them are not formatted properly. My guess is that `rustfmt` does not know how to format the following: ``` msg_send!(obj, arg1:1 arg2:2 arg3:3) ``` Notice the lack of separatros between `arg`s.
2017-09-22Deanonymize fieldsSergey Pepyakin
Clean. Add timer. Clean codegen
2017-09-22Enable --rustfmt-bindings by defaultHarlan Haskins
This patch flips --rustfmt-bindings to --no-rustfmt-bindings and enables formatting by default. If rustfmt is not accessible, a warning is printed and the bindings are printed unformatted.
2017-09-22Auto merge of #1016 - pepyakin:impl-debug-fixes, r=fitzgenbors-servo
Impl_debug fixes r? @fitzgen
2017-09-22Fix condition in command_line_flags for impl_debugSergey Pepyakin
2017-09-22Rename derive_debug → impl_debug.Sergey Pepyakin
2017-09-22Generate base names upon constructon.Sergey Pepyakin
2017-09-21Auto merge of #1008 - AndrewGaspar:underscore-identifier, r=fitzgenbors-servo
Translate _ as __ This change treats _ as a reserved identifier to resolve the bug reported in #631. I have one concern - if the header has both an `_` and `__` identifier in the global namespace, this will cause a conflict. However, it seems like we already don't handle that case for `keyword_` (e.g. `abstract_`, `alignof_`, etc.) so it doesn't seem like we need a solution specifically for `__` in this change. Fixes #631.
2017-09-20Translate _ as __Andrew Gaspar
2017-09-20Clean up comments about the `Can[Trivially]Derive*` traitsNick Fitzgerald
The whole "should be a no-op" thing isn't really true for all of the traits, especially in the face of black listing. Also further expounded on the differences between the trivial versions and normal versions.
2017-09-20Common method for whether function pointers can trivially derive traitsNick Fitzgerald
Again, this logic was getting copied all over the place, and it is nice to have a single canonical definition.
2017-09-20Factor array size vs Rust derive limit checking into a common methodNick Fitzgerald
We were copying it around and it will be easier if it is defined in one place.
2017-09-20Clean up some derive-related commentsNick Fitzgerald
Changing "partialeq" and "partialord" into "`PartialEq`" and "`PartialOrd`" where it makes sense.
2017-09-19Add large bitfield derive test and fix missing limitOliver Geller
2017-09-19Ensure all derive analyses check array limit on bitfieldsOliver Geller
2017-09-19Auto merge of #996 - alexeyzab:add-no-partialeq-command, r=fitzgenbors-servo
Add --no-partialeq <regex> flag Related to #965. - [x] Add a new RegexSet member to bindgen::Builder (similar to the whitelisted_types set). - [x] A Builder method to add strings to that RegexSet. - [x] Plumbing in src/options.rs to convert --no-partialeq <regex> CLI flags into invocations of the builder method. - [x] Make the MonotoneFramework::constrain function in src/ir/analysis/derive_partialeq.rs check if the given item is explicitly marked not to be Partialeq, and if so, insert it into the self.cannot_derive_partialeq set via return self.insert(id). - [x] Tests! - [x] When the no-partialeq type is transitively referenced by a whitelisted item - [x] When the no-partialeq type is explicitly whitelisted - [x] When the no-partialeq type is marked opaque This is my first pass at implementing this functionality, I haven't implemented the tests yet. I wanted to make sure I am on the right track, particularly when it comes to updating `MonotoneFramework::constrain`. r? @fitzgen
2017-09-19Add --no-partialeq <regex> flagAlexey Zabelin
- [x] Add a new RegexSet member to bindgen::Builder (similar to the whitelisted_types set). - [x] A Builder method to add strings to that RegexSet. - [x] Plumbing in src/options.rs to convert --no-partialeq <regex> CLI flags into invocations of the builder method. - [x] Make the MonotoneFramework::constrain function in src/ir/analysis/derive_partialeq.rs check if the given item is explicitly marked not to be Partialeq, and if so, insert it into the self.cannot_derive_partialeq set via return self.insert(id). - [x] Tests! - [x] When the no-partialeq type is transitively referenced by a whitelisted item - [x] When the no-partialeq type is explicitly whitelisted - [x] When the no-partialeq type is marked opaque Fixes #965
2017-09-19Fix panic on has_float None unwrapSergey Pepyakin
2017-09-19Clean.Sergey Pepyakin
2017-09-19Derive Ord when possibleSergey Pepyakin
2017-09-19Rename deriver_partial_eq_or_partial_ord.Sergey Pepyakin
2017-09-19Emit derive(PartialOrd)Sergey Pepyakin
2017-09-19derive_partialord in BindgenOptions and BuilderSergey Pepyakin
2017-09-19DerivePartialEq → DerivePartialEqOrPartialOrdSergey Pepyakin
2017-09-18Make BindgenOptions privateSergey Pepyakin
2017-09-15Depreciate `Builder::whitelisted_type`.Trevor Reiff
Closes #987 Also, we were making a call to the now deprecated `Builder::hide_type`, changed that over to call `Builder::blacklist_type.
2017-09-14Auto merge of #991 - alexeyzab:add-builder-blacklist-type, r=fitzgenbors-servo
Add a `Builder::blacklist_type` This deprecates `Builder::hide_type`. Related to #984. - [x] Add Builder::blacklist_type, that does the same thing as hide_type - [x] Mark Builder::hide_type as #[deprecated = "Use blacklist_type instead"] - [x] Make hide_type delegate to blacklist_type - [x] Rename the BindgenOptions::hidden_types member to BindgenOptions::blacklisted_types - [x] Rename ir::context::BindgenContext::hidden_by_name to blacklisted_by_name - [x] Rename ir::item::Item::is_hidden to is_blacklisted r? @fitzgen
2017-09-14Auto merge of #990 - treiff:depreciate-whitelisted-function, r=fitzgenbors-servo
Depreciate whitelisted function. Closes #985 I also noticed a reference to `whitelisted_function` within the book, should this be updated as well? https://github.com/rust-lang-nursery/rust-bindgen/blob/a371de097f5e37eb01754525fb1e2029ca88b0be/book/src/whitelisting.md I've started to learn rust recently, so please let me know if there is anything I missed.
2017-09-14Add a `Builder::blacklist_type`Alexey Zabelin
This deprecates `Builder::hide_type`. Related to #984. - [x] Add Builder::blacklist_type, that does the same thing as hide_type - [x] Mark Builder::hide_type as #[deprecated = "Use blacklist_type instead"] - [x] Make hide_type delegate to blacklist_type - [x] Rename the BindgenOptions::hidden_types member to BindgenOptions::blacklisted_types - [x] Rename ir::context::BindgenContext::hidden_by_name to blacklisted_by_name - [x] Rename ir::item::Item::is_hidden to is_blacklisted
2017-09-14Depreciate whitelisted function.Trevor Reiff
Closes #985
2017-09-13Make whitelisted_var consistant with CLI flagsOliver Geller
2017-09-11Make bindgen generate enums as constants by defaultCldfire
Also simplifies the logic that determines which enum variation gets chosen.
2017-09-07Auto merge of #956 - ↵bors-servo
fitzgen:document-no-recursive-whitelist-will-break-code, r=emilio Document that not recursively whitelisting is dangerous See #949 for context and motivation. r? @emilio
2017-09-07Don't duplicate large comments; just reference them insteadNick Fitzgerald
2017-09-07Use the `quote!` macro for `link_name` attributesNick Fitzgerald
The latest `rustfmt` has fixed the formatting bugs we were running into.
2017-09-07Add a timer for rustfmt'ing the generated bindingsNick Fitzgerald
2017-09-07We can afford the exra cycles to use double precision floats hereNick Fitzgerald
;)
2017-09-07Fix units and formatting of time phasesNick Fitzgerald
Was previously printing seconds, but claiming it was milliseconds.
2017-09-07Use `quote` instead of `syntex` for Rust code generationNick Fitzgerald
The `syntex` crate is unmaintained. It is slow to build, and additionally it requires that we pre-process `src/codegen/mod.rs` before we build the `bindgen` crate. The `quote` crate provides similar quasi-quoting functionality, is maintained, and builds faster. It doesn't have a typed API or builders, however; it only deals with tokens. Before this commit: ``` $ cargo clean; cargo build <snip> Finished dev [unoptimized + debuginfo] target(s) in 98.75 secs ``` After this commit: ``` $ cargo clean; cargo build <snip> Finished dev [unoptimized + debuginfo] target(s) in 46.26 secs ``` Build time is cut in half! But what about run time? Before this commit: ``` Generated Stylo bindings in: Duration { secs: 3, nanos: 521105668 } ``` After this commit: ``` Generated Stylo bindings in: Duration { secs: 3, nanos: 548797242 } ``` So it appears to be about 20ms slower at generating Stylo bindings, but I suspect this is well within the noise. Finally, this also lets us remove that nasty `mem::transmute` inside `bindgen::ir::BindgenContext::gen` that was used for the old `syntex` context. Now `BindgenContext` doesn't have a lifetime parameter either. This should make it easier to revisit doing our analyses in parallel with `rayon`, since that context was one of the things that made it hard for `BindgenContext` to implement `Sync`. Fixes #925
2017-09-07Add the TypeKind name to the IR graphviz outputNick Fitzgerald
2017-09-07Document that not recursively whitelisting is dangerousNick Fitzgerald
See #949 for context and motivation.