summaryrefslogtreecommitdiff
path: root/src
AgeCommit message (Collapse)Author
2016-10-18ir: Handle templated aliases.Emilio Cobos Álvarez
2016-10-18clangll: Add missing cursor types.Emilio Cobos Álvarez
2016-10-18Auto merge of #82 - emilio:double-replace, r=noxbors-servo
item: Consider replaced items hidden. Fixes #81 r? @nox
2016-10-17Removed TypeResolvermgjc
2016-10-13item: Consider replaced items hidden.Emilio Cobos Álvarez
2016-10-12Be consistent with blank lines in USAGENick Fitzgerald
Most flags have a blank line between them, but some did not. Now they all do.
2016-10-12Remove the --allow-unknown-types flag from USAGENick Fitzgerald
The flag is no longer used since the bindgen rewrite.
2016-10-08Avoid spurious allocations, thanks to @emilioJeff Waugh
2016-10-08Builder::whitelisted_type()Jeff Waugh
2016-10-08Builder::whitelisted_var()Jeff Waugh
2016-10-08Builder::whitelisted_function()Jeff Waugh
2016-10-07Fix lifetime issues with buildgen::builder()Jeff Waugh
I switched to the consuming builder pattern, as that seemed the easiest, and ditched the phantom markers while I was at it.
2016-10-03Parse negative integers appropriatelyRavi Shankar
2016-10-02Be able to represent Complex types with the correct layout.Emilio Cobos Álvarez
2016-10-02Stub Vector types with arrays.Emilio Cobos Álvarez
2016-09-29Avoid mangling name for tpl class member. Fix #68Xidorn Quan
2016-09-27Take pointer constness into account, to fix generation of const methods.Emilio Cobos Álvarez
2016-09-26Fix review comment. Fix #47Jean-Philippe DUFRAIGNE
2016-09-25Handle re-declaration of a global variable. Fix #48Jean-Philippe DUFRAIGNE
2016-09-23Use the upstreamed version of the array builder.Emilio Cobos Álvarez
2016-09-23Union support.Emilio Cobos Álvarez
2016-09-22Represent block pointers as *mut c_void instead.Emilio Cobos Álvarez
Signed-off-by: Emilio Cobos Álvarez <ecoal95@gmail.com>
2016-09-21Index unnamed types by canonical declaration.Emilio Cobos Álvarez
This fixes union_with_nesting.h
2016-09-21Add Int128 types.Emilio Cobos Álvarez
2016-09-21Some fixes for function pointers, typedefs, and OSX's stdlib.h.Emilio Cobos Álvarez
2016-09-16Back out docopt.Emilio Cobos Álvarez
2016-09-16Rewrite the core of the binding generator.Emilio Cobos Álvarez
TL;DR: The binding generator is a mess as of right now. At first it was funny (in a "this is challenging" sense) to improve on it, but this is not sustainable. The truth is that the current architecture of the binding generator is a huge pile of hacks, so these few days I've been working on rewriting it with a few goals. 1) Have the hacks as contained and identified as possible. They're sometimes needed because how clang exposes the AST, but ideally those hacks are well identified and don't interact randomly with each others. As an example, in the current bindgen when scanning the parameters of a function that references a struct clones all the struct information, then if the struct name changes (because we mangle it), everything breaks. 2) Support extending the bindgen output without having to deal with clang. The way I'm aiming to do this is separating completely the parsing stage from the code generation one, and providing a single id for each item the binding generator provides. 3) No more random mutation of the internal representation from anywhere. That means no more Rc<RefCell<T>>, no more random circular references, no more borrow_state... nothing. 4) No more deduplication of declarations before code generation. Current bindgen has a stage, called `tag_dup_decl`[1], that takes care of deduplicating declarations. That's completely buggy, and for C++ it's a complete mess, since we YOLO modify the world. I've managed to take rid of this using the clang canonical declaration, and the definition, to avoid scanning any type/item twice. 5) Code generation should not modify any internal data structure. It can lookup things, traverse whatever it needs, but not modifying randomly. 6) Each item should have a canonical name, and a single source of mangling logic, and that should be computed from the inmutable state, at code generation. I've put a few canonical_name stuff in the code generation phase, but it's still not complete, and should change if I implement namespaces. Improvements pending until this can land: 1) Add support for missing core stuff, mainly generating functions (note that we parse the signatures for types correctly though), bitfields, generating C++ methods. 2) Add support for the necessary features that were added to work around some C++ pitfalls, like opaque types, etc... 3) Add support for the sugar that Manish added recently. 4) Optionally (and I guess this can land without it, because basically nobody uses it since it's so buggy), bring back namespace support. These are not completely trivial, but I think I can do them quite easily with the current architecture. I'm putting the current state of affairs here as a request for comments... Any thoughts? Note that there are still a few smells I want to eventually re-redesign, like the ParseError::Recurse thing, but until that happens I'm way happier with this kind of architecture. I'm keeping the old `parser.rs` and `gen.rs` in tree just for reference while I code, but they will go away. [1]: https://github.com/Yamakaky/rust-bindgen/blob/master/src/gen.rs#L448
2016-09-07Don't add -isystem header args when --target is specifiedVladimir Vukicevic
2016-09-07Only strip the prefix _ on macos; windows needs it on gnu as wellVladimir Vukicevic
2016-09-01Deduplicate names of virtual overloaded methods. Fix #48Simon Sapin
2016-08-30Append the input header to the end of the clang args, instead of the frontNick Fitzgerald
2016-08-26Use docopt for argument parsingNick Fitzgerald
This commit switches bindgen over to using the docopt crate for argument parsing instead of manual argument parsing. This required two notable changes in the arguments and flags style: 1. All flags of the form `-foo` are now of the form `--foo`. 2. We can no longer pass unknown flags straight through to clang. Instead, the user appends `--` after the bindgen flags and input header, after which point any more flags and arguments get collected and passed to clang. This required changes to the test runner and the `// bindgen-flags` comments.
2016-08-19Allow blacklist typedef.Xidorn Quan
2016-08-16types: Don't avoid the destructor check when looking at unions.Emilio Cobos Álvarez
This is kind of unfortunate, but we weren't taking into account explicit destructors.
2016-08-15parser: If we find no declarations, check for primitive type before going ↵Emilio Cobos Álvarez
down the hack version.
2016-08-15types: Implement PartialEq in the Type trait looking at the values pointed ↵Emilio Cobos Álvarez
by Rc<T>s
2016-08-13Properly detect template<typename T> union ...Emilio Cobos Álvarez
2016-08-13Improve support for unions inside templated structs, or unions with template ↵Emilio Cobos Álvarez
parameters in general that don't use the template argument.
2016-08-13refactor: Take rid of CompMember::CompField, which was effectively dead ↵Emilio Cobos Álvarez
since I introduced support for anonymous structs.
2016-08-12Add ignore_methods to bindgenManish Goregaokar
2016-07-26Add support for 'unsafe fields'Manish Goregaokar
2016-07-21Avoid recursing infinitely with CRTP while looking for a destructor.Emilio Cobos Álvarez
Fixes #22
2016-07-18Check method_is_virtual and flag has_vtable before deciding whether to skip ↵Vladimir Vukicevic
method
2016-07-18Add explicit option for selecting MSVC manglingVladimir Vukicevic
There's no easy way to get the current target triple from the clang-c bindings. Make this simple and require an option to be passed when generating bindings for msvc, using the x86_64-pc-win32 target (or i686)
2016-07-18Support MSVC mangled names (which have @ symbols in them) when generating ↵Vladimir Vukicevic
bindings
2016-07-18Restrict the undo mangling hack to gnu targetXidorn Quan
This is not needed at least for Clang 3.9 (which is required to parse stdlib headers of MSVC 2015). This hack leads to incorrect mangling result there.
2016-07-15Normalize header path to use unix sepXidorn Quan
Otherwise it would be hard to write uniform blacklist header list across platforms, especially given that on Windows, some part of path could be using '/' while others use '\'.
2016-07-10Use aster and quasi to allow building with stable Rust.Emilio Cobos Álvarez
2016-07-10hack: Use a local clone of refcell to not depend on borrow_stateEmilio Cobos Álvarez
This is the same that we do in components/style in servo.
2016-07-05parser: Simplify macro-parsing logic.Emilio Cobos Álvarez