diff --git a/src/librustc/hir/def_id.rs b/src/librustc/hir/def_id.rs index 1dc668066d8b..cd91b85689b3 100644 --- a/src/librustc/hir/def_id.rs +++ b/src/librustc/hir/def_id.rs @@ -16,7 +16,7 @@ use std::fmt; use std::u32; newtype_index! { - pub struct CrateNum { + pub struct CrateId { ENCODABLE = custom } } @@ -38,7 +38,7 @@ pub enum CrateNum { impl ::std::fmt::Debug for CrateNum { fn fmt(&self, fmt: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { match self { - CrateNum::Index(id) => write!(fmt, "crate{}", id.0), + CrateNum::Index(id) => write!(fmt, "crate{}", id.private), CrateNum::Invalid => write!(fmt, "invalid crate"), CrateNum::BuiltinMacros => write!(fmt, "bultin macros crate"), CrateNum::ReservedForIncrCompCache => write!(fmt, "crate for decoding incr comp cache"), @@ -48,7 +48,7 @@ impl ::std::fmt::Debug for CrateNum { /// Item definitions in the currently-compiled crate would have the CrateNum /// LOCAL_CRATE in their DefId. -pub const LOCAL_CRATE: CrateNum = CrateNum::Index(CrateId(0)); +pub const LOCAL_CRATE: CrateNum = CrateNum::Index(CrateId::from_u32_const(0)); impl Idx for CrateNum { @@ -71,13 +71,35 @@ impl CrateNum { CrateNum::from_usize(x) } + pub fn from_usize(x: usize) -> CrateNum { + CrateNum::Index(CrateId::from_usize(x)) + } + + pub fn from_u32(x: u32) -> CrateNum { + CrateNum::Index(CrateId::from_u32(x)) + } + + pub fn as_usize(self) -> usize { + match self { + CrateNum::Index(id) => id.as_usize(), + _ => bug!("tried to get index of nonstandard crate {:?}", self), + } + } + + pub fn as_u32(self) -> u32 { + match self { + CrateNum::Index(id) => id.as_u32(), + _ => bug!("tried to get index of nonstandard crate {:?}", self), + } + } + pub fn as_def_id(&self) -> DefId { DefId { krate: *self, index: CRATE_DEF_INDEX } } } impl fmt::Display for CrateNum { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { match self { - CrateNum::Index(id) => fmt::Display::fmt(&id.0, f), + CrateNum::Index(id) => fmt::Display::fmt(&id.private, f), CrateNum::Invalid => write!(f, "invalid crate"), CrateNum::BuiltinMacros => write!(f, "bultin macros crate"), CrateNum::ReservedForIncrCompCache => write!(f, "crate for decoding incr comp cache"), diff --git a/src/librustc/middle/region.rs b/src/librustc/middle/region.rs index 6fa5d363ffa7..56960675b741 100644 --- a/src/librustc/middle/region.rs +++ b/src/librustc/middle/region.rs @@ -143,7 +143,7 @@ pub enum ScopeData { /// and thus does not include EXPR_2, but covers the `...`. newtype_index! { - pub struct FirstStatementIndex; + pub struct FirstStatementIndex { .. } } impl_stable_hash_for!(struct ::middle::region::FirstStatementIndex { private });