rustc: implement and use Default on more types.

This commit is contained in:
Eduard-Mihai Burtescu 2018-07-25 15:44:06 +03:00
parent da622a3796
commit 7683180be5
16 changed files with 61 additions and 73 deletions

View File

@ -659,6 +659,14 @@ dependencies = [
"log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
[[package]]
name = "ena"
version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]] [[package]]
name = "env_logger" name = "env_logger"
version = "0.5.12" version = "0.5.12"
@ -2196,7 +2204,7 @@ name = "rustc_data_structures"
version = "0.0.0" version = "0.0.0"
dependencies = [ dependencies = [
"cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
"ena 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)", "ena 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
"graphviz 0.0.0", "graphviz 0.0.0",
"log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
"parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)",
@ -3261,6 +3269,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
"checksum difference 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "524cbf6897b527295dff137cec09ecf3a05f4fddffd7dfcd1585403449e74198" "checksum difference 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "524cbf6897b527295dff137cec09ecf3a05f4fddffd7dfcd1585403449e74198"
"checksum either 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3be565ca5c557d7f59e7cfcf1844f9e3033650c929c6566f511e8005f205c1d0" "checksum either 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3be565ca5c557d7f59e7cfcf1844f9e3033650c929c6566f511e8005f205c1d0"
"checksum elasticlunr-rs 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4837d77a1e157489a3933b743fd774ae75074e0e390b2b7f071530048a0d87ee" "checksum elasticlunr-rs 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4837d77a1e157489a3933b743fd774ae75074e0e390b2b7f071530048a0d87ee"
"checksum ena 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "25b4e5febb25f08c49f1b07dc33a182729a6b21edfb562b5aef95f78e0dbe5bb"
"checksum ena 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)" = "88dc8393b3c7352f94092497f6b52019643e493b6b890eb417cdb7c46117e621" "checksum ena 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)" = "88dc8393b3c7352f94092497f6b52019643e493b6b890eb417cdb7c46117e621"
"checksum env_logger 0.5.12 (registry+https://github.com/rust-lang/crates.io-index)" = "f4d7e69c283751083d53d01eac767407343b8b69c4bd70058e08adc2637cb257" "checksum env_logger 0.5.12 (registry+https://github.com/rust-lang/crates.io-index)" = "f4d7e69c283751083d53d01eac767407343b8b69c4bd70058e08adc2637cb257"
"checksum env_logger 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "afb070faf94c85d17d50ca44f6ad076bce18ae92f0037d350947240a36e9d42e" "checksum env_logger 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "afb070faf94c85d17d50ca44f6ad076bce18ae92f0037d350947240a36e9d42e"

View File

@ -101,11 +101,11 @@ impl DepGraph {
DepGraph { DepGraph {
data: Some(Lrc::new(DepGraphData { data: Some(Lrc::new(DepGraphData {
previous_work_products: prev_work_products, previous_work_products: prev_work_products,
dep_node_debug: Lock::new(Default::default()), dep_node_debug: Default::default(),
current: Lock::new(CurrentDepGraph::new()), current: Lock::new(CurrentDepGraph::new()),
previous: prev_graph, previous: prev_graph,
colors: Lock::new(DepNodeColorMap::new(prev_graph_node_count)), colors: Lock::new(DepNodeColorMap::new(prev_graph_node_count)),
loaded_from_cache: Lock::new(Default::default()), loaded_from_cache: Default::default(),
})), })),
fingerprints: Lrc::new(Lock::new(fingerprints)), fingerprints: Lrc::new(Lock::new(fingerprints)),
} }

View File

@ -36,6 +36,7 @@ use util::nodemap::NodeMap;
/// Internally the DefPathTable holds a tree of DefKeys, where each DefKey /// Internally the DefPathTable holds a tree of DefKeys, where each DefKey
/// stores the DefIndex of its parent. /// stores the DefIndex of its parent.
/// There is one DefPathTable for each crate. /// There is one DefPathTable for each crate.
#[derive(Default)]
pub struct DefPathTable { pub struct DefPathTable {
index_to_key: [Vec<DefKey>; 2], index_to_key: [Vec<DefKey>; 2],
def_path_hashes: [Vec<DefPathHash>; 2], def_path_hashes: [Vec<DefPathHash>; 2],
@ -153,7 +154,7 @@ impl Decodable for DefPathTable {
/// The definition table containing node definitions. /// The definition table containing node definitions.
/// It holds the DefPathTable for local DefIds/DefPaths and it also stores a /// It holds the DefPathTable for local DefIds/DefPaths and it also stores a
/// mapping from NodeIds to local DefIds. /// mapping from NodeIds to local DefIds.
#[derive(Clone)] #[derive(Clone, Default)]
pub struct Definitions { pub struct Definitions {
table: DefPathTable, table: DefPathTable,
node_to_def_index: NodeMap<DefIndex>, node_to_def_index: NodeMap<DefIndex>,
@ -412,20 +413,8 @@ impl Definitions {
/// ascending order. /// ascending order.
/// ///
/// FIXME: there is probably a better place to put this comment. /// FIXME: there is probably a better place to put this comment.
pub fn new() -> Definitions { pub fn new() -> Self {
Definitions { Self::default()
table: DefPathTable {
index_to_key: [vec![], vec![]],
def_path_hashes: [vec![], vec![]],
},
node_to_def_index: Default::default(),
def_index_to_node: [vec![], vec![]],
node_to_hir_id: IndexVec::new(),
parent_modules_of_macro_defs: Default::default(),
expansions_that_defined: Default::default(),
next_disambiguator: Default::default(),
def_index_to_span: Default::default(),
}
} }
pub fn def_path_table(&self) -> &DefPathTable { pub fn def_path_table(&self) -> &DefPathTable {

View File

@ -369,8 +369,7 @@ impl<'a> HashStable<StableHashingContext<'a>> for Span {
// times, we cache a stable hash of it and hash that instead of // times, we cache a stable hash of it and hash that instead of
// recursing every time. // recursing every time.
thread_local! { thread_local! {
static CACHE: RefCell<FxHashMap<hygiene::Mark, u64>> = static CACHE: RefCell<FxHashMap<hygiene::Mark, u64>> = Default::default();
RefCell::new(Default::default());
} }
let sub_hash: u64 = CACHE.with(|cache| { let sub_hash: u64 = CACHE.with(|cache| {

View File

@ -29,6 +29,7 @@ use std::{cmp, fmt, mem, u32};
mod taint; mod taint;
#[derive(Default)]
pub struct RegionConstraintCollector<'tcx> { pub struct RegionConstraintCollector<'tcx> {
/// For each `RegionVid`, the corresponding `RegionVariableOrigin`. /// For each `RegionVid`, the corresponding `RegionVariableOrigin`.
var_infos: IndexVec<RegionVid, RegionVariableInfo>, var_infos: IndexVec<RegionVid, RegionVariableInfo>,
@ -341,17 +342,8 @@ impl TaintDirections {
} }
impl<'tcx> RegionConstraintCollector<'tcx> { impl<'tcx> RegionConstraintCollector<'tcx> {
pub fn new() -> RegionConstraintCollector<'tcx> { pub fn new() -> Self {
RegionConstraintCollector { Self::default()
var_infos: VarInfos::default(),
data: RegionConstraintData::default(),
lubs: Default::default(),
glbs: Default::default(),
bound_count: 0,
undo_log: Vec::new(),
unification_table: ut::UnificationTable::new(),
any_unifications: false,
}
} }
pub fn num_region_vars(&self) -> usize { pub fn num_region_vars(&self) -> usize {

View File

@ -1233,7 +1233,7 @@ pub fn check_ast_crate(
let (passes, buffered) = if pre_expansion { let (passes, buffered) = if pre_expansion {
( (
sess.lint_store.borrow_mut().pre_expansion_passes.take(), sess.lint_store.borrow_mut().pre_expansion_passes.take(),
LintBuffer::new(), LintBuffer::default(),
) )
} else { } else {
( (

View File

@ -490,15 +490,12 @@ mod levels;
pub use self::levels::{LintLevelSets, LintLevelMap}; pub use self::levels::{LintLevelSets, LintLevelMap};
#[derive(Default)]
pub struct LintBuffer { pub struct LintBuffer {
map: NodeMap<Vec<BufferedEarlyLint>>, map: NodeMap<Vec<BufferedEarlyLint>>,
} }
impl LintBuffer { impl LintBuffer {
pub fn new() -> LintBuffer {
LintBuffer { map: ::std::default::Default::default() }
}
pub fn add_lint(&mut self, pub fn add_lint(&mut self,
lint: &'static Lint, lint: &'static Lint,
id: ast::NodeId, id: ast::NodeId,

View File

@ -18,9 +18,15 @@ use rustc_data_structures::stable_hasher::{HashStable, StableHasher,
#[derive(Copy, Clone, Debug, RustcEncodable, RustcDecodable)] #[derive(Copy, Clone, Debug, RustcEncodable, RustcDecodable)]
pub enum SignalledError { SawSomeError, NoErrorsSeen } pub enum SignalledError { SawSomeError, NoErrorsSeen }
impl Default for SignalledError {
fn default() -> SignalledError {
SignalledError::NoErrorsSeen
}
}
impl_stable_hash_for!(enum self::SignalledError { SawSomeError, NoErrorsSeen }); impl_stable_hash_for!(enum self::SignalledError { SawSomeError, NoErrorsSeen });
#[derive(Debug, RustcEncodable, RustcDecodable)] #[derive(Debug, Default, RustcEncodable, RustcDecodable)]
pub struct BorrowCheckResult { pub struct BorrowCheckResult {
pub used_mut_nodes: FxHashSet<HirId>, pub used_mut_nodes: FxHashSet<HirId>,
pub signalled_any_error: SignalledError, pub signalled_any_error: SignalledError,

View File

@ -2741,9 +2741,7 @@ fn insert_late_bound_lifetimes(
constrained_by_input.visit_ty(arg_ty); constrained_by_input.visit_ty(arg_ty);
} }
let mut appears_in_output = AllCollector { let mut appears_in_output = AllCollector::default();
regions: Default::default(),
};
intravisit::walk_fn_ret_ty(&mut appears_in_output, &decl.output); intravisit::walk_fn_ret_ty(&mut appears_in_output, &decl.output);
debug!( debug!(
@ -2755,9 +2753,7 @@ fn insert_late_bound_lifetimes(
// //
// Subtle point: because we disallow nested bindings, we can just // Subtle point: because we disallow nested bindings, we can just
// ignore binders here and scrape up all names we see. // ignore binders here and scrape up all names we see.
let mut appears_in_where_clause = AllCollector { let mut appears_in_where_clause = AllCollector::default();
regions: Default::default(),
};
appears_in_where_clause.visit_generics(generics); appears_in_where_clause.visit_generics(generics);
for param in &generics.params { for param in &generics.params {
@ -2854,6 +2850,7 @@ fn insert_late_bound_lifetimes(
} }
} }
#[derive(Default)]
struct AllCollector { struct AllCollector {
regions: FxHashSet<hir::LifetimeName>, regions: FxHashSet<hir::LifetimeName>,
} }

View File

@ -1149,7 +1149,7 @@ pub fn build_session_(
local_crate_source_file, local_crate_source_file,
working_dir, working_dir,
lint_store: RwLock::new(lint::LintStore::new()), lint_store: RwLock::new(lint::LintStore::new()),
buffered_lints: Lock::new(Some(lint::LintBuffer::new())), buffered_lints: Lock::new(Some(Default::default())),
one_time_diagnostics: Default::default(), one_time_diagnostics: Default::default(),
plugin_llvm_passes: OneThread::new(RefCell::new(Vec::new())), plugin_llvm_passes: OneThread::new(RefCell::new(Vec::new())),
plugin_attributes: OneThread::new(RefCell::new(Vec::new())), plugin_attributes: OneThread::new(RefCell::new(Vec::new())),

View File

@ -3183,7 +3183,7 @@ pub fn provide(providers: &mut ty::query::Providers<'_>) {
/// rather, you should request the vector for a specific type via /// rather, you should request the vector for a specific type via
/// `tcx.inherent_impls(def_id)` so as to minimize your dependencies /// `tcx.inherent_impls(def_id)` so as to minimize your dependencies
/// (constructing this map requires touching the entire crate). /// (constructing this map requires touching the entire crate).
#[derive(Clone, Debug)] #[derive(Clone, Debug, Default)]
pub struct CrateInherentImpls { pub struct CrateInherentImpls {
pub inherent_impls: DefIdMap<Lrc<Vec<DefId>>>, pub inherent_impls: DefIdMap<Lrc<Vec<DefId>>>,
} }

View File

@ -64,7 +64,7 @@ fn reachable_non_generics_provider<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
assert_eq!(cnum, LOCAL_CRATE); assert_eq!(cnum, LOCAL_CRATE);
if !tcx.sess.opts.output_types.should_codegen() { if !tcx.sess.opts.output_types.should_codegen() {
return Lrc::new(Default::default()) return Default::default();
} }
// Check to see if this crate is a "special runtime crate". These // Check to see if this crate is a "special runtime crate". These

View File

@ -9,7 +9,7 @@ path = "lib.rs"
crate-type = ["dylib"] crate-type = ["dylib"]
[dependencies] [dependencies]
ena = "0.9.3" ena = "0.10.1"
log = "0.4" log = "0.4"
rustc_cratesio_shim = { path = "../librustc_cratesio_shim" } rustc_cratesio_shim = { path = "../librustc_cratesio_shim" }
serialize = { path = "../libserialize" } serialize = { path = "../libserialize" }

View File

@ -23,6 +23,18 @@ pub struct SnapshotMap<K, V>
undo_log: Vec<UndoLog<K, V>>, undo_log: Vec<UndoLog<K, V>>,
} }
// HACK(eddyb) manual impl avoids `Default` bounds on `K` and `V`.
impl<K, V> Default for SnapshotMap<K, V>
where K: Hash + Clone + Eq
{
fn default() -> Self {
SnapshotMap {
map: Default::default(),
undo_log: Default::default(),
}
}
}
pub struct Snapshot { pub struct Snapshot {
len: usize, len: usize,
} }
@ -35,17 +47,6 @@ enum UndoLog<K, V> {
Noop, Noop,
} }
impl<K, V> Default for SnapshotMap<K, V>
where K: Hash + Clone + Eq
{
fn default() -> Self {
SnapshotMap {
map: FxHashMap::default(),
undo_log: vec![],
}
}
}
impl<K, V> SnapshotMap<K, V> impl<K, V> SnapshotMap<K, V>
where K: Hash + Clone + Eq where K: Hash + Clone + Eq
{ {

View File

@ -42,6 +42,18 @@ pub struct TransitiveRelation<T: Clone + Debug + Eq + Hash> {
closure: Lock<Option<BitMatrix<usize, usize>>>, closure: Lock<Option<BitMatrix<usize, usize>>>,
} }
// HACK(eddyb) manual impl avoids `Default` bound on `T`.
impl<T: Clone + Debug + Eq + Hash> Default for TransitiveRelation<T> {
fn default() -> Self {
TransitiveRelation {
elements: Default::default(),
map: Default::default(),
edges: Default::default(),
closure: Default::default(),
}
}
}
#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, RustcEncodable, RustcDecodable, Debug)] #[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, RustcEncodable, RustcDecodable, Debug)]
struct Index(usize); struct Index(usize);
@ -51,17 +63,6 @@ struct Edge {
target: Index, target: Index,
} }
impl<T: Clone + Debug + Eq + Hash> Default for TransitiveRelation<T> {
fn default() -> TransitiveRelation<T> {
TransitiveRelation {
elements: vec![],
map: FxHashMap::default(),
edges: vec![],
closure: Lock::new(None),
}
}
}
impl<T: Clone + Debug + Eq + Hash> TransitiveRelation<T> { impl<T: Clone + Debug + Eq + Hash> TransitiveRelation<T> {
pub fn is_empty(&self) -> bool { pub fn is_empty(&self) -> bool {
self.edges.is_empty() self.edges.is_empty()

View File

@ -22,7 +22,6 @@ use rustc::hir::def_id::{CrateNum, DefId, LOCAL_CRATE};
use rustc::hir; use rustc::hir;
use rustc::hir::itemlikevisit::ItemLikeVisitor; use rustc::hir::itemlikevisit::ItemLikeVisitor;
use rustc::ty::{self, CrateInherentImpls, TyCtxt}; use rustc::ty::{self, CrateInherentImpls, TyCtxt};
use rustc::util::nodemap::DefIdMap;
use rustc_data_structures::sync::Lrc; use rustc_data_structures::sync::Lrc;
use syntax::ast; use syntax::ast;
@ -37,9 +36,7 @@ pub fn crate_inherent_impls<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
let krate = tcx.hir.krate(); let krate = tcx.hir.krate();
let mut collect = InherentCollect { let mut collect = InherentCollect {
tcx, tcx,
impls_map: CrateInherentImpls { impls_map: Default::default(),
inherent_impls: DefIdMap::default()
}
}; };
krate.visit_all_item_likes(&mut collect); krate.visit_all_item_likes(&mut collect);
Lrc::new(collect.impls_map) Lrc::new(collect.impls_map)