1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- use proc_macro2::{
- Delimiter, Group, Ident, LexError, Literal, Punct, Spacing, Span, TokenStream, TokenTree,
- };
- macro_rules! assert_impl {
- ($ty:ident is $($marker:ident) and +) => {
- #[test]
- #[allow(non_snake_case)]
- fn $ty() {
- fn assert_implemented<T: $($marker +)+>() {}
- assert_implemented::<$ty>();
- }
- };
- ($ty:ident is not $($marker:ident) or +) => {
- #[test]
- #[allow(non_snake_case)]
- fn $ty() {
- $(
- {
- // Implemented for types that implement $marker.
- trait IsNotImplemented {
- fn assert_not_implemented() {}
- }
- impl<T: $marker> IsNotImplemented for T {}
- // Implemented for the type being tested.
- trait IsImplemented {
- fn assert_not_implemented() {}
- }
- impl IsImplemented for $ty {}
- // If $ty does not implement $marker, there is no ambiguity
- // in the following trait method call.
- <$ty>::assert_not_implemented();
- }
- )+
- }
- };
- }
- assert_impl!(Delimiter is Send and Sync);
- assert_impl!(Spacing is Send and Sync);
- assert_impl!(Group is not Send or Sync);
- assert_impl!(Ident is not Send or Sync);
- assert_impl!(LexError is not Send or Sync);
- assert_impl!(Literal is not Send or Sync);
- assert_impl!(Punct is not Send or Sync);
- assert_impl!(Span is not Send or Sync);
- assert_impl!(TokenStream is not Send or Sync);
- assert_impl!(TokenTree is not Send or Sync);
- #[cfg(procmacro2_semver_exempt)]
- mod semver_exempt {
- use proc_macro2::{LineColumn, SourceFile};
- assert_impl!(LineColumn is Send and Sync);
- assert_impl!(SourceFile is not Send or Sync);
- }
- #[cfg(not(no_libprocmacro_unwind_safe))]
- mod unwind_safe {
- use proc_macro2::{
- Delimiter, Group, Ident, LexError, Literal, Punct, Spacing, Span, TokenStream, TokenTree,
- };
- #[cfg(procmacro2_semver_exempt)]
- use proc_macro2::{LineColumn, SourceFile};
- use std::panic::{RefUnwindSafe, UnwindSafe};
- macro_rules! assert_unwind_safe {
- ($($types:ident)*) => {
- $(
- assert_impl!($types is UnwindSafe and RefUnwindSafe);
- )*
- };
- }
- assert_unwind_safe! {
- Delimiter
- Group
- Ident
- LexError
- Literal
- Punct
- Spacing
- Span
- TokenStream
- TokenTree
- }
- #[cfg(procmacro2_semver_exempt)]
- assert_unwind_safe! {
- LineColumn
- SourceFile
- }
- }
|