about summary refs log tree commit diff
diff options
context:
space:
mode:
authorNicholas Nethercote <nnethercote@mozilla.com>2019-02-05 15:12:15 +1100
committerNicholas Nethercote <nnethercote@mozilla.com>2019-02-05 15:12:15 +1100
commit473095345b74b4d6b836d3ab2e3ace0c6719b20f (patch)
tree6a02ec381ec8a6f6c2d1512b261419ee43fd092a
parent8909f70a3249f61be10627fc6b6634dedf66f77a (diff)
downloadrust-473095345b74b4d6b836d3ab2e3ace0c6719b20f.tar.gz
rust-473095345b74b4d6b836d3ab2e3ace0c6719b20f.zip
Neaten up `fold_crate`.
-rw-r--r--src/libsyntax/fold.rs39
1 files changed, 15 insertions, 24 deletions
diff --git a/src/libsyntax/fold.rs b/src/libsyntax/fold.rs
index a7e835fbd45..567175b84df 100644
--- a/src/libsyntax/fold.rs
+++ b/src/libsyntax/fold.rs
@@ -980,7 +980,7 @@ pub fn noop_fold_mod<T: Folder>(Mod {inner, items, inline}: Mod, folder: &mut T)
 
 pub fn noop_fold_crate<T: Folder>(Crate {module, attrs, span}: Crate,
                                   folder: &mut T) -> Crate {
-    let mut items = folder.fold_item(P(Item {
+    let item = P(Item {
         ident: keywords::Invalid.ident(),
         attrs,
         id: DUMMY_NODE_ID,
@@ -988,30 +988,21 @@ pub fn noop_fold_crate<T: Folder>(Crate {module, attrs, span}: Crate,
         span,
         node: ItemKind::Mod(module),
         tokens: None,
-    })).into_iter();
-
-    let (module, attrs, span) = match items.next() {
-        Some(item) => {
-            assert!(items.next().is_none(),
-                    "a crate cannot expand to more than one item");
-            item.and_then(|Item { attrs, span, node, .. }| {
-                match node {
-                    ItemKind::Mod(m) => (m, attrs, span),
-                    _ => panic!("fold converted a module to not a module"),
-                }
-            })
+    });
+    let items = folder.fold_item(item);
+
+    let len = items.len();
+    if len == 0 {
+        let module = Mod { inner: span, items: vec![], inline: true };
+        Crate { module, attrs: vec![], span }
+    } else if len == 1 {
+        let Item { attrs, span, node, .. } = items.into_iter().next().unwrap().into_inner();
+        match node {
+            ItemKind::Mod(module) => Crate { module, attrs, span },
+            _ => panic!("fold converted a module to not a module"),
         }
-        None => (Mod {
-            inner: span,
-            items: vec![],
-            inline: true,
-        }, vec![], span)
-    };
-
-    Crate {
-        module,
-        attrs,
-        span,
+    } else {
+        panic!("a crate cannot expand to more than one item");
     }
 }