about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2018-05-10 16:27:32 +0000
committerbors <bors@rust-lang.org>2018-05-10 16:27:32 +0000
commit9e3caa23f99816caf3c2fb69ff5c88b512fb1b38 (patch)
tree38b311241c6f301f34b1a7894e1cc0bda4519029 /src
parent0a223d139cd26e5bfab23a478a5cad845eaab131 (diff)
parent221b7ca3c27df5bb4729a7060e169c0a34dab9d0 (diff)
downloadrust-9e3caa23f99816caf3c2fb69ff5c88b512fb1b38.tar.gz
rust-9e3caa23f99816caf3c2fb69ff5c88b512fb1b38.zip
Auto merge of #49823 - Zoxc:term-str, r=alexcrichton
Remove usages of Term::as_str and mark it for removal

Returning references to rustc internal data structures is a bad idea since their lifetimes are unrelated to the lifetimes of proc_macro values.

See https://github.com/rust-lang/rust/pull/46972 and the `Taming thread-local storage` section of https://internals.rust-lang.org/t/parallelizing-rustc-using-rayon/6606

r? @alexcrichton
Diffstat (limited to 'src')
-rw-r--r--src/libproc_macro/lib.rs5
-rw-r--r--src/libproc_macro/quote.rs2
-rw-r--r--src/test/compile-fail-fulldeps/proc-macro/auxiliary/attributes-included.rs6
-rw-r--r--src/test/run-pass-fulldeps/auxiliary/cond_plugin.rs2
4 files changed, 8 insertions, 7 deletions
diff --git a/src/libproc_macro/lib.rs b/src/libproc_macro/lib.rs
index 8451e5987e9..c55df9b39b8 100644
--- a/src/libproc_macro/lib.rs
+++ b/src/libproc_macro/lib.rs
@@ -755,6 +755,7 @@ impl Term {
         }
     }
 
+    // FIXME: Remove this, do not stabilize
     /// Get a reference to the interned string.
     #[unstable(feature = "proc_macro", issue = "38356")]
     pub fn as_str(&self) -> &str {
@@ -779,7 +780,7 @@ impl Term {
 #[unstable(feature = "proc_macro", issue = "38356")]
 impl fmt::Display for Term {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-        self.as_str().fmt(f)
+        self.sym.as_str().fmt(f)
     }
 }
 
@@ -1176,7 +1177,7 @@ impl TokenTree {
             },
             self::TokenTree::Term(tt) => {
                 let ident = ast::Ident::new(tt.sym, tt.span.0);
-                let sym_str = tt.sym.as_str();
+                let sym_str = tt.sym.to_string();
                 let token = if sym_str.starts_with("'") {
                     Lifetime(ident)
                 } else if sym_str.starts_with("r#") {
diff --git a/src/libproc_macro/quote.rs b/src/libproc_macro/quote.rs
index d1f8e75192a..70f0b078399 100644
--- a/src/libproc_macro/quote.rs
+++ b/src/libproc_macro/quote.rs
@@ -183,7 +183,7 @@ impl Quote for Op {
 
 impl Quote for Term {
     fn quote(self) -> TokenStream {
-        quote!(::Term::new((quote self.as_str()), (quote self.span())))
+        quote!(::Term::new((quote self.sym.as_str()), (quote self.span())))
     }
 }
 
diff --git a/src/test/compile-fail-fulldeps/proc-macro/auxiliary/attributes-included.rs b/src/test/compile-fail-fulldeps/proc-macro/auxiliary/attributes-included.rs
index bbfec5815ba..6b34ccc6543 100644
--- a/src/test/compile-fail-fulldeps/proc-macro/auxiliary/attributes-included.rs
+++ b/src/test/compile-fail-fulldeps/proc-macro/auxiliary/attributes-included.rs
@@ -86,7 +86,7 @@ fn assert_doc(slice: &mut &[TokenTree]) {
     }
 
     match &tokens[0] {
-        TokenTree::Term(tt) => assert_eq!("doc", tt.as_str()),
+        TokenTree::Term(tt) => assert_eq!("doc", &*tt.to_string()),
         _ => panic!("expected `doc`"),
     }
     match &tokens[1] {
@@ -118,11 +118,11 @@ fn assert_invoc(slice: &mut &[TokenTree]) {
 
 fn assert_foo(slice: &mut &[TokenTree]) {
     match &slice[0] {
-        TokenTree::Term(tt) => assert_eq!(tt.as_str(), "fn"),
+        TokenTree::Term(tt) => assert_eq!(&*tt.to_string(), "fn"),
         _ => panic!("expected fn"),
     }
     match &slice[1] {
-        TokenTree::Term(tt) => assert_eq!(tt.as_str(), "foo"),
+        TokenTree::Term(tt) => assert_eq!(&*tt.to_string(), "foo"),
         _ => panic!("expected foo"),
     }
     match &slice[2] {
diff --git a/src/test/run-pass-fulldeps/auxiliary/cond_plugin.rs b/src/test/run-pass-fulldeps/auxiliary/cond_plugin.rs
index 9e1ae59c01b..de26f8296e3 100644
--- a/src/test/run-pass-fulldeps/auxiliary/cond_plugin.rs
+++ b/src/test/run-pass-fulldeps/auxiliary/cond_plugin.rs
@@ -33,7 +33,7 @@ pub fn cond(input: TokenStream) -> TokenStream {
             panic!("Invalid macro usage in cond: {}", cond);
         }
         let is_else = match test {
-            TokenTree::Term(word) => word.as_str() == "else",
+            TokenTree::Term(word) => &*word.to_string() == "else",
             _ => false,
         };
         conds.push(if is_else || input.peek().is_none() {