Use BTreeSet instead of FxHashSet

This commit is contained in:
Esteban Küber 2017-03-05 20:19:05 -03:00
parent 75eface16d
commit 3ffa4b5240

View File

@ -69,6 +69,7 @@ use errors::DiagnosticBuilder;
use std::cell::{Cell, RefCell}; use std::cell::{Cell, RefCell};
use std::cmp; use std::cmp;
use std::collections::BTreeSet;
use std::fmt; use std::fmt;
use std::mem::replace; use std::mem::replace;
use std::rc::Rc; use std::rc::Rc;
@ -100,8 +101,8 @@ enum AssocSuggestion {
#[derive(Eq)] #[derive(Eq)]
struct BindingError { struct BindingError {
name: Name, name: Name,
origin: FxHashSet<Span>, origin: BTreeSet<Span>,
target: FxHashSet<Span>, target: BTreeSet<Span>,
} }
impl PartialOrd for BindingError { impl PartialOrd for BindingError {
@ -233,16 +234,14 @@ fn resolve_struct_error<'sess, 'a>(resolver: &'sess Resolver,
err err
} }
ResolutionError::VariableNotBoundInPattern(binding_error) => { ResolutionError::VariableNotBoundInPattern(binding_error) => {
let mut target_sp = binding_error.target.iter().map(|x| *x).collect::<Vec<_>>(); let target_sp = binding_error.target.iter().map(|x| *x).collect::<Vec<_>>();
target_sp.sort();
let msp = MultiSpan::from_spans(target_sp.clone()); let msp = MultiSpan::from_spans(target_sp.clone());
let msg = format!("variable `{}` is not bound in all patterns", binding_error.name); let msg = format!("variable `{}` is not bound in all patterns", binding_error.name);
let mut err = resolver.session.struct_span_err_with_code(msp, &msg, "E0408"); let mut err = resolver.session.struct_span_err_with_code(msp, &msg, "E0408");
for sp in target_sp { for sp in target_sp {
err.span_label(sp, &format!("pattern doesn't bind `{}`", binding_error.name)); err.span_label(sp, &format!("pattern doesn't bind `{}`", binding_error.name));
} }
let mut origin_sp = binding_error.origin.iter().map(|x| *x).collect::<Vec<_>>(); let origin_sp = binding_error.origin.iter().map(|x| *x).collect::<Vec<_>>();
origin_sp.sort();
for sp in origin_sp { for sp in origin_sp {
err.span_label(sp, &"variable not in all patterns"); err.span_label(sp, &"variable not in all patterns");
} }
@ -1950,8 +1949,8 @@ impl<'a> Resolver<'a> {
.entry(key.name) .entry(key.name)
.or_insert(BindingError { .or_insert(BindingError {
name: key.name, name: key.name,
origin: FxHashSet(), origin: BTreeSet::new(),
target: FxHashSet(), target: BTreeSet::new(),
}); });
binding_error.origin.insert(binding_i.span); binding_error.origin.insert(binding_i.span);
binding_error.target.insert(q.span); binding_error.target.insert(q.span);
@ -1963,8 +1962,8 @@ impl<'a> Resolver<'a> {
.entry(key_j.name) .entry(key_j.name)
.or_insert(BindingError { .or_insert(BindingError {
name: key_j.name, name: key_j.name,
origin: FxHashSet(), origin: BTreeSet::new(),
target: FxHashSet(), target: BTreeSet::new(),
}); });
binding_error.origin.insert(binding_j.span); binding_error.origin.insert(binding_j.span);
binding_error.target.insert(p.span); binding_error.target.insert(p.span);