Allow prelude imports to shadow eachother (needed for the [pretty] tests)

Derive the Default impl for NameResolution
This commit is contained in:
Jeffrey Seyfried 2016-02-09 06:26:27 +00:00
parent 3c62d90202
commit 3df40c09ec

View File

@ -99,7 +99,7 @@ fn import<'a>(&self, binding: &'a NameBinding<'a>) -> NameBinding<'a> {
}
}
#[derive(Clone, Copy)]
#[derive(Clone, Default)]
/// Records information about the resolution of a name in a module.
pub struct NameResolution<'a> {
/// The number of unresolved single imports that could define the name.
@ -108,12 +108,6 @@ pub struct NameResolution<'a> {
pub binding: Option<&'a NameBinding<'a>>,
}
impl<'a> Default for NameResolution<'a> {
fn default() -> Self {
NameResolution { outstanding_references: 0, binding: None }
}
}
impl<'a> NameResolution<'a> {
pub fn result(&self, outstanding_globs: usize) -> ResolveResult<&'a NameBinding<'a>> {
// If no unresolved imports (single or glob) can define the name, self.binding is final.
@ -137,8 +131,8 @@ pub fn result(&self, outstanding_globs: usize) -> ResolveResult<&'a NameBinding<
pub fn try_define(&mut self, binding: &'a NameBinding<'a>) -> Result<(), &'a NameBinding<'a>> {
let is_prelude = |binding: &NameBinding| binding.defined_with(DefModifiers::PRELUDE);
let old_binding = match self.binding {
Some(old_binding) if is_prelude(binding) && !is_prelude(old_binding) => return Ok(()),
Some(old_binding) if is_prelude(old_binding) == is_prelude(binding) => old_binding,
Some(_) if is_prelude(binding) => return Ok(()),
Some(old_binding) if !is_prelude(old_binding) => old_binding,
_ => { self.binding = Some(binding); return Ok(()); }
};