Rollup merge of #45325 - spastorino:first_statement_index_with_macro, r=nikomatsakis

Generate FirstStatementIndex using newtype_index macro
This commit is contained in:
kennytm 2017-10-19 01:59:51 +08:00 committed by GitHub
commit 0d4dbbab46
3 changed files with 9 additions and 24 deletions

View File

@ -518,7 +518,7 @@ impl_stable_hash_for!(enum ty::cast::CastKind {
FnPtrAddrCast FnPtrAddrCast
}); });
impl_stable_hash_for!(struct ::middle::region::FirstStatementIndex { idx }); impl_stable_hash_for!(tuple_struct ::middle::region::FirstStatementIndex { idx });
impl_stable_hash_for!(struct ::middle::region::Scope { id, code }); impl_stable_hash_for!(struct ::middle::region::Scope { id, code });
impl<'gcx> ToStableHashKey<StableHashingContext<'gcx>> for region::Scope { impl<'gcx> ToStableHashKey<StableHashingContext<'gcx>> for region::Scope {

View File

@ -156,26 +156,11 @@ pub struct BlockRemainder {
pub first_statement_index: FirstStatementIndex, pub first_statement_index: FirstStatementIndex,
} }
#[derive(Clone, PartialEq, PartialOrd, Eq, Ord, Hash, RustcEncodable, newtype_index!(FirstStatementIndex
RustcDecodable, Copy)] {
pub struct FirstStatementIndex { pub idx: u32 } DEBUG_NAME = "",
MAX = SCOPE_DATA_REMAINDER_MAX,
impl Idx for FirstStatementIndex { });
fn new(idx: usize) -> Self {
assert!(idx <= SCOPE_DATA_REMAINDER_MAX as usize);
FirstStatementIndex { idx: idx as u32 }
}
fn index(self) -> usize {
self.idx as usize
}
}
impl fmt::Debug for FirstStatementIndex {
fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
fmt::Debug::fmt(&self.index(), formatter)
}
}
impl From<ScopeData> for Scope { impl From<ScopeData> for Scope {
#[inline] #[inline]
@ -208,7 +193,7 @@ impl Scope {
SCOPE_DATA_DESTRUCTION => ScopeData::Destruction(self.id), SCOPE_DATA_DESTRUCTION => ScopeData::Destruction(self.id),
idx => ScopeData::Remainder(BlockRemainder { idx => ScopeData::Remainder(BlockRemainder {
block: self.id, block: self.id,
first_statement_index: FirstStatementIndex { idx } first_statement_index: FirstStatementIndex::new(idx as usize)
}) })
} }
} }

View File

@ -65,7 +65,7 @@ macro_rules! newtype_index {
(@type[$type:ident] @max[$max:expr] @debug_name[$debug_name:expr]) => ( (@type[$type:ident] @max[$max:expr] @debug_name[$debug_name:expr]) => (
#[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, #[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord,
RustcEncodable, RustcDecodable)] RustcEncodable, RustcDecodable)]
pub struct $type(u32); pub struct $type(pub u32);
impl Idx for $type { impl Idx for $type {
fn new(value: usize) -> Self { fn new(value: usize) -> Self {
@ -99,7 +99,7 @@ macro_rules! newtype_index {
// Replace existing default for max // Replace existing default for max
(@type[$type:ident] @max[$_max:expr] @debug_name[$debug_name:expr] (@type[$type:ident] @max[$_max:expr] @debug_name[$debug_name:expr]
MAX = $max:expr, $($tokens:tt)*) => ( MAX = $max:expr, $($tokens:tt)*) => (
newtype_index!(@type[$type] @max[$max] @debug_name[$debug_name] $(tokens)*); newtype_index!(@type[$type] @max[$max] @debug_name[$debug_name] $($tokens)*);
); );
// Replace existing default for debug_name // Replace existing default for debug_name