diff --git a/compiler/rustc_ast/src/ast.rs b/compiler/rustc_ast/src/ast.rs index 49649188f58..4140bff6e29 100644 --- a/compiler/rustc_ast/src/ast.rs +++ b/compiler/rustc_ast/src/ast.rs @@ -2555,8 +2555,8 @@ pub enum AttrStyle { rustc_index::newtype_index! { #[custom_encodable] + #[debug_format = "AttrId({})]"] pub struct AttrId { - DEBUG_FORMAT = "AttrId({})" } } diff --git a/compiler/rustc_ast/src/node_id.rs b/compiler/rustc_ast/src/node_id.rs index 7b5acc3f485..8ba6b8c2c33 100644 --- a/compiler/rustc_ast/src/node_id.rs +++ b/compiler/rustc_ast/src/node_id.rs @@ -8,8 +8,8 @@ rustc_index::newtype_index! { /// This is later turned into [`DefId`] and `HirId` for the HIR. /// /// [`DefId`]: rustc_span::def_id::DefId + #[debug_format = "NodeId({})"] pub struct NodeId { - DEBUG_FORMAT = "NodeId({})" } } diff --git a/compiler/rustc_borrowck/src/constraints/mod.rs b/compiler/rustc_borrowck/src/constraints/mod.rs index 84a93e5f72e..0e5a874735c 100644 --- a/compiler/rustc_borrowck/src/constraints/mod.rs +++ b/compiler/rustc_borrowck/src/constraints/mod.rs @@ -115,13 +115,13 @@ impl<'tcx> fmt::Debug for OutlivesConstraint<'tcx> { } rustc_index::newtype_index! { + #[debug_format = "OutlivesConstraintIndex({})"] pub struct OutlivesConstraintIndex { - DEBUG_FORMAT = "OutlivesConstraintIndex({})" } } rustc_index::newtype_index! { + #[debug_format = "ConstraintSccIndex({})"] pub struct ConstraintSccIndex { - DEBUG_FORMAT = "ConstraintSccIndex({})" } } diff --git a/compiler/rustc_borrowck/src/dataflow.rs b/compiler/rustc_borrowck/src/dataflow.rs index f825b1d8f70..6f533cec9fa 100644 --- a/compiler/rustc_borrowck/src/dataflow.rs +++ b/compiler/rustc_borrowck/src/dataflow.rs @@ -108,8 +108,8 @@ impl_visitable! { } rustc_index::newtype_index! { + #[debug_format = "bw{}"] pub struct BorrowIndex { - DEBUG_FORMAT = "bw{}" } } diff --git a/compiler/rustc_borrowck/src/location.rs b/compiler/rustc_borrowck/src/location.rs index 9fa7e218b1b..0614163474c 100644 --- a/compiler/rustc_borrowck/src/location.rs +++ b/compiler/rustc_borrowck/src/location.rs @@ -20,8 +20,8 @@ pub struct LocationTable { } rustc_index::newtype_index! { + #[debug_format = "LocationIndex({})"] pub struct LocationIndex { - DEBUG_FORMAT = "LocationIndex({})" } } diff --git a/compiler/rustc_borrowck/src/member_constraints.rs b/compiler/rustc_borrowck/src/member_constraints.rs index b5e00f471d2..ccf6fcac9d2 100644 --- a/compiler/rustc_borrowck/src/member_constraints.rs +++ b/compiler/rustc_borrowck/src/member_constraints.rs @@ -55,8 +55,8 @@ pub(crate) struct NllMemberConstraint<'tcx> { } rustc_index::newtype_index! { + #[debug_format = "MemberConstraintIndex({})"] pub(crate) struct NllMemberConstraintIndex { - DEBUG_FORMAT = "MemberConstraintIndex({})" } } diff --git a/compiler/rustc_borrowck/src/region_infer/values.rs b/compiler/rustc_borrowck/src/region_infer/values.rs index 7498ddccf19..c3dfeedc205 100644 --- a/compiler/rustc_borrowck/src/region_infer/values.rs +++ b/compiler/rustc_borrowck/src/region_infer/values.rs @@ -90,12 +90,14 @@ impl RegionValueElements { rustc_index::newtype_index! { /// A single integer representing a `Location` in the MIR control-flow /// graph. Constructed efficiently from `RegionValueElements`. - pub struct PointIndex { DEBUG_FORMAT = "PointIndex({})" } + #[debug_format = "PointIndex({})"] + pub struct PointIndex {} } rustc_index::newtype_index! { /// A single integer representing a `ty::Placeholder`. - pub struct PlaceholderIndex { DEBUG_FORMAT = "PlaceholderIndex({})" } + #[debug_format = "PlaceholderIndex({})"] + pub struct PlaceholderIndex {} } /// An individual element in a region value -- the value of a diff --git a/compiler/rustc_hir_typeck/src/fn_ctxt/arg_matrix.rs b/compiler/rustc_hir_typeck/src/fn_ctxt/arg_matrix.rs index fc83994caf5..3f59e8ddf15 100644 --- a/compiler/rustc_hir_typeck/src/fn_ctxt/arg_matrix.rs +++ b/compiler/rustc_hir_typeck/src/fn_ctxt/arg_matrix.rs @@ -4,14 +4,14 @@ use rustc_index::vec::IndexVec; use rustc_middle::ty::error::TypeError; rustc_index::newtype_index! { + #[debug_format = "ExpectedIdx({})"] pub(crate) struct ExpectedIdx { - DEBUG_FORMAT = "ExpectedIdx({})", } } rustc_index::newtype_index! { + #[debug_format = "ProvidedIdx({})"] pub(crate) struct ProvidedIdx { - DEBUG_FORMAT = "ProvidedIdx({})", } } diff --git a/compiler/rustc_hir_typeck/src/generator_interior/drop_ranges/mod.rs b/compiler/rustc_hir_typeck/src/generator_interior/drop_ranges/mod.rs index 2abcadcc9ce..3763373ad68 100644 --- a/compiler/rustc_hir_typeck/src/generator_interior/drop_ranges/mod.rs +++ b/compiler/rustc_hir_typeck/src/generator_interior/drop_ranges/mod.rs @@ -96,14 +96,14 @@ fn for_each_consumable<'tcx>(hir: Map<'tcx>, place: TrackedValue, mut f: impl Fn } rustc_index::newtype_index! { + #[debug_format = "id({})"] pub struct PostOrderId { - DEBUG_FORMAT = "id({})", } } rustc_index::newtype_index! { + #[debug_format = "hidx({})"] pub struct TrackedValueIndex { - DEBUG_FORMAT = "hidx({})", } } diff --git a/compiler/rustc_infer/src/infer/region_constraints/leak_check.rs b/compiler/rustc_infer/src/infer/region_constraints/leak_check.rs index 22b4bbb17d4..64dc0e8f56d 100644 --- a/compiler/rustc_infer/src/infer/region_constraints/leak_check.rs +++ b/compiler/rustc_infer/src/infer/region_constraints/leak_check.rs @@ -357,14 +357,14 @@ impl<'tcx> SccUniverse<'tcx> { } rustc_index::newtype_index! { + #[debug_format = "LeakCheckNode({})"] struct LeakCheckNode { - DEBUG_FORMAT = "LeakCheckNode({})" } } rustc_index::newtype_index! { + #[debug_format = "LeakCheckScc({})"] struct LeakCheckScc { - DEBUG_FORMAT = "LeakCheckScc({})" } } diff --git a/compiler/rustc_macros/src/newtype.rs b/compiler/rustc_macros/src/newtype.rs index 99f3f638d2f..7b7e475da5b 100644 --- a/compiler/rustc_macros/src/newtype.rs +++ b/compiler/rustc_macros/src/newtype.rs @@ -3,22 +3,6 @@ use quote::quote; use syn::parse::*; use syn::*; -mod kw { - syn::custom_keyword!(DEBUG_FORMAT); - syn::custom_keyword!(MAX); - syn::custom_keyword!(custom); -} - -#[derive(Debug)] -enum DebugFormat { - // The user will provide a custom `Debug` impl, so we shouldn't generate - // one - Custom, - // Use the specified format string in the generated `Debug` impl - // By default, this is "{}" - Format(String), -} - // We parse the input and emit the output in a single step. // This field stores the final macro output struct Newtype(TokenStream); @@ -35,7 +19,7 @@ impl Parse for Newtype { // Any additional `#[derive]` macro paths to apply let mut derive_paths: Vec = Vec::new(); - let mut debug_format: Option = None; + let mut debug_format: Option = None; let mut max = None; let mut consts = Vec::new(); let mut encodable = true; @@ -65,7 +49,18 @@ impl Parse for Newtype { }; if let Some(old) = max.replace(literal.lit) { - panic!("Specified multiple MAX: {:?}", old); + panic!("Specified multiple max: {:?}", old); + } + + false + } + "debug_format" => { + let Ok(Meta::NameValue(literal) )= attr.parse_meta() else { + panic!("#[debug_format = FMT] attribute requires a format"); + }; + + if let Some(old) = debug_format.replace(literal.lit) { + panic!("Specified multiple debug format options: {:?}", old); } false @@ -79,23 +74,6 @@ impl Parse for Newtype { body.parse::()?; } else { loop { - if body.lookahead1().peek(kw::DEBUG_FORMAT) { - body.parse::()?; - body.parse::()?; - let new_debug_format = if body.lookahead1().peek(kw::custom) { - body.parse::()?; - DebugFormat::Custom - } else { - let format_str: LitStr = body.parse()?; - DebugFormat::Format(format_str.value()) - }; - try_comma()?; - if let Some(old) = debug_format.replace(new_debug_format) { - panic!("Specified multiple debug format options: {:?}", old); - } - continue; - } - // We've parsed everything that the user provided, so we're done if body.is_empty() { break; @@ -112,7 +90,9 @@ impl Parse for Newtype { } } - let debug_format = debug_format.unwrap_or(DebugFormat::Format("{}".to_string())); + let debug_format = + debug_format.unwrap_or_else(|| Lit::Str(LitStr::new("{}", Span::call_site()))); + // shave off 256 indices at the end to allow space for packing these indices into enums let max = max.unwrap_or_else(|| Lit::Int(LitInt::new("0xFFFF_FF00", Span::call_site()))); @@ -167,18 +147,14 @@ impl Parse for Newtype { quote! {} }; - let debug_impl = match debug_format { - DebugFormat::Custom => quote! {}, - DebugFormat::Format(format) => { - quote! { - impl ::std::fmt::Debug for #name { - fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { - write!(fmt, #format, self.as_u32()) - } - } + let debug_impl = quote! { + impl ::std::fmt::Debug for #name { + fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + write!(fmt, #debug_format, self.as_u32()) } } }; + let spec_partial_eq_impl = if let Lit::Int(max) = &max { if let Ok(max_val) = max.base10_parse::() { quote! { diff --git a/compiler/rustc_middle/src/mir/coverage.rs b/compiler/rustc_middle/src/mir/coverage.rs index 3025e2dd134..8806077175b 100644 --- a/compiler/rustc_middle/src/mir/coverage.rs +++ b/compiler/rustc_middle/src/mir/coverage.rs @@ -12,8 +12,8 @@ rustc_index::newtype_index! { /// constant value of `0`. #[derive(HashStable)] #[max = 0xFFFF_FFFF] + #[debug_format = "ExpressionOperandId({})"] pub struct ExpressionOperandId { - DEBUG_FORMAT = "ExpressionOperandId({})", } } @@ -34,8 +34,8 @@ impl ExpressionOperandId { rustc_index::newtype_index! { #[derive(HashStable)] #[max = 0xFFFF_FFFF] + #[debug_format = "CounterValueReference({})"] pub struct CounterValueReference { - DEBUG_FORMAT = "CounterValueReference({})", } } @@ -58,8 +58,8 @@ rustc_index::newtype_index! { /// Values descend from u32::MAX. #[derive(HashStable)] #[max = 0xFFFF_FFFF] + #[debug_format = "InjectedExpressionId({})"] pub struct InjectedExpressionId { - DEBUG_FORMAT = "InjectedExpressionId({})", } } @@ -69,8 +69,8 @@ rustc_index::newtype_index! { /// Values ascend from 0. #[derive(HashStable)] #[max = 0xFFFF_FFFF] + #[debug_format = "InjectedExpressionIndex({})"] pub struct InjectedExpressionIndex { - DEBUG_FORMAT = "InjectedExpressionIndex({})", } } @@ -80,8 +80,8 @@ rustc_index::newtype_index! { /// "mapgen" process. They cannot be computed algorithmically, from the other `newtype_index`s. #[derive(HashStable)] #[max = 0xFFFF_FFFF] + #[debug_format = "MappedExpressionIndex({})"] pub struct MappedExpressionIndex { - DEBUG_FORMAT = "MappedExpressionIndex({})", } } diff --git a/compiler/rustc_middle/src/mir/mod.rs b/compiler/rustc_middle/src/mir/mod.rs index 0b4fc253fef..6057fdcaebb 100644 --- a/compiler/rustc_middle/src/mir/mod.rs +++ b/compiler/rustc_middle/src/mir/mod.rs @@ -655,8 +655,8 @@ impl SourceInfo { rustc_index::newtype_index! { #[derive(HashStable)] + #[debug_format = "_{}"] pub struct Local { - DEBUG_FORMAT = "_{}", const RETURN_PLACE = 0, } } @@ -1147,8 +1147,8 @@ rustc_index::newtype_index! { /// [`CriticalCallEdges`]: ../../rustc_const_eval/transform/add_call_guards/enum.AddCallGuards.html#variant.CriticalCallEdges /// [guide-mir]: https://rustc-dev-guide.rust-lang.org/mir/ #[derive(HashStable)] + #[debug_format = "bb{}"] pub struct BasicBlock { - DEBUG_FORMAT = "bb{}", const START_BLOCK = 0, } } @@ -1531,8 +1531,8 @@ rustc_index::newtype_index! { /// [CFG]: https://rustc-dev-guide.rust-lang.org/appendix/background.html#cfg /// [mir-datatypes]: https://rustc-dev-guide.rust-lang.org/mir/index.html#mir-data-types #[derive(HashStable)] + #[debug_format = "field[{}]"] pub struct Field { - DEBUG_FORMAT = "field[{}]" } } @@ -1758,8 +1758,8 @@ impl Debug for Place<'_> { rustc_index::newtype_index! { #[derive(HashStable)] + #[debug_format = "scope[{}]"] pub struct SourceScope { - DEBUG_FORMAT = "scope[{}]", const OUTERMOST_SOURCE_SCOPE = 0, } } @@ -2756,8 +2756,8 @@ impl<'tcx> TypeVisitable<'tcx> for UserTypeProjection { rustc_index::newtype_index! { #[derive(HashStable)] + #[debug_format = "promoted[{}]"] pub struct Promoted { - DEBUG_FORMAT = "promoted[{}]" } } diff --git a/compiler/rustc_middle/src/mir/query.rs b/compiler/rustc_middle/src/mir/query.rs index 4db3ded34ea..160e9691e69 100644 --- a/compiler/rustc_middle/src/mir/query.rs +++ b/compiler/rustc_middle/src/mir/query.rs @@ -131,8 +131,8 @@ pub struct UnsafetyCheckResult { rustc_index::newtype_index! { #[derive(HashStable)] + #[debug_format = "_{}"] pub struct GeneratorSavedLocal { - DEBUG_FORMAT = "_{}", } } diff --git a/compiler/rustc_middle/src/thir.rs b/compiler/rustc_middle/src/thir.rs index 8bef9dfe099..ad8f873bf9b 100644 --- a/compiler/rustc_middle/src/thir.rs +++ b/compiler/rustc_middle/src/thir.rs @@ -35,8 +35,8 @@ macro_rules! thir_with_elements { $( newtype_index! { #[derive(HashStable)] + #[debug_format = $format] pub struct $id { - DEBUG_FORMAT = $format } } )* diff --git a/compiler/rustc_middle/src/ty/structural_impls.rs b/compiler/rustc_middle/src/ty/structural_impls.rs index 3c6800cf293..30073b541ec 100644 --- a/compiler/rustc_middle/src/ty/structural_impls.rs +++ b/compiler/rustc_middle/src/ty/structural_impls.rs @@ -99,12 +99,6 @@ impl<'tcx> fmt::Debug for ty::ConstVid<'tcx> { } } -impl fmt::Debug for ty::RegionVid { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - write!(f, "'_#{}r", self.index()) - } -} - impl<'tcx> fmt::Debug for ty::TraitRef<'tcx> { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { with_no_trimmed_paths!(fmt::Display::fmt(self, f)) diff --git a/compiler/rustc_middle/src/ty/sty.rs b/compiler/rustc_middle/src/ty/sty.rs index 66aeebab88b..3f22b0e5a9a 100644 --- a/compiler/rustc_middle/src/ty/sty.rs +++ b/compiler/rustc_middle/src/ty/sty.rs @@ -1378,8 +1378,8 @@ pub struct ConstVid<'tcx> { rustc_index::newtype_index! { /// A **region** (lifetime) **v**ariable **ID**. #[derive(HashStable)] + #[debug_format = "'_#{}r"] pub struct RegionVid { - DEBUG_FORMAT = custom, } } diff --git a/compiler/rustc_middle/src/ty/typeck_results.rs b/compiler/rustc_middle/src/ty/typeck_results.rs index 1a8927558c9..8483b1745c7 100644 --- a/compiler/rustc_middle/src/ty/typeck_results.rs +++ b/compiler/rustc_middle/src/ty/typeck_results.rs @@ -609,8 +609,8 @@ impl<'a, V> LocalTableInContextMut<'a, V> { rustc_index::newtype_index! { #[derive(HashStable)] + #[debug_format = "UserType({})"] pub struct UserTypeAnnotationIndex { - DEBUG_FORMAT = "UserType({})", const START_INDEX = 0, } } diff --git a/compiler/rustc_mir_dataflow/src/move_paths/mod.rs b/compiler/rustc_mir_dataflow/src/move_paths/mod.rs index b36e268cf8b..f286aff8420 100644 --- a/compiler/rustc_mir_dataflow/src/move_paths/mod.rs +++ b/compiler/rustc_mir_dataflow/src/move_paths/mod.rs @@ -14,8 +14,8 @@ use self::abs_domain::{AbstractElem, Lift}; mod abs_domain; rustc_index::newtype_index! { + #[debug_format = "mp{}"] pub struct MovePathIndex { - DEBUG_FORMAT = "mp{}" } } @@ -26,14 +26,14 @@ impl polonius_engine::Atom for MovePathIndex { } rustc_index::newtype_index! { + #[debug_format = "mo{}"] pub struct MoveOutIndex { - DEBUG_FORMAT = "mo{}" } } rustc_index::newtype_index! { + #[debug_format = "in{}"] pub struct InitIndex { - DEBUG_FORMAT = "in{}" } } diff --git a/compiler/rustc_mir_transform/src/coverage/graph.rs b/compiler/rustc_mir_transform/src/coverage/graph.rs index 782129be088..40ed6ceb839 100644 --- a/compiler/rustc_mir_transform/src/coverage/graph.rs +++ b/compiler/rustc_mir_transform/src/coverage/graph.rs @@ -282,8 +282,8 @@ impl graph::WithPredecessors for CoverageGraph { rustc_index::newtype_index! { /// A node in the control-flow graph of CoverageGraph. + #[debug_format = "bcb{}"] pub(super) struct BasicCoverageBlock { - DEBUG_FORMAT = "bcb{}", const START_BCB = 0, } } diff --git a/compiler/rustc_passes/src/liveness.rs b/compiler/rustc_passes/src/liveness.rs index 1f65cc8b609..bfbe65b5bfc 100644 --- a/compiler/rustc_passes/src/liveness.rs +++ b/compiler/rustc_passes/src/liveness.rs @@ -108,14 +108,14 @@ use std::rc::Rc; mod rwu_table; rustc_index::newtype_index! { + #[debug_format = "v({})"] pub struct Variable { - DEBUG_FORMAT = "v({})", } } rustc_index::newtype_index! { + #[debug_format = "ln({})"] pub struct LiveNode { - DEBUG_FORMAT = "ln({})", } } diff --git a/compiler/rustc_span/src/def_id.rs b/compiler/rustc_span/src/def_id.rs index 326dce7838d..5d15757f1ab 100644 --- a/compiler/rustc_span/src/def_id.rs +++ b/compiler/rustc_span/src/def_id.rs @@ -11,8 +11,8 @@ use std::hash::{Hash, Hasher}; rustc_index::newtype_index! { #[custom_encodable] + #[debug_format = "crate{}"] pub struct CrateNum { - DEBUG_FORMAT = "crate{}" } } @@ -195,8 +195,8 @@ rustc_index::newtype_index! { /// particular definition. It should really be considered an interned /// shorthand for a particular DefPath. #[custom_encodable] // (only encodable in metadata) + #[debug_format = "DefIndex({})"] pub struct DefIndex { - DEBUG_FORMAT = "DefIndex({})", /// The crate root is always assigned index 0 by the AST Map code, /// thanks to `NodeCollector::new`. const CRATE_DEF_INDEX = 0, diff --git a/compiler/rustc_span/src/hygiene.rs b/compiler/rustc_span/src/hygiene.rs index 2de559c5a70..f80b5d99df6 100644 --- a/compiler/rustc_span/src/hygiene.rs +++ b/compiler/rustc_span/src/hygiene.rs @@ -84,8 +84,8 @@ rustc_index::newtype_index! { /// A unique ID associated with a macro invocation and expansion. #[custom_encodable] #[no_ord_impl] + #[debug_format = "expn{}"] pub struct LocalExpnId { - DEBUG_FORMAT = "expn{}" } } diff --git a/compiler/rustc_type_ir/src/lib.rs b/compiler/rustc_type_ir/src/lib.rs index c992dbccd62..5a6ee6721d3 100644 --- a/compiler/rustc_type_ir/src/lib.rs +++ b/compiler/rustc_type_ir/src/lib.rs @@ -301,8 +301,8 @@ rustc_index::newtype_index! { /// /// [dbi]: https://en.wikipedia.org/wiki/De_Bruijn_index #[derive(HashStable_Generic)] + #[debug_format = "DebruijnIndex({})"] pub struct DebruijnIndex { - DEBUG_FORMAT = "DebruijnIndex({})", const INNERMOST = 0, } } @@ -499,8 +499,8 @@ pub struct FloatVarValue(pub FloatTy); rustc_index::newtype_index! { /// A **ty**pe **v**ariable **ID**. + #[debug_format = "_#{}t"] pub struct TyVid { - DEBUG_FORMAT = "_#{}t" } } @@ -788,8 +788,8 @@ rustc_index::newtype_index! { /// type -- an idealized representative of "types in general" that we /// use for checking generic functions. #[derive(HashStable_Generic)] + #[debug_format = "U{}"] pub struct UniverseIndex { - DEBUG_FORMAT = "U{}", } }