about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorJeffrey Seyfried <jeffrey.seyfried@gmail.com>2016-07-27 23:55:25 +0000
committerJeffrey Seyfried <jeffrey.seyfried@gmail.com>2016-08-01 19:06:44 +0000
commit096c3ed6c6ed98147d5d22ba5c5b0c109912b837 (patch)
tree0365c14e0579965b4d889672a1b5352b2f517c0b /src
parent5868e78b09880f701c78d5d7122164494d928637 (diff)
downloadrust-096c3ed6c6ed98147d5d22ba5c5b0c109912b837.tar.gz
rust-096c3ed6c6ed98147d5d22ba5c5b0c109912b837.zip
Refactor away `resolution.try_define()`.
Diffstat (limited to 'src')
-rw-r--r--src/librustc_resolve/resolve_imports.rs33
1 files changed, 15 insertions, 18 deletions
diff --git a/src/librustc_resolve/resolve_imports.rs b/src/librustc_resolve/resolve_imports.rs
index 691114574d0..8e2c21f880f 100644
--- a/src/librustc_resolve/resolve_imports.rs
+++ b/src/librustc_resolve/resolve_imports.rs
@@ -137,23 +137,6 @@ impl<'a> SingleImports<'a> {
 }
 
 impl<'a> NameResolution<'a> {
-    fn try_define(&mut self, binding: &'a NameBinding<'a>) -> Result<(), &'a NameBinding<'a>> {
-        if let Some(old_binding) = self.binding {
-            if binding.is_glob_import() {
-                self.duplicate_globs.push(binding);
-            } else if old_binding.is_glob_import() {
-                self.duplicate_globs.push(old_binding);
-                self.binding = Some(binding);
-            } else {
-                return Err(old_binding);
-            }
-        } else {
-            self.binding = Some(binding);
-        }
-
-        Ok(())
-    }
-
     // Returns the binding for the name if it is known or None if it not known.
     fn binding(&self) -> Option<&'a NameBinding<'a>> {
         self.binding.and_then(|binding| match self.single_imports {
@@ -246,8 +229,22 @@ impl<'a> ::ModuleS<'a> {
     // Define the name or return the existing binding if there is a collision.
     pub fn try_define_child(&self, name: Name, ns: Namespace, binding: NameBinding<'a>)
                             -> Result<(), &'a NameBinding<'a>> {
+        let binding = self.arenas.alloc_name_binding(binding);
         self.update_resolution(name, ns, |resolution| {
-            resolution.try_define(self.arenas.alloc_name_binding(binding))
+            if let Some(old_binding) = resolution.binding {
+                if binding.is_glob_import() {
+                    resolution.duplicate_globs.push(binding);
+                } else if old_binding.is_glob_import() {
+                    resolution.duplicate_globs.push(old_binding);
+                    resolution.binding = Some(binding);
+                } else {
+                    return Err(old_binding);
+                }
+            } else {
+                resolution.binding = Some(binding);
+            }
+
+            Ok(())
         })
     }