]> git.lizzy.rs Git - rust.git/commitdiff
Add `filename` to Parser
authorJeffrey Seyfried <jeffrey.seyfried@gmail.com>
Wed, 2 Mar 2016 01:40:15 +0000 (01:40 +0000)
committerJeffrey Seyfried <jeffrey.seyfried@gmail.com>
Wed, 2 Mar 2016 23:50:13 +0000 (23:50 +0000)
src/libsyntax/parse/parser.rs

index b5d29a0d6dbaf11f3e335bd5f7d1f2e3f8baf574..e166a36721967eb933824499da2288e41dfea944 100644 (file)
@@ -273,6 +273,7 @@ pub struct Parser<'a> {
     /// extra detail when the same error is seen twice
     pub obsolete_set: HashSet<ObsoleteSyntax>,
     /// Used to determine the path to externally loaded source files
+    pub filename: Option<String>,
     pub mod_path_stack: Vec<InternedString>,
     /// Stack of spans of open delimiters. Used for error message.
     pub open_braces: Vec<Span>,
@@ -354,6 +355,9 @@ pub fn new(sess: &'a ParseSess,
     {
         let tok0 = rdr.real_token();
         let span = tok0.sp;
+        let filename = if span != codemap::DUMMY_SP {
+            Some(sess.codemap().span_to_filename(span))
+        } else { None };
         let placeholder = TokenAndSpan {
             tok: token::Underscore,
             sp: span,
@@ -382,6 +386,7 @@ pub fn new(sess: &'a ParseSess,
             quote_depth: 0,
             obsolete_set: HashSet::new(),
             mod_path_stack: Vec::new(),
+            filename: filename,
             open_braces: Vec::new(),
             owns_directory: true,
             root_module_name: None,
@@ -5325,7 +5330,7 @@ fn submod_path(&mut self,
                    id: ast::Ident,
                    outer_attrs: &[ast::Attribute],
                    id_sp: Span) -> PResult<'a, ModulePathSuccess> {
-        let mut prefix = PathBuf::from(&self.sess.codemap().span_to_filename(self.span));
+        let mut prefix = PathBuf::from(self.filename.as_ref().unwrap());
         prefix.pop();
         let mut dir_path = prefix;
         for part in &self.mod_path_stack {