Age | Commit message (Collapse) | Author |
|
When running all the test in parallel, all the memory on my laptop
is consumed by rustc processes, my machine become unusable and the
tests do not make progress.
It seems to make sense to have serial by default, as the number of
process depends on the number of test files.
|
|
|
|
|
|
Give vtables and anonymous items more stable generated names (fixes #60)
r? @emilio
This works pretty well. There are two remaining things in stylo's structs files that have identifiers that look like they won't be that stable: the anonymous enum for the NODE_* flags at the top level, and the `typedef union { ... } nsStyleUnion`. There are various anonymous enums and other things at the top level in system headers that cause these identifiers to have generated IDs in them higher than 1 and 2.
Probably for anonymous enums we could just avoid generating a rust enum altogether, since having the static consts should be sufficient. I tried to mess with the codegen to automatically treat `typedef union { ... } nsStyleUnion` like `union nsStyleUnion { ... }` but it seems the way clang exposes the typedef and union are as two adjacent cursors rather than a parent-child relationship, so it's not so easy.
|
|
|
|
Be able to represent Complex types with the correct layout.
r? @nox
|
|
Take pointer constness into account, to fix generation of const methods.
We signal method constness in the `this` pointer creating a `const` pointer, but the `to_rust_ty` implementation never checked that.
|
|
codegen: Generate constants names for unnamed enums in classes.
Fixes #84.
cc @upsuper, sorry for not doing it before, I totally forgot about it.
r? @fitzgen or @nox
|
|
|
|
|
|
This adds the ability for tests to supply required features, and if the
bindgen we're testing was not built with those features, then the test
will be skipped. The syntax used to require features is like this:
// bindgen-features: llvm_stable some_experiment another
|
|
Changes include:
* Using argparse for argument parsing. This will help when extending the
script to skip tests that will only pass when --features llvm_stable
is used to build bindgen.
* Pulling out all the various steps of the script into helper functions
that are easier to digest at a glance, and have docstrings describing
their role in the script.
* Printing diffs between expected and actual generated bindings rather
than the full source text of each.
|
|
Python style (PEP8) is 4 space indentation, and you'll be hard pressed
to find anything else in the python community. We should match up with
expectations, editor defaults, etc.
|
|
Fixes #51
|
|
exists
|
|
|
|
applicable before discarding them.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Signed-off-by: Emilio Cobos Álvarez <ecoal95@gmail.com>
|
|
|
|
This fixes union_with_nesting.h
|
|
|
|
|
|
|
|
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
|
|
|
|
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.
|
|
|
|
Add support for basic template unions.
Fixes #28.
r? @nox
cc @bholley
|
|
down the hack version.
|
|
by Rc<T>s
|
|
|
|
|
|
|
|
|
|
Fixes #22
|
|
|
|
|
|
|
|
They're tricky.
|
|
|
|
|
|
We generate them incorrectly anyways, but this way at least we're allowed to
compile it.
|