Change to a BTreeMap rather than sorting the keys of a FnvHashMap.
This commit is contained in:
parent
db97c93c99
commit
e303c250f1
2 changed files with 13 additions and 15 deletions
|
@ -36,7 +36,7 @@ pub use self::Visibility::*;
|
||||||
pub use self::PathParameters::*;
|
pub use self::PathParameters::*;
|
||||||
|
|
||||||
use intravisit::Visitor;
|
use intravisit::Visitor;
|
||||||
use rustc_data_structures::fnv::FnvHashMap;
|
use std::collections::BTreeMap;
|
||||||
use syntax::codemap::{self, Span, Spanned, DUMMY_SP, ExpnId};
|
use syntax::codemap::{self, Span, Spanned, DUMMY_SP, ExpnId};
|
||||||
use syntax::abi::Abi;
|
use syntax::abi::Abi;
|
||||||
use syntax::ast::{Name, Ident, NodeId, DUMMY_NODE_ID, TokenTree, AsmDialect};
|
use syntax::ast::{Name, Ident, NodeId, DUMMY_NODE_ID, TokenTree, AsmDialect};
|
||||||
|
@ -329,7 +329,14 @@ pub struct Crate {
|
||||||
pub config: CrateConfig,
|
pub config: CrateConfig,
|
||||||
pub span: Span,
|
pub span: Span,
|
||||||
pub exported_macros: Vec<MacroDef>,
|
pub exported_macros: Vec<MacroDef>,
|
||||||
pub items: FnvHashMap<NodeId, Item>,
|
|
||||||
|
// NB: We use a BTreeMap here so that `visit_all_items` iterates
|
||||||
|
// over the ids in increasing order. In principle it should not
|
||||||
|
// matter what order we visit things in, but in *practice* it
|
||||||
|
// does, because it can affect the order in which errors are
|
||||||
|
// detected, which in turn can make compile-fail tests yield
|
||||||
|
// slightly different results.
|
||||||
|
pub items: BTreeMap<NodeId, Item>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Crate {
|
impl Crate {
|
||||||
|
@ -346,15 +353,7 @@ impl Crate {
|
||||||
/// approach. You should override `visit_nested_item` in your
|
/// approach. You should override `visit_nested_item` in your
|
||||||
/// visitor and then call `intravisit::walk_crate` instead.
|
/// visitor and then call `intravisit::walk_crate` instead.
|
||||||
pub fn visit_all_items<'hir, V:Visitor<'hir>>(&'hir self, visitor: &mut V) {
|
pub fn visit_all_items<'hir, V:Visitor<'hir>>(&'hir self, visitor: &mut V) {
|
||||||
// In principle, we could just iterate over the hashmap, but
|
for (_, item) in &self.items {
|
||||||
// in practice that makes the order of error reporting vary
|
|
||||||
// with small changes in the input etc etc, which makes the
|
|
||||||
// test base hard to maintain. So instead we sort by node-id
|
|
||||||
// so as to get reproducible results.
|
|
||||||
let mut pairs: Vec<_> = self.items.iter().collect();
|
|
||||||
pairs.sort_by(|&(id1, _), &(id2, _)| id1.cmp(id2));
|
|
||||||
|
|
||||||
for (_, item) in pairs {
|
|
||||||
visitor.visit_item(item);
|
visitor.visit_item(item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,8 +63,8 @@
|
||||||
|
|
||||||
use hir;
|
use hir;
|
||||||
|
|
||||||
|
use std::collections::BTreeMap;
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
|
||||||
use syntax::ast::*;
|
use syntax::ast::*;
|
||||||
use syntax::ptr::P;
|
use syntax::ptr::P;
|
||||||
use syntax::codemap::{respan, Spanned, Span};
|
use syntax::codemap::{respan, Spanned, Span};
|
||||||
|
@ -72,7 +72,6 @@ use syntax::owned_slice::OwnedSlice;
|
||||||
use syntax::parse::token::{self, str_to_ident};
|
use syntax::parse::token::{self, str_to_ident};
|
||||||
use syntax::std_inject;
|
use syntax::std_inject;
|
||||||
use syntax::visit::{self, Visitor};
|
use syntax::visit::{self, Visitor};
|
||||||
use rustc_data_structures::fnv::FnvHashMap;
|
|
||||||
|
|
||||||
use std::cell::{Cell, RefCell};
|
use std::cell::{Cell, RefCell};
|
||||||
|
|
||||||
|
@ -700,7 +699,7 @@ pub fn lower_mod(lctx: &LoweringContext, m: &Mod) -> hir::Mod {
|
||||||
}
|
}
|
||||||
|
|
||||||
struct ItemLowerer<'lcx, 'interner: 'lcx> {
|
struct ItemLowerer<'lcx, 'interner: 'lcx> {
|
||||||
items: FnvHashMap<NodeId, hir::Item>,
|
items: BTreeMap<NodeId, hir::Item>,
|
||||||
lctx: &'lcx LoweringContext<'interner>,
|
lctx: &'lcx LoweringContext<'interner>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -713,7 +712,7 @@ impl<'lcx, 'interner> Visitor<'lcx> for ItemLowerer<'lcx, 'interner> {
|
||||||
|
|
||||||
pub fn lower_crate(lctx: &LoweringContext, c: &Crate) -> hir::Crate {
|
pub fn lower_crate(lctx: &LoweringContext, c: &Crate) -> hir::Crate {
|
||||||
let items = {
|
let items = {
|
||||||
let mut item_lowerer = ItemLowerer { items: FnvHashMap(), lctx: lctx };
|
let mut item_lowerer = ItemLowerer { items: BTreeMap::new(), lctx: lctx };
|
||||||
visit::walk_crate(&mut item_lowerer, c);
|
visit::walk_crate(&mut item_lowerer, c);
|
||||||
item_lowerer.items
|
item_lowerer.items
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Reference in a new issue