Skip to content

Commit b13251e

Browse files
committed
Merge from rustc
2 parents 969a25b + f6709bb commit b13251e

File tree

175 files changed

+2207
-1729
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

175 files changed

+2207
-1729
lines changed

Cargo.lock

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3390,6 +3390,7 @@ version = "0.0.0"
33903390
dependencies = [
33913391
"rustc_ast",
33923392
"rustc_ast_pretty",
3393+
"rustc_attr_data_structures",
33933394
"rustc_attr_parsing",
33943395
"rustc_data_structures",
33953396
"rustc_errors",
@@ -3424,7 +3425,7 @@ dependencies = [
34243425
"rustc-demangle",
34253426
"rustc_abi",
34263427
"rustc_ast",
3427-
"rustc_attr_parsing",
3428+
"rustc_attr_data_structures",
34283429
"rustc_codegen_ssa",
34293430
"rustc_data_structures",
34303431
"rustc_errors",
@@ -3467,6 +3468,7 @@ dependencies = [
34673468
"rustc_abi",
34683469
"rustc_arena",
34693470
"rustc_ast",
3471+
"rustc_attr_data_structures",
34703472
"rustc_attr_parsing",
34713473
"rustc_data_structures",
34723474
"rustc_errors",
@@ -3504,7 +3506,7 @@ dependencies = [
35043506
"rustc_abi",
35053507
"rustc_apfloat",
35063508
"rustc_ast",
3507-
"rustc_attr_parsing",
3509+
"rustc_attr_data_structures",
35083510
"rustc_data_structures",
35093511
"rustc_errors",
35103512
"rustc_fluent_macro",
@@ -3680,6 +3682,7 @@ dependencies = [
36803682
"rustc_ast",
36813683
"rustc_ast_passes",
36823684
"rustc_ast_pretty",
3685+
"rustc_attr_data_structures",
36833686
"rustc_attr_parsing",
36843687
"rustc_data_structures",
36853688
"rustc_errors",
@@ -3768,7 +3771,7 @@ dependencies = [
37683771
"rustc_abi",
37693772
"rustc_arena",
37703773
"rustc_ast",
3771-
"rustc_attr_parsing",
3774+
"rustc_attr_data_structures",
37723775
"rustc_data_structures",
37733776
"rustc_errors",
37743777
"rustc_feature",
@@ -3805,7 +3808,7 @@ dependencies = [
38053808
"itertools",
38063809
"rustc_abi",
38073810
"rustc_ast",
3808-
"rustc_attr_parsing",
3811+
"rustc_attr_data_structures",
38093812
"rustc_data_structures",
38103813
"rustc_errors",
38113814
"rustc_fluent_macro",
@@ -3950,6 +3953,7 @@ dependencies = [
39503953
"rustc_abi",
39513954
"rustc_ast",
39523955
"rustc_ast_pretty",
3956+
"rustc_attr_data_structures",
39533957
"rustc_attr_parsing",
39543958
"rustc_data_structures",
39553959
"rustc_errors",
@@ -4023,6 +4027,7 @@ dependencies = [
40234027
"odht",
40244028
"rustc_abi",
40254029
"rustc_ast",
4030+
"rustc_attr_data_structures",
40264031
"rustc_attr_parsing",
40274032
"rustc_data_structures",
40284033
"rustc_errors",
@@ -4136,7 +4141,7 @@ dependencies = [
41364141
"rustc_abi",
41374142
"rustc_arena",
41384143
"rustc_ast",
4139-
"rustc_attr_parsing",
4144+
"rustc_attr_data_structures",
41404145
"rustc_const_eval",
41414146
"rustc_data_structures",
41424147
"rustc_errors",
@@ -4162,7 +4167,7 @@ version = "0.0.0"
41624167
dependencies = [
41634168
"rustc_abi",
41644169
"rustc_ast",
4165-
"rustc_attr_parsing",
4170+
"rustc_attr_data_structures",
41664171
"rustc_data_structures",
41674172
"rustc_errors",
41684173
"rustc_fluent_macro",
@@ -4232,7 +4237,7 @@ dependencies = [
42324237
"rustc_ast",
42334238
"rustc_ast_lowering",
42344239
"rustc_ast_pretty",
4235-
"rustc_attr_parsing",
4240+
"rustc_attr_data_structures",
42364241
"rustc_data_structures",
42374242
"rustc_errors",
42384243
"rustc_expand",
@@ -4278,7 +4283,7 @@ name = "rustc_privacy"
42784283
version = "0.0.0"
42794284
dependencies = [
42804285
"rustc_ast",
4281-
"rustc_attr_parsing",
4286+
"rustc_attr_data_structures",
42824287
"rustc_data_structures",
42834288
"rustc_errors",
42844289
"rustc_fluent_macro",

compiler/rustc_ast/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#![feature(associated_type_defaults)]
1616
#![feature(box_patterns)]
1717
#![feature(if_let_guard)]
18+
#![feature(macro_metavar_expr)]
1819
#![feature(negative_impls)]
1920
#![feature(never_type)]
2021
#![feature(rustdoc_internals)]

compiler/rustc_ast/src/mut_visit.rs

Lines changed: 3 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ use thin_vec::ThinVec;
2020
use crate::ast::*;
2121
use crate::ptr::P;
2222
use crate::tokenstream::*;
23-
use crate::visit::{AssocCtxt, BoundKind, FnCtxt};
23+
use crate::visit::{AssocCtxt, BoundKind, FnCtxt, try_visit};
2424

2525
pub trait ExpectOne<A: Array> {
2626
fn expect_one(self, err: &'static str) -> A::Item;
@@ -388,6 +388,8 @@ pub trait MutVisitor: Sized {
388388
}
389389
}
390390

391+
super::common_visitor_and_walkers!((mut) MutVisitor);
392+
391393
/// Use a map-style function (`FnOnce(T) -> T`) to overwrite a `&mut T`. Useful
392394
/// when using a `flat_map_*` or `filter_map_*` method within a `visit_`
393395
/// method.
@@ -777,15 +779,6 @@ fn visit_defaultness<T: MutVisitor>(vis: &mut T, defaultness: &mut Defaultness)
777779
}
778780
}
779781

780-
// No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
781-
fn visit_safety<T: MutVisitor>(vis: &mut T, safety: &mut Safety) {
782-
match safety {
783-
Safety::Unsafe(span) => vis.visit_span(span),
784-
Safety::Safe(span) => vis.visit_span(span),
785-
Safety::Default => {}
786-
}
787-
}
788-
789782
// No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
790783
fn visit_polarity<T: MutVisitor>(vis: &mut T, polarity: &mut ImplPolarity) {
791784
match polarity {
@@ -794,14 +787,6 @@ fn visit_polarity<T: MutVisitor>(vis: &mut T, polarity: &mut ImplPolarity) {
794787
}
795788
}
796789

797-
// No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
798-
fn visit_constness<T: MutVisitor>(vis: &mut T, constness: &mut Const) {
799-
match constness {
800-
Const::Yes(span) => vis.visit_span(span),
801-
Const::No => {}
802-
}
803-
}
804-
805790
fn walk_closure_binder<T: MutVisitor>(vis: &mut T, binder: &mut ClosureBinder) {
806791
match binder {
807792
ClosureBinder::NotPresent => {}
@@ -940,15 +925,6 @@ pub fn walk_flat_map_generic_param<T: MutVisitor>(
940925
smallvec![param]
941926
}
942927

943-
fn walk_label<T: MutVisitor>(vis: &mut T, Label { ident }: &mut Label) {
944-
vis.visit_ident(ident);
945-
}
946-
947-
fn walk_lifetime<T: MutVisitor>(vis: &mut T, Lifetime { id, ident }: &mut Lifetime) {
948-
vis.visit_id(id);
949-
vis.visit_ident(ident);
950-
}
951-
952928
fn walk_generics<T: MutVisitor>(vis: &mut T, generics: &mut Generics) {
953929
let Generics { params, where_clause, span } = generics;
954930
params.flat_map_in_place(|param| vis.flat_map_generic_param(param));
@@ -1340,13 +1316,6 @@ fn walk_const_item<T: MutVisitor>(vis: &mut T, item: &mut ConstItem) {
13401316
walk_define_opaques(vis, define_opaque);
13411317
}
13421318

1343-
fn walk_fn_header<T: MutVisitor>(vis: &mut T, header: &mut FnHeader) {
1344-
let FnHeader { safety, coroutine_kind, constness, ext: _ } = header;
1345-
visit_constness(vis, constness);
1346-
coroutine_kind.as_mut().map(|coroutine_kind| vis.visit_coroutine_kind(coroutine_kind));
1347-
visit_safety(vis, safety);
1348-
}
1349-
13501319
pub fn walk_crate<T: MutVisitor>(vis: &mut T, krate: &mut Crate) {
13511320
let Crate { attrs, items, spans, id, is_placeholder: _ } = krate;
13521321
vis.visit_id(id);

compiler/rustc_ast/src/visit.rs

Lines changed: 69 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,75 @@ pub trait Visitor<'ast>: Sized {
315315
}
316316
}
317317

318+
#[macro_export]
319+
macro_rules! common_visitor_and_walkers {
320+
($(($mut: ident))? $Visitor:ident$(<$lt:lifetime>)?) => {
321+
// this is only used by the MutVisitor. We include this symmetry here to make writing other functions easier
322+
$(${ignore($lt)}
323+
#[expect(unused, rustc::pass_by_value)]
324+
#[inline]
325+
)?
326+
fn visit_span<$($lt,)? V: $Visitor$(<$lt>)?>(visitor: &mut V, span: &$($lt)? $($mut)? Span) $(-> <V as Visitor<$lt>>::Result)? {
327+
$(
328+
let _ = stringify!($mut);
329+
visitor.visit_span(span);
330+
)?
331+
$(${ignore($lt)}V::Result::output())?
332+
}
333+
334+
// this is only used by the MutVisitor. We include this symmetry here to make writing other functions easier
335+
$(${ignore($lt)}
336+
#[expect(unused, rustc::pass_by_value)]
337+
#[inline]
338+
)?
339+
fn visit_id<$($lt,)? V: $Visitor$(<$lt>)?>(visitor: &mut V, id: &$($lt)? $($mut)? NodeId) $(-> <V as Visitor<$lt>>::Result)? {
340+
$(
341+
let _ = stringify!($mut);
342+
visitor.visit_id(id);
343+
)?
344+
$(${ignore($lt)}V::Result::output())?
345+
}
346+
347+
// this is only used by the MutVisitor. We include this symmetry here to make writing other functions easier
348+
fn visit_safety<$($lt,)? V: $Visitor$(<$lt>)?>(vis: &mut V, safety: &$($lt)? $($mut)? Safety) $(-> <V as Visitor<$lt>>::Result)? {
349+
match safety {
350+
Safety::Unsafe(span) => visit_span(vis, span),
351+
Safety::Safe(span) => visit_span(vis, span),
352+
Safety::Default => { $(${ignore($lt)}V::Result::output())? }
353+
}
354+
}
355+
356+
fn visit_constness<$($lt,)? V: $Visitor$(<$lt>)?>(vis: &mut V, constness: &$($lt)? $($mut)? Const) $(-> <V as Visitor<$lt>>::Result)? {
357+
match constness {
358+
Const::Yes(span) => visit_span(vis, span),
359+
Const::No => {
360+
$(<V as Visitor<$lt>>::Result::output())?
361+
}
362+
}
363+
}
364+
365+
pub fn walk_label<$($lt,)? V: $Visitor$(<$lt>)?>(visitor: &mut V, Label { ident }: &$($lt)? $($mut)? Label) $(-> <V as Visitor<$lt>>::Result)? {
366+
visitor.visit_ident(ident)
367+
}
368+
369+
pub fn walk_fn_header<$($lt,)? V: $Visitor$(<$lt>)?>(visitor: &mut V, header: &$($lt)? $($mut)? FnHeader) $(-> <V as Visitor<$lt>>::Result)? {
370+
let FnHeader { safety, coroutine_kind, constness, ext: _ } = header;
371+
try_visit!(visit_constness(visitor, constness));
372+
if let Some(coroutine_kind) = coroutine_kind {
373+
try_visit!(visitor.visit_coroutine_kind(coroutine_kind));
374+
}
375+
visit_safety(visitor, safety)
376+
}
377+
378+
pub fn walk_lifetime<$($lt,)? V: $Visitor$(<$lt>)?>(visitor: &mut V, Lifetime { id, ident }: &$($lt)? $($mut)? Lifetime) $(-> <V as Visitor<$lt>>::Result)? {
379+
try_visit!(visit_id(visitor, id));
380+
visitor.visit_ident(ident)
381+
}
382+
};
383+
}
384+
385+
common_visitor_and_walkers!(Visitor<'a>);
386+
318387
pub fn walk_crate<'a, V: Visitor<'a>>(visitor: &mut V, krate: &'a Crate) -> V::Result {
319388
let Crate { attrs, items, spans: _, id: _, is_placeholder: _ } = krate;
320389
walk_list!(visitor, visit_attribute, attrs);
@@ -334,15 +403,6 @@ pub fn walk_local<'a, V: Visitor<'a>>(visitor: &mut V, local: &'a Local) -> V::R
334403
V::Result::output()
335404
}
336405

337-
pub fn walk_label<'a, V: Visitor<'a>>(visitor: &mut V, Label { ident }: &'a Label) -> V::Result {
338-
visitor.visit_ident(ident)
339-
}
340-
341-
pub fn walk_lifetime<'a, V: Visitor<'a>>(visitor: &mut V, lifetime: &'a Lifetime) -> V::Result {
342-
let Lifetime { id: _, ident } = lifetime;
343-
visitor.visit_ident(ident)
344-
}
345-
346406
pub fn walk_poly_trait_ref<'a, V>(visitor: &mut V, trait_ref: &'a PolyTraitRef) -> V::Result
347407
where
348408
V: Visitor<'a>,
@@ -926,12 +986,6 @@ pub fn walk_fn_ret_ty<'a, V: Visitor<'a>>(visitor: &mut V, ret_ty: &'a FnRetTy)
926986
V::Result::output()
927987
}
928988

929-
pub fn walk_fn_header<'a, V: Visitor<'a>>(visitor: &mut V, fn_header: &'a FnHeader) -> V::Result {
930-
let FnHeader { safety: _, coroutine_kind, constness: _, ext: _ } = fn_header;
931-
visit_opt!(visitor, visit_coroutine_kind, coroutine_kind.as_ref());
932-
V::Result::output()
933-
}
934-
935989
pub fn walk_fn_decl<'a, V: Visitor<'a>>(
936990
visitor: &mut V,
937991
FnDecl { inputs, output }: &'a FnDecl,

compiler/rustc_attr_parsing/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,8 @@
6060
//! `#[stable(...)]` and `#[unstable()]` cannot occur together, and both semantically define
6161
//! a "stability" of an item. So, the stability attribute has an
6262
//! [`AttributeParser`](attributes::AttributeParser) that recognizes both the `#[stable()]`
63-
//! and `#[unstable()]` syntactic attributes, and at the end produce a single [`AttributeKind::Stability`].
63+
//! and `#[unstable()]` syntactic attributes, and at the end produce a single
64+
//! [`AttributeKind::Stability`](rustc_attr_data_structures::AttributeKind::Stability).
6465
//!
6566
//! As a rule of thumb, when a syntactical attribute can be applied more than once, they should be
6667
//! combined into a single semantic attribute. For example:
@@ -91,6 +92,5 @@ mod session_diagnostics;
9192
pub use attributes::cfg::*;
9293
pub use attributes::util::{find_crate_name, is_builtin_attr, parse_version};
9394
pub use context::{AttributeParser, OmitDoc};
94-
pub use rustc_attr_data_structures::*;
9595

9696
rustc_fluent_macro::fluent_messages! { "../messages.ftl" }

compiler/rustc_builtin_macros/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ doctest = false
1010
# tidy-alphabetical-start
1111
rustc_ast = { path = "../rustc_ast" }
1212
rustc_ast_pretty = { path = "../rustc_ast_pretty" }
13+
rustc_attr_data_structures = { path = "../rustc_attr_data_structures" }
1314
rustc_attr_parsing = { path = "../rustc_attr_parsing" }
1415
rustc_data_structures = { path = "../rustc_data_structures" }
1516
rustc_errors = { path = "../rustc_errors" }

0 commit comments

Comments
 (0)