about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMazdak Farrokhzad <twingoow@gmail.com>2020-03-08 13:29:37 +0100
committerMazdak Farrokhzad <twingoow@gmail.com>2020-03-18 15:08:25 +0100
commit59bf8a07f93d194abcc880a366bda37563a9402b (patch)
tree961de67b00da6120562ef6e991fe1b0f10eeacdb
parent463995fe2974e2473392ddf7be8699746f6b7dac (diff)
downloadrust-59bf8a07f93d194abcc880a366bda37563a9402b.tar.gz
rust-59bf8a07f93d194abcc880a366bda37563a9402b.zip
extract error_on_circular_module
-rw-r--r--src/librustc_parse/parser/module.rs28
1 files changed, 19 insertions, 9 deletions
diff --git a/src/librustc_parse/parser/module.rs b/src/librustc_parse/parser/module.rs
index 0701b733076..66faf295b72 100644
--- a/src/librustc_parse/parser/module.rs
+++ b/src/librustc_parse/parser/module.rs
@@ -118,15 +118,7 @@ fn eval_src_mod<'a>(
     id: ast::Ident,
 ) -> PResult<'a, (Mod, Vec<Attribute>)> {
     let mut included_mod_stack = 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: ");
-        for p in &included_mod_stack[i..] {
-            err.push_str(&p.to_string_lossy());
-            err.push_str(" -> ");
-        }
-        err.push_str(&path.to_string_lossy());
-        return Err(sess.span_diagnostic.struct_span_err(id.span, &err[..]));
-    }
+    error_on_circular_module(sess, id.span, &path, &included_mod_stack)?;
     included_mod_stack.push(path.clone());
     drop(included_mod_stack);
 
@@ -140,6 +132,24 @@ fn eval_src_mod<'a>(
     Ok(module)
 }
 
+fn error_on_circular_module<'a>(
+    sess: &'a ParseSess,
+    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: ");
+        for p in &included_mod_stack[i..] {
+            err.push_str(&p.to_string_lossy());
+            err.push_str(" -> ");
+        }
+        err.push_str(&path.to_string_lossy());
+        return Err(sess.span_diagnostic.struct_span_err(span, &err[..]));
+    }
+    Ok(())
+}
+
 pub fn push_directory(
     id: Ident,
     attrs: &[Attribute],