@@ -57,6 +57,7 @@ use syntax::symbol::Symbol;
5757use syntax:: tokenstream;
5858use syntax_pos:: DUMMY_SP ;
5959use syntax_pos:: SyntaxContext ;
60+ use syntax_pos:: hygiene:: Mark ;
6061
6162/// The main type provided by this crate, representing an abstract stream of
6263/// tokens.
@@ -86,8 +87,16 @@ impl FromStr for TokenStream {
8687 __internal:: with_sess ( |( sess, mark) | {
8788 let src = src. to_string ( ) ;
8889 let name = "<proc-macro source code>" . to_string ( ) ;
89- let call_site = mark. expn_info ( ) . unwrap ( ) . call_site ;
90- let stream = parse:: parse_stream_from_source_str ( name, src, sess, Some ( call_site) ) ;
90+ let expn_info = mark. expn_info ( ) . unwrap ( ) ;
91+ let call_site = expn_info. call_site ;
92+ // notify the expansion info that it is unhygienic
93+ let mark = Mark :: fresh ( mark) ;
94+ mark. set_expn_info ( expn_info) ;
95+ let span = syntax_pos:: Span {
96+ ctxt : SyntaxContext :: empty ( ) . apply_mark ( mark) ,
97+ ..call_site
98+ } ;
99+ let stream = parse:: parse_stream_from_source_str ( name, src, sess, Some ( span) ) ;
91100 Ok ( __internal:: token_stream_wrap ( stream) )
92101 } )
93102 }
0 commit comments