about summary refs log tree commit diff
path: root/src/libproc_macro
diff options
context:
space:
mode:
authorOliver Schneider <git-spam-no-reply9815368754983@oli-obk.de>2017-07-11 09:52:50 +0200
committerOliver Schneider <git-spam-no-reply9815368754983@oli-obk.de>2017-07-12 09:47:04 +0200
commita260baae7e77bbae1497f0d37876947b15946553 (patch)
treedbcff58a7401371c9865b263049e705e35ff14f7 /src/libproc_macro
parentd84693b93dae3958e3504f817face0184c5c3fdd (diff)
downloadrust-a260baae7e77bbae1497f0d37876947b15946553.tar.gz
rust-a260baae7e77bbae1497f0d37876947b15946553.zip
Reintroduce expansion info for proc macros 1.1
Diffstat (limited to 'src/libproc_macro')
-rw-r--r--src/libproc_macro/lib.rs13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/libproc_macro/lib.rs b/src/libproc_macro/lib.rs
index 06f9634d706..9f011d6e2e8 100644
--- a/src/libproc_macro/lib.rs
+++ b/src/libproc_macro/lib.rs
@@ -57,6 +57,7 @@ use syntax::symbol::Symbol;
 use syntax::tokenstream;
 use syntax_pos::DUMMY_SP;
 use syntax_pos::SyntaxContext;
+use syntax_pos::hygiene::Mark;
 
 /// The main type provided by this crate, representing an abstract stream of
 /// tokens.
@@ -86,8 +87,16 @@ impl FromStr for TokenStream {
         __internal::with_sess(|(sess, mark)| {
             let src = src.to_string();
             let name = "<proc-macro source code>".to_string();
-            let call_site = mark.expn_info().unwrap().call_site;
-            let stream = parse::parse_stream_from_source_str(name, src, sess, Some(call_site));
+            let expn_info = mark.expn_info().unwrap();
+            let call_site = expn_info.call_site;
+            // notify the expansion info that it is unhygienic
+            let mark = Mark::fresh(mark);
+            mark.set_expn_info(expn_info);
+            let span = syntax_pos::Span {
+                ctxt: SyntaxContext::empty().apply_mark(mark),
+                ..call_site
+            };
+            let stream = parse::parse_stream_from_source_str(name, src, sess, Some(span));
             Ok(__internal::token_stream_wrap(stream))
         })
     }