//! a different thread.
// Proc-macro2 types in rustdoc of other crates get linked to here.
-#![doc(html_root_url = "https://docs.rs/proc-macro2/1.0.19")]
+#![doc(html_root_url = "https://docs.rs/proc-macro2/1.0.21")]
#![cfg_attr(any(proc_macro_span, super_unstable), feature(proc_macro_span))]
#![cfg_attr(super_unstable, feature(proc_macro_raw_ident, proc_macro_def_site))]
#![allow(clippy::needless_doctest_main)]
#[cfg(use_proc_macro)]
extern crate proc_macro;
-use std::cmp::Ordering;
-use std::fmt::{self, Debug, Display};
-use std::hash::{Hash, Hasher};
-use std::iter::FromIterator;
-use std::marker;
-use std::ops::RangeBounds;
-#[cfg(procmacro2_semver_exempt)]
-use std::path::PathBuf;
-use std::rc::Rc;
-use std::str::FromStr;
-
+mod marker;
mod parse;
#[cfg(wrap_proc_macro)]
#[cfg(wrap_proc_macro)]
mod imp;
+use crate::marker::Marker;
+use std::cmp::Ordering;
+use std::fmt::{self, Debug, Display};
+use std::hash::{Hash, Hasher};
+use std::iter::FromIterator;
+use std::ops::RangeBounds;
+#[cfg(procmacro2_semver_exempt)]
+use std::path::PathBuf;
+use std::str::FromStr;
+
/// An abstract stream of tokens, or more concretely a sequence of token trees.
///
/// This type provides interfaces for iterating over token trees and for
#[derive(Clone)]
pub struct TokenStream {
inner: imp::TokenStream,
- _marker: marker::PhantomData<Rc<()>>,
+ _marker: Marker,
}
/// Error returned from `TokenStream::from_str`.
pub struct LexError {
inner: imp::LexError,
- _marker: marker::PhantomData<Rc<()>>,
+ _marker: Marker,
}
impl TokenStream {
fn _new(inner: imp::TokenStream) -> TokenStream {
TokenStream {
inner,
- _marker: marker::PhantomData,
+ _marker: Marker,
}
}
fn _new_stable(inner: fallback::TokenStream) -> TokenStream {
TokenStream {
inner: inner.into(),
- _marker: marker::PhantomData,
+ _marker: Marker,
}
}
fn from_str(src: &str) -> Result<TokenStream, LexError> {
let e = src.parse().map_err(|e| LexError {
inner: e,
- _marker: marker::PhantomData,
+ _marker: Marker,
})?;
Ok(TokenStream::_new(e))
}
#[derive(Clone, PartialEq, Eq)]
pub struct SourceFile {
inner: imp::SourceFile,
- _marker: marker::PhantomData<Rc<()>>,
+ _marker: Marker,
}
#[cfg(procmacro2_semver_exempt)]
fn _new(inner: imp::SourceFile) -> Self {
SourceFile {
inner,
- _marker: marker::PhantomData,
+ _marker: Marker,
}
}
#[derive(Copy, Clone)]
pub struct Span {
inner: imp::Span,
- _marker: marker::PhantomData<Rc<()>>,
+ _marker: Marker,
}
impl Span {
fn _new(inner: imp::Span) -> Span {
Span {
inner,
- _marker: marker::PhantomData,
+ _marker: Marker,
}
}
fn _new_stable(inner: fallback::Span) -> Span {
Span {
inner: inner.into(),
- _marker: marker::PhantomData,
+ _marker: Marker,
}
}
#[derive(Clone)]
pub struct Ident {
inner: imp::Ident,
- _marker: marker::PhantomData<Rc<()>>,
+ _marker: Marker,
}
impl Ident {
fn _new(inner: imp::Ident) -> Ident {
Ident {
inner,
- _marker: marker::PhantomData,
+ _marker: Marker,
}
}
#[derive(Clone)]
pub struct Literal {
inner: imp::Literal,
- _marker: marker::PhantomData<Rc<()>>,
+ _marker: Marker,
}
macro_rules! suffixed_int_literals {
fn _new(inner: imp::Literal) -> Literal {
Literal {
inner,
- _marker: marker::PhantomData,
+ _marker: Marker,
}
}
fn _new_stable(inner: fallback::Literal) -> Literal {
Literal {
inner: inner.into(),
- _marker: marker::PhantomData,
+ _marker: Marker,
}
}
/// Public implementation details for the `TokenStream` type, such as iterators.
pub mod token_stream {
+ use crate::marker::Marker;
use crate::{imp, TokenTree};
use std::fmt::{self, Debug};
- use std::marker;
- use std::rc::Rc;
pub use crate::TokenStream;
#[derive(Clone)]
pub struct IntoIter {
inner: imp::TokenTreeIter,
- _marker: marker::PhantomData<Rc<()>>,
+ _marker: Marker,
}
impl Iterator for IntoIter {
fn into_iter(self) -> IntoIter {
IntoIter {
inner: self.inner.into_iter(),
- _marker: marker::PhantomData,
+ _marker: Marker,
}
}
}