proc_macro: Explicitly make everything !Send/Sync

This commit adds explicit imp blocks to ensure that all publicly exported types
(except simple enums) are not `Send` nor `Sync` in the `proc_macro` crate.

cc #38356
This commit is contained in:
Alex Crichton 2018-05-04 14:11:22 -07:00
parent 91db9dcf37
commit 3e0ed2fc05
1 changed files with 46 additions and 1 deletions

View File

@ -74,6 +74,11 @@ use syntax_pos::hygiene::Mark;
#[derive(Clone)]
pub struct TokenStream(tokenstream::TokenStream);
#[unstable(feature = "proc_macro", issue = "38356")]
impl !Send for TokenStream {}
#[unstable(feature = "proc_macro", issue = "38356")]
impl !Sync for TokenStream {}
/// Error returned from `TokenStream::from_str`.
#[stable(feature = "proc_macro_lib", since = "1.15.0")]
#[derive(Debug)]
@ -81,6 +86,11 @@ pub struct LexError {
_inner: (),
}
#[unstable(feature = "proc_macro", issue = "38356")]
impl !Send for LexError {}
#[unstable(feature = "proc_macro", issue = "38356")]
impl !Sync for LexError {}
impl TokenStream {
/// Returns an empty `TokenStream`.
#[unstable(feature = "proc_macro", issue = "38356")]
@ -231,6 +241,11 @@ pub fn quote_span(span: Span) -> TokenStream {
#[derive(Copy, Clone)]
pub struct Span(syntax_pos::Span);
#[unstable(feature = "proc_macro", issue = "38356")]
impl !Send for Span {}
#[unstable(feature = "proc_macro", issue = "38356")]
impl !Sync for Span {}
macro_rules! diagnostic_method {
($name:ident, $level:expr) => (
/// Create a new `Diagnostic` with the given `message` at the span
@ -363,6 +378,11 @@ pub struct LineColumn {
pub column: usize
}
#[unstable(feature = "proc_macro", issue = "38356")]
impl !Send for LineColumn {}
#[unstable(feature = "proc_macro", issue = "38356")]
impl !Sync for LineColumn {}
/// The source file of a given `Span`.
#[unstable(feature = "proc_macro", issue = "38356")]
#[derive(Clone)]
@ -393,7 +413,7 @@ impl SourceFile {
/// Returns `true` if this source file is a real source file, and not generated by an external
/// macro's expansion.
# [unstable(feature = "proc_macro", issue = "38356")]
#[unstable(feature = "proc_macro", issue = "38356")]
pub fn is_real(&self) -> bool {
// This is a hack until intercrate spans are implemented and we can have real source files
// for spans generated in external macros.
@ -450,6 +470,11 @@ pub enum TokenTree {
Literal(Literal),
}
#[unstable(feature = "proc_macro", issue = "38356")]
impl !Send for TokenTree {}
#[unstable(feature = "proc_macro", issue = "38356")]
impl !Sync for TokenTree {}
impl TokenTree {
/// Returns the span of this token, accessing the `span` method of each of
/// the internal tokens.
@ -546,6 +571,11 @@ pub struct Group {
span: Span,
}
#[unstable(feature = "proc_macro", issue = "38356")]
impl !Send for Group {}
#[unstable(feature = "proc_macro", issue = "38356")]
impl !Sync for Group {}
/// Describes how a sequence of token trees is delimited.
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
#[unstable(feature = "proc_macro", issue = "38356")]
@ -628,6 +658,11 @@ pub struct Op {
span: Span,
}
#[unstable(feature = "proc_macro", issue = "38356")]
impl !Send for Op {}
#[unstable(feature = "proc_macro", issue = "38356")]
impl !Sync for Op {}
/// Whether an `Op` is either followed immediately by another `Op` or followed by whitespace.
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
#[unstable(feature = "proc_macro", issue = "38356")]
@ -694,6 +729,11 @@ pub struct Term {
span: Span,
}
#[unstable(feature = "proc_macro", issue = "38356")]
impl !Send for Term {}
#[unstable(feature = "proc_macro", issue = "38356")]
impl !Sync for Term {}
impl Term {
/// Creates a new `Term` with the given `string` as well as the specified
/// `span`.
@ -752,6 +792,11 @@ pub struct Literal {
span: Span,
}
#[unstable(feature = "proc_macro", issue = "38356")]
impl !Send for Literal {}
#[unstable(feature = "proc_macro", issue = "38356")]
impl !Sync for Literal {}
macro_rules! suffixed_int_literals {
($($name:ident => $kind:ident,)*) => ($(
/// Creates a new suffixed integer literal with the specified value.