@@ -273,6 +273,7 @@ pub struct Parser<'a> {
273
273
/// extra detail when the same error is seen twice
274
274
pub obsolete_set : HashSet < ObsoleteSyntax > ,
275
275
/// Used to determine the path to externally loaded source files
276
+ pub filename : Option < String > ,
276
277
pub mod_path_stack : Vec < InternedString > ,
277
278
/// Stack of spans of open delimiters. Used for error message.
278
279
pub open_braces : Vec < Span > ,
@@ -354,6 +355,9 @@ impl<'a> Parser<'a> {
354
355
{
355
356
let tok0 = rdr. real_token ( ) ;
356
357
let span = tok0. sp ;
358
+ let filename = if span != codemap:: DUMMY_SP {
359
+ Some ( sess. codemap ( ) . span_to_filename ( span) )
360
+ } else { None } ;
357
361
let placeholder = TokenAndSpan {
358
362
tok : token:: Underscore ,
359
363
sp : span,
@@ -382,6 +386,7 @@ impl<'a> Parser<'a> {
382
386
quote_depth : 0 ,
383
387
obsolete_set : HashSet :: new ( ) ,
384
388
mod_path_stack : Vec :: new ( ) ,
389
+ filename : filename,
385
390
open_braces : Vec :: new ( ) ,
386
391
owns_directory : true ,
387
392
root_module_name : None ,
@@ -5325,7 +5330,7 @@ impl<'a> Parser<'a> {
5325
5330
id : ast:: Ident ,
5326
5331
outer_attrs : & [ ast:: Attribute ] ,
5327
5332
id_sp : Span ) -> PResult < ' a , ModulePathSuccess > {
5328
- let mut prefix = PathBuf :: from ( & self . sess . codemap ( ) . span_to_filename ( self . span ) ) ;
5333
+ let mut prefix = PathBuf :: from ( self . filename . as_ref ( ) . unwrap ( ) ) ;
5329
5334
prefix. pop ( ) ;
5330
5335
let mut dir_path = prefix;
5331
5336
for part in & self . mod_path_stack {
0 commit comments