diff options
| author | Oliver Schneider <git-spam-no-reply9815368754983@oli-obk.de> | 2017-07-11 09:52:50 +0200 |
|---|---|---|
| committer | Oliver Schneider <git-spam-no-reply9815368754983@oli-obk.de> | 2017-07-12 09:47:04 +0200 |
| commit | a260baae7e77bbae1497f0d37876947b15946553 (patch) | |
| tree | dbcff58a7401371c9865b263049e705e35ff14f7 /src/libproc_macro | |
| parent | d84693b93dae3958e3504f817face0184c5c3fdd (diff) | |
| download | rust-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.rs | 13 |
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)) }) } |
