diff --git a/Cargo.toml b/Cargo.toml index 4630c184..8c242eba 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -27,3 +27,6 @@ unicode-xid = "0.1" # When disabled: emulate the same API as the nightly compiler's proc_macro crate # but in a way that works on all stable compilers >=1.15.0. nightly = [] + +proc-macro = [] +default = ["proc-macro"] diff --git a/src/lib.rs b/src/lib.rs index d08988c0..31ba7654 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -28,6 +28,7 @@ #![cfg_attr(feature = "nightly", feature(proc_macro))] +#[cfg(feature = "proc-macro")] extern crate proc_macro; #[cfg(not(feature = "nightly"))] @@ -67,12 +68,14 @@ impl FromStr for TokenStream { } } +#[cfg(feature = "proc-macro")] impl From for TokenStream { fn from(inner: proc_macro::TokenStream) -> TokenStream { TokenStream(inner.into()) } } +#[cfg(feature = "proc-macro")] impl From for proc_macro::TokenStream { fn from(inner: TokenStream) -> proc_macro::TokenStream { inner.0.into() @@ -175,7 +178,7 @@ impl Span { } /// This method is only available when the `"nightly"` feature is enabled. - #[cfg(feature = "nightly")] + #[cfg(all(feature = "nightly", feature = "proc-macro"))] pub fn unstable(self) -> proc_macro::Span { self.0.unstable() } diff --git a/src/stable.rs b/src/stable.rs index 41a7c4b3..54210600 100644 --- a/src/stable.rs +++ b/src/stable.rs @@ -11,7 +11,6 @@ use std::rc::Rc; use std::str::FromStr; use std::vec; -use proc_macro; use unicode_xid::UnicodeXID; use strnom::{Cursor, PResult, skip_whitespace, block_comment, whitespace, word_break}; @@ -120,14 +119,16 @@ impl fmt::Display for TokenStream { } } -impl From for TokenStream { - fn from(inner: proc_macro::TokenStream) -> TokenStream { +#[cfg(feature = "proc-macro")] +impl From<::proc_macro::TokenStream> for TokenStream { + fn from(inner: ::proc_macro::TokenStream) -> TokenStream { inner.to_string().parse().expect("compiler token stream parse failed") } } -impl From for proc_macro::TokenStream { - fn from(inner: TokenStream) -> proc_macro::TokenStream { +#[cfg(feature = "proc-macro")] +impl From for ::proc_macro::TokenStream { + fn from(inner: TokenStream) -> ::proc_macro::TokenStream { inner.to_string().parse().expect("failed to parse to compiler tokens") } }