1fbf8fb32SBenno Lossin // SPDX-License-Identifier: Apache-2.0 OR MIT
2fbf8fb32SBenno Lossin
3d7659accSMiguel Ojeda // When fixdep scans this, it will find this string `CONFIG_RUSTC_VERSION_TEXT`
4d7659accSMiguel Ojeda // and thus add a dependency on `include/config/RUSTC_VERSION_TEXT`, which is
5d7659accSMiguel Ojeda // touched by Kconfig when the version string from the compiler changes.
6d7659accSMiguel Ojeda
7dbd5058bSBenno Lossin //! `pin-init` proc macros.
8dbd5058bSBenno Lossin
9dbd5058bSBenno Lossin #![cfg_attr(not(RUSTC_LINT_REASONS_IS_STABLE), feature(lint_reasons))]
107cb5dee4SBenno Lossin // Allow `.into()` to convert
117cb5dee4SBenno Lossin // - `proc_macro2::TokenStream` into `proc_macro::TokenStream` in the user-space version.
127cb5dee4SBenno Lossin // - `proc_macro::TokenStream` into `proc_macro::TokenStream` in the kernel version.
137cb5dee4SBenno Lossin // Clippy warns on this conversion, but it's required by the user-space version.
147cb5dee4SBenno Lossin //
157cb5dee4SBenno Lossin // Remove once we have `proc_macro2` in the kernel.
167cb5dee4SBenno Lossin #![allow(clippy::useless_conversion)]
17a9fa3a9cSBenno Lossin // Documentation is done in the pin-init crate instead.
18a9fa3a9cSBenno Lossin #![allow(missing_docs)]
19dbd5058bSBenno Lossin
20dbd5058bSBenno Lossin use proc_macro::TokenStream;
21dbd5058bSBenno Lossin
22dbd5058bSBenno Lossin #[cfg(kernel)]
23dbd5058bSBenno Lossin #[path = "../../../macros/quote.rs"]
24dbd5058bSBenno Lossin #[macro_use]
2531005209SBenno Lossin #[cfg_attr(not(kernel), rustfmt::skip)]
26dbd5058bSBenno Lossin mod quote;
277cb5dee4SBenno Lossin #[cfg(not(kernel))]
287cb5dee4SBenno Lossin #[macro_use]
297cb5dee4SBenno Lossin extern crate quote;
30dbd5058bSBenno Lossin
31dbd5058bSBenno Lossin mod helpers;
32dbd5058bSBenno Lossin mod pin_data;
33dbd5058bSBenno Lossin mod pinned_drop;
34dbd5058bSBenno Lossin mod zeroable;
35dbd5058bSBenno Lossin
36fbf8fb32SBenno Lossin #[proc_macro_attribute]
pin_data(inner: TokenStream, item: TokenStream) -> TokenStream37fbf8fb32SBenno Lossin pub fn pin_data(inner: TokenStream, item: TokenStream) -> TokenStream {
387cb5dee4SBenno Lossin pin_data::pin_data(inner.into(), item.into()).into()
39fbf8fb32SBenno Lossin }
40fbf8fb32SBenno Lossin
41fbf8fb32SBenno Lossin #[proc_macro_attribute]
pinned_drop(args: TokenStream, input: TokenStream) -> TokenStream42fbf8fb32SBenno Lossin pub fn pinned_drop(args: TokenStream, input: TokenStream) -> TokenStream {
437cb5dee4SBenno Lossin pinned_drop::pinned_drop(args.into(), input.into()).into()
44fbf8fb32SBenno Lossin }
45fbf8fb32SBenno Lossin
46fbf8fb32SBenno Lossin #[proc_macro_derive(Zeroable)]
derive_zeroable(input: TokenStream) -> TokenStream47fbf8fb32SBenno Lossin pub fn derive_zeroable(input: TokenStream) -> TokenStream {
487cb5dee4SBenno Lossin zeroable::derive(input.into()).into()
49fbf8fb32SBenno Lossin }
50*00fccd3eSBenno Lossin
51*00fccd3eSBenno Lossin #[proc_macro_derive(MaybeZeroable)]
maybe_derive_zeroable(input: TokenStream) -> TokenStream52*00fccd3eSBenno Lossin pub fn maybe_derive_zeroable(input: TokenStream) -> TokenStream {
53*00fccd3eSBenno Lossin zeroable::maybe_derive(input.into()).into()
54*00fccd3eSBenno Lossin }
55