From d19faead2d2f4b46e3adbab966314f000bdf5702 Mon Sep 17 00:00:00 2001 From: Santiago Pastorino Date: Sat, 4 Nov 2017 17:48:05 -0300 Subject: [PATCH] Make DefIndex use newtype_index macro --- src/Cargo.lock | 1 + src/librustc/hir/def_id.rs | 34 +++++-------------- src/librustc/hir/map/definitions.rs | 2 +- .../infer/region_inference/graphviz.rs | 1 + src/librustc_metadata/decoder.rs | 1 + src/librustc_resolve/Cargo.toml | 1 + src/librustc_resolve/lib.rs | 1 + src/librustc_resolve/macros.rs | 1 + 8 files changed, 16 insertions(+), 26 deletions(-) diff --git a/src/Cargo.lock b/src/Cargo.lock index 70266df79ebb6..54e4493654868 100644 --- a/src/Cargo.lock +++ b/src/Cargo.lock @@ -1834,6 +1834,7 @@ dependencies = [ "arena 0.0.0", "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", "rustc 0.0.0", + "rustc_data_structures 0.0.0", "rustc_errors 0.0.0", "syntax 0.0.0", "syntax_pos 0.0.0", diff --git a/src/librustc/hir/def_id.rs b/src/librustc/hir/def_id.rs index cc30fdfaca6a3..428f154c1b66a 100644 --- a/src/librustc/hir/def_id.rs +++ b/src/librustc/hir/def_id.rs @@ -86,20 +86,17 @@ impl serialize::UseSpecializedDecodable for CrateNum { /// /// Since the DefIndex is mostly treated as an opaque ID, you probably /// don't have to care about these ranges. -#[derive(Clone, Eq, Ord, PartialOrd, PartialEq, RustcEncodable, - RustcDecodable, Hash, Copy)] -pub struct DefIndex(u32); +newtype_index!(DefIndex + { + DEBUG_FORMAT = custom, -impl Idx for DefIndex { - fn new(value: usize) -> Self { - assert!(value < (u32::MAX) as usize); - DefIndex(value as u32) - } + /// The start of the "high" range of DefIndexes. + const DEF_INDEX_HI_START = 1 << 31, - fn index(self) -> usize { - self.0 as usize - } -} + /// The crate root is always assigned index 0 by the AST Map code, + /// thanks to `NodeCollector::new`. + const CRATE_DEF_INDEX = 0, + }); impl fmt::Debug for DefIndex { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { @@ -111,12 +108,6 @@ impl fmt::Debug for DefIndex { } impl DefIndex { - #[inline] - pub fn new(x: usize) -> DefIndex { - assert!(x < (u32::MAX as usize)); - DefIndex(x as u32) - } - #[inline] pub fn from_u32(x: u32) -> DefIndex { DefIndex(x) @@ -155,13 +146,6 @@ impl DefIndex { } } -/// The start of the "high" range of DefIndexes. -const DEF_INDEX_HI_START: DefIndex = DefIndex(1 << 31); - -/// The crate root is always assigned index 0 by the AST Map code, -/// thanks to `NodeCollector::new`. -pub const CRATE_DEF_INDEX: DefIndex = DefIndex(0); - #[derive(Copy, Clone, Eq, PartialEq, Hash)] pub enum DefIndexAddressSpace { Low = 0, diff --git a/src/librustc/hir/map/definitions.rs b/src/librustc/hir/map/definitions.rs index 6418df479526c..b30cc0b09c9ac 100644 --- a/src/librustc/hir/map/definitions.rs +++ b/src/librustc/hir/map/definitions.rs @@ -19,7 +19,7 @@ use hir::def_id::{CrateNum, DefId, DefIndex, LOCAL_CRATE, DefIndexAddressSpace, CRATE_DEF_INDEX}; use ich::Fingerprint; use rustc_data_structures::fx::FxHashMap; -use rustc_data_structures::indexed_vec::IndexVec; +use rustc_data_structures::indexed_vec::{IndexVec, Idx}; use rustc_data_structures::stable_hasher::StableHasher; use serialize::{Encodable, Decodable, Encoder, Decoder}; use session::CrateDisambiguator; diff --git a/src/librustc/infer/region_inference/graphviz.rs b/src/librustc/infer/region_inference/graphviz.rs index 5cf6aa350bdd5..49f57d9aef50e 100644 --- a/src/librustc/infer/region_inference/graphviz.rs +++ b/src/librustc/infer/region_inference/graphviz.rs @@ -19,6 +19,7 @@ use graphviz as dot; use hir::def_id::DefIndex; +use rustc_data_structures::indexed_vec::Idx; use ty; use middle::free_region::RegionRelations; use middle::region; diff --git a/src/librustc_metadata/decoder.rs b/src/librustc_metadata/decoder.rs index fa9b166ca942e..a57e2b96db4db 100644 --- a/src/librustc_metadata/decoder.rs +++ b/src/librustc_metadata/decoder.rs @@ -41,6 +41,7 @@ use std::str; use std::u32; use rustc_serialize::{Decodable, Decoder, SpecializedDecoder, opaque}; +use rustc_data_structures::indexed_vec::Idx; use syntax::attr; use syntax::ast::{self, Ident}; use syntax::codemap; diff --git a/src/librustc_resolve/Cargo.toml b/src/librustc_resolve/Cargo.toml index 0968ea31b754f..ab2d152b724a7 100644 --- a/src/librustc_resolve/Cargo.toml +++ b/src/librustc_resolve/Cargo.toml @@ -16,3 +16,4 @@ rustc = { path = "../librustc" } arena = { path = "../libarena" } rustc_errors = { path = "../librustc_errors" } syntax_pos = { path = "../libsyntax_pos" } +rustc_data_structures = { path = "../librustc_data_structures" } diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs index c4f159544e407..bed9f37c5157f 100644 --- a/src/librustc_resolve/lib.rs +++ b/src/librustc_resolve/lib.rs @@ -24,6 +24,7 @@ extern crate rustc_errors as errors; extern crate arena; #[macro_use] extern crate rustc; +extern crate rustc_data_structures; use self::Namespace::*; use self::TypeParameters::*; diff --git a/src/librustc_resolve/macros.rs b/src/librustc_resolve/macros.rs index 064032b888499..a52e6fcad1481 100644 --- a/src/librustc_resolve/macros.rs +++ b/src/librustc_resolve/macros.rs @@ -13,6 +13,7 @@ use {Module, ModuleKind, NameBinding, NameBindingKind, PathResult}; use Namespace::{self, MacroNS}; use build_reduced_graph::BuildReducedGraphVisitor; use resolve_imports::ImportResolver; +use rustc_data_structures::indexed_vec::Idx; use rustc::hir::def_id::{DefId, BUILTIN_MACROS_CRATE, CRATE_DEF_INDEX, DefIndex}; use rustc::hir::def::{Def, Export}; use rustc::hir::map::{self, DefCollector};