-
Notifications
You must be signed in to change notification settings - Fork 105
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[derive] Simplify code, remove obsolete features
Clean up the implementation, especially in `fn impl_block`. Make the following notable changes: - Previously, `syn` didn't support parsing macro invocations in const generics without the `full` feature enabled. To avoid the compile-time overhead of that feature, we worked around it by constructing AST nodes manually. `syn` has since added support for this without requiring the `full` feature, so we make use of it. - We used to need to split types into those that transatively depended upon type generics (like `[T; 2]`) and those that didn't (like `[u8; 2]`). We made a change in #119 that made this distinction irrelevant, but we never removed the code to perform the split. In this commit, we remove that code. That code was the only reason we needed to enable `syn`'s `visit` feature, so we are also able to remove that feature dependency.
- Loading branch information
Showing
4 changed files
with
208 additions
and
200 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,107 @@ | ||
error[E0277]: the trait bound `T: zerocopy::FromZeroes` is not satisfied | ||
--> tests/ui-stable/invalid-impls/invalid-impls.rs:22:37 | ||
| | ||
22 | impl_or_verify!(T => FromZeroes for Foo<T>); | ||
| ^^^^^^ the trait `zerocopy::FromZeroes` is not implemented for `T` | ||
| | ||
note: required for `Foo<T>` to implement `zerocopy::FromZeroes` | ||
--> tests/ui-stable/invalid-impls/invalid-impls.rs:18:10 | ||
| | ||
18 | #[derive(FromZeroes, FromBytes, AsBytes, Unaligned)] | ||
| ^^^^^^^^^^ unsatisfied trait bound introduced in this `derive` macro | ||
note: required by a bound in `_::Subtrait` | ||
--> tests/ui-stable/invalid-impls/../../../src/macros.rs | ||
| | ||
| trait Subtrait: $trait {} | ||
| ^^^^^^ required by this bound in `Subtrait` | ||
| | ||
::: tests/ui-stable/invalid-impls/invalid-impls.rs:22:1 | ||
| | ||
22 | impl_or_verify!(T => FromZeroes for Foo<T>); | ||
| ------------------------------------------- in this macro invocation | ||
= note: this error originates in the derive macro `FromZeroes` which comes from the expansion of the macro `impl_or_verify` (in Nightly builds, run with -Z macro-backtrace for more info) | ||
help: consider restricting type parameter `T` | ||
| | ||
22 | impl_or_verify!(T: zerocopy::FromZeroes => FromZeroes for Foo<T>); | ||
| ++++++++++++++++++++++ | ||
|
||
error[E0277]: the trait bound `T: zerocopy::FromBytes` is not satisfied | ||
--> tests/ui-stable/invalid-impls/invalid-impls.rs:23:36 | ||
| | ||
23 | impl_or_verify!(T => FromBytes for Foo<T>); | ||
| ^^^^^^ the trait `zerocopy::FromBytes` is not implemented for `T` | ||
| | ||
note: required for `Foo<T>` to implement `zerocopy::FromBytes` | ||
--> tests/ui-stable/invalid-impls/invalid-impls.rs:18:22 | ||
| | ||
18 | #[derive(FromZeroes, FromBytes, AsBytes, Unaligned)] | ||
| ^^^^^^^^^ unsatisfied trait bound introduced in this `derive` macro | ||
note: required by a bound in `_::Subtrait` | ||
--> tests/ui-stable/invalid-impls/../../../src/macros.rs | ||
| | ||
| trait Subtrait: $trait {} | ||
| ^^^^^^ required by this bound in `Subtrait` | ||
| | ||
::: tests/ui-stable/invalid-impls/invalid-impls.rs:23:1 | ||
| | ||
23 | impl_or_verify!(T => FromBytes for Foo<T>); | ||
| ------------------------------------------ in this macro invocation | ||
= note: this error originates in the derive macro `FromBytes` which comes from the expansion of the macro `impl_or_verify` (in Nightly builds, run with -Z macro-backtrace for more info) | ||
help: consider restricting type parameter `T` | ||
| | ||
23 | impl_or_verify!(T: zerocopy::FromBytes => FromBytes for Foo<T>); | ||
| +++++++++++++++++++++ | ||
|
||
error[E0277]: the trait bound `T: zerocopy::AsBytes` is not satisfied | ||
--> tests/ui-stable/invalid-impls/invalid-impls.rs:24:34 | ||
| | ||
24 | impl_or_verify!(T => AsBytes for Foo<T>); | ||
| ^^^^^^ the trait `zerocopy::AsBytes` is not implemented for `T` | ||
| | ||
note: required for `Foo<T>` to implement `zerocopy::AsBytes` | ||
--> tests/ui-stable/invalid-impls/invalid-impls.rs:18:33 | ||
| | ||
18 | #[derive(FromZeroes, FromBytes, AsBytes, Unaligned)] | ||
| ^^^^^^^ unsatisfied trait bound introduced in this `derive` macro | ||
note: required by a bound in `_::Subtrait` | ||
--> tests/ui-stable/invalid-impls/../../../src/macros.rs | ||
| | ||
| trait Subtrait: $trait {} | ||
| ^^^^^^ required by this bound in `Subtrait` | ||
| | ||
::: tests/ui-stable/invalid-impls/invalid-impls.rs:24:1 | ||
| | ||
24 | impl_or_verify!(T => AsBytes for Foo<T>); | ||
| ---------------------------------------- in this macro invocation | ||
= note: this error originates in the derive macro `AsBytes` which comes from the expansion of the macro `impl_or_verify` (in Nightly builds, run with -Z macro-backtrace for more info) | ||
help: consider restricting type parameter `T` | ||
| | ||
24 | impl_or_verify!(T: zerocopy::AsBytes => AsBytes for Foo<T>); | ||
| +++++++++++++++++++ | ||
|
||
error[E0277]: the trait bound `T: zerocopy::Unaligned` is not satisfied | ||
--> tests/ui-stable/invalid-impls/invalid-impls.rs:25:36 | ||
| | ||
25 | impl_or_verify!(T => Unaligned for Foo<T>); | ||
| ^^^^^^ the trait `zerocopy::Unaligned` is not implemented for `T` | ||
| | ||
note: required for `Foo<T>` to implement `zerocopy::Unaligned` | ||
--> tests/ui-stable/invalid-impls/invalid-impls.rs:18:42 | ||
| | ||
18 | #[derive(FromZeroes, FromBytes, AsBytes, Unaligned)] | ||
| ^^^^^^^^^ unsatisfied trait bound introduced in this `derive` macro | ||
note: required by a bound in `_::Subtrait` | ||
--> tests/ui-stable/invalid-impls/../../../src/macros.rs | ||
| | ||
| trait Subtrait: $trait {} | ||
| ^^^^^^ required by this bound in `Subtrait` | ||
| | ||
::: tests/ui-stable/invalid-impls/invalid-impls.rs:25:1 | ||
| | ||
25 | impl_or_verify!(T => Unaligned for Foo<T>); | ||
| ------------------------------------------ in this macro invocation | ||
= note: this error originates in the derive macro `Unaligned` which comes from the expansion of the macro `impl_or_verify` (in Nightly builds, run with -Z macro-backtrace for more info) | ||
help: consider restricting type parameter `T` | ||
| | ||
25 | impl_or_verify!(T: zerocopy::Unaligned => Unaligned for Foo<T>); | ||
| +++++++++++++++++++++ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.