summaryrefslogtreecommitdiff
path: root/src/codegen
AgeCommit message (Collapse)Author
2022-01-29Mark all vtable functions as `unsafe extern "C"`Justin Moore
2022-01-29On second thought, don't generate virtual destructorsDr. Chat
2022-01-29Mark all vtable functions as `pub`Dr. Chat
2022-01-29Account for virtual destructorsDr. Chat
2022-01-29Pass the vtable's base class as the first parameterDr. Chat
2022-01-29Extremely basic Vtable generationDr. Chat
2021-12-29codegen: Don't automatically derive Debug and Copy for non-rust enums.Emilio Cobos Álvarez
Fixes #2143
2021-11-26Drop 'static for pub const strings for rustc>1.17Alberto Planas
Constant and static declaration have a 'static live time by default, that is already elided since 1.17. Clippy complains on this kind of strings that are present in the generated code. This patch remove the 'static live time for those strings when rustc > 1.17 via a new added RustFeature. Fix #1612 Signed-off-by: Alberto Planas <aplanas@suse.com>
2021-11-26allow custom derives on enumsEric Seppanen
Custom derives are just as useful on enums as they are on structs; not supporting this was an oversight. Adds a test that will fail to compile if the custom derive doesn't work on enums. This test fails without the codegen fix.
2021-10-27Don't generate 2^64 byte padding fields on unionsTheodore Dubois
The --explicit-padding flag would make bindgen try to add tail padding to rust unions, by adding up the size of all the union fields and subtracting from the size of the union as given by clang. The total size of a union's fields is always larger than the union, so the subtraction underflowed and bindgen produced padding fields larger than addressable RAM.
2021-10-27Fix warningsMikuroXina
2021-08-24Use annotations on enumerations: This enables users to add additional ↵Christian Vetter
derives, or prevent deriving traits Fixes #2076
2021-07-31Also implement must-use-type for enums.Karel Peeters
2021-07-31Also implement div-style must_use_type annotation.Karel Peeters
2021-07-31Implement must_use_type commandline flag and builder option.Karel Peeters
2021-07-26codegen: Don't check large_arrays to generate bitfield ctors because they ↵Emilio Cobos Álvarez
use the Default trait. Fixes #2082
2021-07-16Let Rust derive everything but Default for large arrays in 1.47 and laterIan P. Cooke
Fixes #1977 as of rust-lang/rust#74060 is available since Rust 1.47 Fixes #2041. Closes #2070.
2021-07-16add custom derives callbackEric Seppanen
This callback allows us to specify arbitrary derive attributes for each named struct. This is useful for adding things that can't easily be implemented separately, such as `serde::Deserialize` or `zerocopy::FromBytes`.
2021-07-16Allow explicit padding (#2060)Eric Seppanen
If a struct needs to be serialized in its native format (padding bytes and all), for example writing it to a file or sending it on the network, then explicit padding fields are necessary, as anything reading the padding bytes of a struct may lead to Undefined Behavior.
2021-05-11Zero out padding in custom Default trait implementations (#2051)Daniel Xu
* Zero out padding in custom Default trait implementations Previously, we were using `std::mem::zeroed()` which unfortunately does not necessarily zero out padding. It'd be better if the padding is zeroed out because some libraries are sensitive to non-zero'd out bytes, especially when forward/backward compatability is involved. This commit ensures all bytes are zeroed out in custom Default trait implementations.
2021-04-24Support emitting Makefile-syntax depfiles like gcc/clang/rustc.Adam Perry
Needed to auto-bindgen with a ninja build without the build graph going stale.
2021-04-11Fix docstring comment for constantsNico Chatzi
2021-04-03codegen: Deal with overloads in method code generation.Emilio Cobos Álvarez
Fixes #2019
2021-04-03codegen: Don't use a `sym` temporary in dynamic library code.Emilio Cobos Álvarez
Fixes #2014.
2021-04-03remove old commentDr. Chat
2021-04-03Deduplicate dyngen codeDr. Chat
2021-04-03Remove `DynamicItems::has_required`Dr. Chat
2021-04-03Add a flag to ensure all symbols are resolved when a library is loadedDr. Chat
2021-03-22Add from_library for generated dynamic library structs (#2011)Wang, Chi
2021-03-14Add option to translate enum integer types to native Rust integer typesJethro Beekman
Fixes #430
2021-02-18Rename whitelist -> allowlist and blacklist -> blocklistMarcel Hlopko
For the commandline arguments I added undocumented aliases to old flags, to stay backwards compatible.
2021-02-07codegen: Track union layout more accurately.Emilio Cobos Álvarez
Instead of always generating the _bindgen_union_align method (which shouldn't be needed at all for Rust structs, since the struct layout tracker already deals with adding repr(align) as necessary) make sure to visit all fields appropriately to generate the correct alignment.
2021-01-29Generate fields as non-pub if they would be access restricted in C++.Weston Carvalho
2020-12-20comp: Fix bitfields to allow underaligned fields after them to take padding ↵Emilio Cobos Álvarez
space. Fixes #1947. There are two separate issues here: First, the change in comp.rs ensures that we don't round up the amount of storage to the alignment of the bitfield. That generates the "expected" output in #1947 (`__BindgenBitfieldUnit<[u8; 3], u16>`). But that's still not enough to fix that test-case because __BindgenBitfieldUnit would be aligned and have padding, and Rust won't put the extra field in the padding. In order to ensure the bitfield starts at the right alignment, but that Rust can put stuff in the extra field, we need to make a breaking change and split the generated fields in two: One preceding that guarantees alignment, and the actual storage, bit-aligned. This keeps the existing behavior while fixing that test-case.
2020-12-02dyngen: Pass null-terminated byte strings to libloading.Emilio Cobos Álvarez
Fixes #1938.
2020-11-28struct_layout: Fix field offset computation for packed(n) structs.Emilio Cobos Álvarez
This can cause unnecessary padding to be computed otherwise at the end of the struct. With repr(packed(n)), a field can have padding to adjacent fields as long as its alignment is less than n. So reuse the code we have to align to a field layout, aligning to the struct layout instead. Fixes #1934
2020-11-26Add --no-default <regex> flagVarphone Wong
Sometimes, we need customize the implement of `Default` for certain types, In these cases, the `nodefault` annotation can be used to prevent bindgen to autoderive the `Default` traits for a type.
2020-11-25dyngen: Handle variadic functions.Emilio Cobos Álvarez
Right now trying to generate a dynamic library with variadic functions panics because we don't account for the extra `...` in the arguments. Keeping the current interface for variadic functions is tricky, as we cannot "wrap" a variadic function (VaList[1] is nightly-only). However, we don't need to. We're already exposing the libloading error, so exposing the function pointer field as public is just fine and allows consumers to call the variadic function. At that point the can_call() / CheckFoo libraries become pointless (you can just do library.function.is_ok() or such), so we can simplify the code as well removing those. [1]: https://doc.rust-lang.org/std/ffi/struct.VaList.html
2020-11-25codegen: Minor nits for dynamic function generation.Emilio Cobos Álvarez
2020-11-25Add dynamic loading supportJoe Ellis
Closes #1541. Closes #1846. Co-authored-by: Michael-F-Bryan <michaelfbryan@gmail.com>
2020-10-16codegen: Allow to not derive Debug on enums.Emilio Cobos Álvarez
Fixes #1899. This code predated all the derive machinery, and always hardcoded its derives. We could avoid hard-coding the other traits, but those seem usually-useful, so leave them there for backwards compat for now.
2020-09-16codegen: Use shorthand struct initialization when possible.Emilio Cobos Álvarez
2020-09-16codegen: Deindent a bit some recently-introduced objective-c code.Emilio Cobos Álvarez
2020-09-16Updates for CISebastian Imlay
2020-09-16Updates from PR commentsSebastian Imlay
2020-09-16ran cargo fmtSebastian Imlay
2020-09-16Updates base on commentsSebastian Imlay
* Added TryInto trait implementation from parent to child interfaces. * Added HashSet for protocols so that the protocol inheritance works as well.
2020-09-16Initial stuff for changing ownership and adding inheritanceSebastian Imlay
2020-08-29codegen: Use shorthand initialization in VTable::new.Emilio Cobos Álvarez
2020-08-25codegen: Do generate unnamed enums, as they can be referred to by members.Emilio Cobos Álvarez
Fixes #1880