about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMazdak Farrokhzad <twingoow@gmail.com>2020-03-07 19:53:25 +0100
committerMazdak Farrokhzad <twingoow@gmail.com>2020-03-18 15:08:25 +0100
commitdfcefa49ed5ce5018d279a8d1a60744da67c80c8 (patch)
tree81d690162c0fd7527caf6b68c4cfa5ddd04ac5f9
parent7108b7fbfea50bd311617cc217616b88c8b647c9 (diff)
downloadrust-dfcefa49ed5ce5018d279a8d1a60744da67c80c8.tar.gz
rust-dfcefa49ed5ce5018d279a8d1a60744da67c80c8.zip
extract error_on_circular_module
-rw-r--r--src/librustc_parse/parser/module.rs30
1 files changed, 20 insertions, 10 deletions
diff --git a/src/librustc_parse/parser/module.rs b/src/librustc_parse/parser/module.rs
index 9ccafd7932a..d203e665c95 100644
--- a/src/librustc_parse/parser/module.rs
+++ b/src/librustc_parse/parser/module.rs
@@ -254,16 +254,7 @@ impl<'a> Parser<'a> {
         id_sp: Span,
     ) -> PResult<'a, (Mod, Vec<Attribute>)> {
         let mut included_mod_stack = self.sess.included_mod_stack.borrow_mut();
-        if let Some(i) = included_mod_stack.iter().position(|p| *p == path) {
-            let mut err = String::from("circular modules: ");
-            let len = included_mod_stack.len();
-            for p in &included_mod_stack[i..len] {
-                err.push_str(&p.to_string_lossy());
-                err.push_str(" -> ");
-            }
-            err.push_str(&path.to_string_lossy());
-            return Err(self.struct_span_err(id_sp, &err[..]));
-        }
+        self.error_on_circular_module(id_sp, &path, &included_mod_stack)?;
         included_mod_stack.push(path.clone());
         drop(included_mod_stack);
 
@@ -277,6 +268,25 @@ impl<'a> Parser<'a> {
         Ok(module)
     }
 
+    fn error_on_circular_module(
+        &self,
+        span: Span,
+        path: &Path,
+        included_mod_stack: &[PathBuf],
+    ) -> PResult<'a, ()> {
+        if let Some(i) = included_mod_stack.iter().position(|p| *p == path) {
+            let mut err = String::from("circular modules: ");
+            let len = included_mod_stack.len();
+            for p in &included_mod_stack[i..len] {
+                err.push_str(&p.to_string_lossy());
+                err.push_str(" -> ");
+            }
+            err.push_str(&path.to_string_lossy());
+            return Err(self.struct_span_err(span, &err[..]));
+        }
+        Ok(())
+    }
+
     fn push_directory(&mut self, id: Ident, attrs: &[Attribute]) {
         if let Some(path) = attr::first_attr_value_str_by_name(attrs, sym::path) {
             self.directory.path.push(&*path.as_str());