Short circuit Send and Sync impls for TokenTree
This commit is contained in:
parent
be10e6277b
commit
3ed05613ee
@ -49,6 +49,28 @@ pub enum TokenTree {
|
||||
Delimited(DelimSpan, DelimToken, TokenStream),
|
||||
}
|
||||
|
||||
// Ensure all fields of `TokenTree` is `Send` and `Sync`.
|
||||
#[cfg(parallel_compiler)]
|
||||
fn _dummy()
|
||||
where
|
||||
Span: Send + Sync,
|
||||
token::Token: Send + Sync,
|
||||
DelimSpan: Send + Sync,
|
||||
DelimToken: Send + Sync,
|
||||
TokenStream: Send + Sync,
|
||||
{}
|
||||
|
||||
// These are safe since we ensure that they hold for all fields in the `_dummy` function.
|
||||
//
|
||||
// These impls are only here because the compiler takes forever to compute the Send and Sync
|
||||
// bounds without them.
|
||||
// FIXME: Remove these impls when the compiler can compute the bounds quickly again.
|
||||
// See https://github.com/rust-lang/rust/issues/60846
|
||||
#[cfg(parallel_compiler)]
|
||||
unsafe impl Send for TokenTree {}
|
||||
#[cfg(parallel_compiler)]
|
||||
unsafe impl Sync for TokenTree {}
|
||||
|
||||
impl TokenTree {
|
||||
/// Use this token tree as a matcher to parse given tts.
|
||||
pub fn parse(cx: &base::ExtCtxt<'_>, mtch: &[quoted::TokenTree], tts: TokenStream)
|
||||
|
Loading…
x
Reference in New Issue
Block a user