diff options
| author | Jeffrey Seyfried <jeffrey.seyfried@gmail.com> | 2016-07-27 23:55:25 +0000 |
|---|---|---|
| committer | Jeffrey Seyfried <jeffrey.seyfried@gmail.com> | 2016-08-01 19:06:44 +0000 |
| commit | 096c3ed6c6ed98147d5d22ba5c5b0c109912b837 (patch) | |
| tree | 0365c14e0579965b4d889672a1b5352b2f517c0b /src | |
| parent | 5868e78b09880f701c78d5d7122164494d928637 (diff) | |
| download | rust-096c3ed6c6ed98147d5d22ba5c5b0c109912b837.tar.gz rust-096c3ed6c6ed98147d5d22ba5c5b0c109912b837.zip | |
Refactor away `resolution.try_define()`.
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustc_resolve/resolve_imports.rs | 33 |
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(()) }) } |
