Age | Commit message (Collapse) | Author |
|
Resolve #962 - implement --no-copy with tests
Allows types to not have the copy trait automatically derived.
|
|
|
|
|
|
This fixes a couple bugs where we weren't properly adding an `_address`
byte. It also helps pave the way for computing implicit fields (such as padding,
`_address`, vtable pointers, etc) in its own pass, before codegen.
Fixes #768
|
|
generated bindings from test headers
|
|
|
|
|
|
We didn't previously handle this case until the `HasVtableAnalysis` was updated
to determine which items have explicit vtable pointers.
|
|
|
|
We were not checking signed-ness and emitting the appropriate types.
Fixes #1040
|
|
|
|
|
|
|
|
Emit hex bitfield masks
r? @fitzgen
|
|
|
|
Add support for the thiscall ABI
Fixes https://github.com/rust-lang-nursery/rust-bindgen/issues/541
The thiscall ABI is experimental, so in order to use it nightly is required and also the following statement:
`#![feature(abi_thiscall)]`
That's a problem because the `tests_expectations` crate (in the tests folder) tries to compile it (and stable is required).
|
|
Bitfields in unions
Fixes #744
I think it is WIP for the moment as I didn't run tests locally.
|
|
|
|
|
|
|
|
attribute
|
|
Also make impl_partialeq test to also cover impl_debug case.
|
|
|
|
|
|
|
|
|
|
Remove derive-partialeq-template-inst test.
Add comments.
Don't implement PartialEq for incomplete arrays
Handle opaque bases and template instantiations
Extract constrain_type.
Extract `is whitelisted?` check
Add failing partialeq-anonfield
join for comps
Fix: return insert if not whitelisted
Delegate TypeRefs and alias to constrain_join.
Delegate Template instantiations to constrain_join
Add derive-partialeq-pointer.hpp test
Update comment.
Fix layout alignment larger that array limit
Add missing test for derive-partialeq-anonfield.rs
Clean
Clean
Fix typo in opaque-template-inst-member test
Remove redudant stmt
Add comment on can_supersede.
Format impl_partialeq and leave a comment
Extract requires_storage into it's own function.
Clean
|
|
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
|
|
codegen: Avoid generating wrong type for enums with unknown representation
Fixes #1025
|
|
|
|
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.
|
|
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.
|
|
|
|
|
|
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
|
|
- [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
|
|
|
|
|
|
Also simplifies the logic that determines which enum variation gets chosen.
|
|
|
|
The latest `rustfmt` has fixed the formatting bugs we were running into.
|
|
|
|
|
|
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
|
|
|
|
Derive + blacklisted types
* [X] document blacklisting + derive interaction
* [X] derive `Copy`
* [X] derive `Debug`
* [X] `--impl-debug`
* [x] derive `Default`
* [x] derive `Hash`
* [x] derive `PartialEq`
|
|
Unions don't support deriving these things, even if there is only one
variant (the opaque layout field).
|
|
|
|
We already have a test for more complicated template instantiations and
blacklisting and their affects on deriving `Hash`, but it is good to have sanity
tests for the simple cases too.
|
|
|