Skip to content

Commit 1e0df74

Browse files
committed
Auto merge of #133120 - matthiaskrgr:rollup-4actosy, r=matthiaskrgr
Rollup of 7 pull requests Successful merges: - #131717 (Stabilize `const_atomic_from_ptr`) - #132134 (Remove `ResultsVisitable`) - #132449 (mark is_val_statically_known intrinsic as stably const-callable) - #132569 (rustdoc search: allow queries to end in an empty path segment) - #132787 (Unify FnKind between AST visitors and make WalkItemKind more straight forward) - #132832 (Deny capturing late-bound ty/const params in nested opaques) - #133097 (Opt out TaKO8Ki from review rotation for now) r? `@ghost` `@rustbot` modify labels: rollup
2 parents ee4a56e + 17a9a7e commit 1e0df74

39 files changed

Lines changed: 498 additions & 437 deletions

File tree

‎compiler/rustc_ast/src/mut_visit.rs‎

Lines changed: 92 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ use crate::ast::*;
2323
usecrate::ptr::P;
2424
usecrate::token::{self,Token};
2525
usecrate::tokenstream::*;
26-
usecrate::visit::{AssocCtxt,BoundKind};
26+
usecrate::visit::{AssocCtxt,BoundKind,FnCtxt};
2727

2828
pubtraitExpectOne<A:Array>{
2929
fnexpect_one(self,err:&'staticstr) -> A::Item;
@@ -37,7 +37,16 @@ impl<A: Array> ExpectOne<A> for SmallVec<A> {
3737
}
3838

3939
pubtraitWalkItemKind{
40-
fnwalk(&mutself,span:Span,id:NodeId,visitor:&mutimplMutVisitor);
40+
typeCtxt;
41+
fnwalk(
42+
&mutself,
43+
span:Span,
44+
id:NodeId,
45+
ident:&mutIdent,
46+
visibility:&mutVisibility,
47+
ctxt:Self::Ctxt,
48+
visitor:&mutimplMutVisitor,
49+
);
4150
}
4251

4352
pubtraitMutVisitor:Sized{
@@ -114,9 +123,9 @@ pub trait MutVisitor: Sized {
114123
fnflat_map_assoc_item(
115124
&mutself,
116125
i:P<AssocItem>,
117-
_ctxt:AssocCtxt,
126+
ctxt:AssocCtxt,
118127
) -> SmallVec<[P<AssocItem>;1]>{
119-
walk_flat_map_item(self, i)
128+
walk_flat_map_assoc_item(self, i, ctxt)
120129
}
121130

122131
fnvisit_fn_decl(&mutself,d:&mutP<FnDecl>){
@@ -880,7 +889,7 @@ fn walk_coroutine_kind<T: MutVisitor>(vis: &mut T, coroutine_kind: &mut Coroutin
880889

881890
fnwalk_fn<T:MutVisitor>(vis:&mutT,kind:FnKind<'_>){
882891
match kind {
883-
FnKind::Fn(FnSig{ header, decl, span }, generics, body) => {
892+
FnKind::Fn(_ctxt, _ident,FnSig{ header, decl, span }, _visibility, generics, body) => {
884893
// Identifier and visibility are visited as a part of the item.
885894
vis.visit_fn_header(header);
886895
vis.visit_generics(generics);
@@ -890,8 +899,9 @@ fn walk_fn<T: MutVisitor>(vis: &mut T, kind: FnKind<'_>) {
890899
}
891900
vis.visit_span(span);
892901
}
893-
FnKind::Closure(binder, decl, body) => {
902+
FnKind::Closure(binder,coroutine_kind,decl, body) => {
894903
vis.visit_closure_binder(binder);
904+
coroutine_kind.as_mut().map(|coroutine_kind| vis.visit_coroutine_kind(coroutine_kind));
895905
vis.visit_fn_decl(decl);
896906
vis.visit_expr(body);
897907
}
@@ -1079,17 +1089,29 @@ pub fn walk_block<T: MutVisitor>(vis: &mut T, block: &mut P<Block>) {
10791089
vis.visit_span(span);
10801090
}
10811091

1082-
pubfnwalk_item_kind(
1083-
kind:&mutimplWalkItemKind,
1092+
pubfnwalk_item_kind<K:WalkItemKind>(
1093+
kind:&mutK,
10841094
span:Span,
10851095
id:NodeId,
1096+
ident:&mutIdent,
1097+
visibility:&mutVisibility,
1098+
ctxt:K::Ctxt,
10861099
vis:&mutimplMutVisitor,
10871100
){
1088-
kind.walk(span, id, vis)
1101+
kind.walk(span, id,ident, visibility, ctxt,vis)
10891102
}
10901103

10911104
implWalkItemKindforItemKind{
1092-
fnwalk(&mutself,span:Span,id:NodeId,vis:&mutimplMutVisitor){
1105+
typeCtxt = ();
1106+
fnwalk(
1107+
&mutself,
1108+
span:Span,
1109+
id:NodeId,
1110+
ident:&mutIdent,
1111+
visibility:&mutVisibility,
1112+
_ctxt:Self::Ctxt,
1113+
vis:&mutimplMutVisitor,
1114+
){
10931115
matchself{
10941116
ItemKind::ExternCrate(_orig_name) => {}
10951117
ItemKind::Use(use_tree) => vis.visit_use_tree(use_tree),
@@ -1102,7 +1124,11 @@ impl WalkItemKind for ItemKind {
11021124
}
11031125
ItemKind::Fn(boxFn{ defaultness, generics, sig, body }) => {
11041126
visit_defaultness(vis, defaultness);
1105-
vis.visit_fn(FnKind::Fn(sig, generics, body), span, id);
1127+
vis.visit_fn(
1128+
FnKind::Fn(FnCtxt::Free, ident, sig, visibility, generics, body),
1129+
span,
1130+
id,
1131+
);
11061132
}
11071133
ItemKind::Mod(safety, mod_kind) => {
11081134
visit_safety(vis, safety);
@@ -1201,14 +1227,27 @@ impl WalkItemKind for ItemKind {
12011227
}
12021228

12031229
implWalkItemKindforAssocItemKind{
1204-
fnwalk(&mutself,span:Span,id:NodeId,visitor:&mutimplMutVisitor){
1230+
typeCtxt = AssocCtxt;
1231+
fnwalk(
1232+
&mutself,
1233+
span:Span,
1234+
id:NodeId,
1235+
ident:&mutIdent,
1236+
visibility:&mutVisibility,
1237+
ctxt:Self::Ctxt,
1238+
visitor:&mutimplMutVisitor,
1239+
){
12051240
matchself{
12061241
AssocItemKind::Const(item) => {
12071242
visit_const_item(item, visitor);
12081243
}
12091244
AssocItemKind::Fn(boxFn{ defaultness, generics, sig, body }) => {
12101245
visit_defaultness(visitor, defaultness);
1211-
visitor.visit_fn(FnKind::Fn(sig, generics, body), span, id);
1246+
visitor.visit_fn(
1247+
FnKind::Fn(FnCtxt::Assoc(ctxt), ident, sig, visibility, generics, body),
1248+
span,
1249+
id,
1250+
);
12121251
}
12131252
AssocItemKind::Type(box TyAlias{
12141253
defaultness,
@@ -1288,32 +1327,52 @@ pub fn walk_crate<T: MutVisitor>(vis: &mut T, krate: &mut Crate) {
12881327
vis.visit_span(inject_use_span);
12891328
}
12901329

1291-
/// Mutates one item, returning the item again.
1292-
pubfnwalk_flat_map_item<K:WalkItemKind>(
1330+
pubfnwalk_flat_map_item<K:WalkItemKind<Ctxt = ()>>(
1331+
visitor:&mutimplMutVisitor,
1332+
item:P<Item<K>>,
1333+
) -> SmallVec<[P<Item<K>>;1]>{
1334+
walk_flat_map_assoc_item(visitor, item,())
1335+
}
1336+
1337+
pubfnwalk_flat_map_assoc_item<K:WalkItemKind>(
12931338
visitor:&mutimplMutVisitor,
12941339
mutitem:P<Item<K>>,
1340+
ctxt:K::Ctxt,
12951341
) -> SmallVec<[P<Item<K>>;1]>{
12961342
letItem{ ident, attrs, id, kind, vis, span, tokens } = item.deref_mut();
12971343
visitor.visit_id(id);
12981344
visit_attrs(visitor, attrs);
12991345
visitor.visit_vis(vis);
13001346
visitor.visit_ident(ident);
1301-
kind.walk(*span,*id, visitor);
1347+
kind.walk(*span,*id,ident, vis, ctxt,visitor);
13021348
visit_lazy_tts(visitor, tokens);
13031349
visitor.visit_span(span);
13041350
smallvec![item]
13051351
}
13061352

13071353
implWalkItemKindforForeignItemKind{
1308-
fnwalk(&mutself,span:Span,id:NodeId,visitor:&mutimplMutVisitor){
1354+
typeCtxt = ();
1355+
fnwalk(
1356+
&mutself,
1357+
span:Span,
1358+
id:NodeId,
1359+
ident:&mutIdent,
1360+
visibility:&mutVisibility,
1361+
_ctxt:Self::Ctxt,
1362+
visitor:&mutimplMutVisitor,
1363+
){
13091364
matchself{
13101365
ForeignItemKind::Static(box StaticItem{ ty,mutability: _, expr,safety: _ }) => {
13111366
visitor.visit_ty(ty);
13121367
visit_opt(expr, |expr| visitor.visit_expr(expr));
13131368
}
13141369
ForeignItemKind::Fn(boxFn{ defaultness, generics, sig, body }) => {
13151370
visit_defaultness(visitor, defaultness);
1316-
visitor.visit_fn(FnKind::Fn(sig, generics, body), span, id);
1371+
visitor.visit_fn(
1372+
FnKind::Fn(FnCtxt::Foreign, ident, sig, visibility, generics, body),
1373+
span,
1374+
id,
1375+
);
13171376
}
13181377
ForeignItemKind::TyAlias(box TyAlias{
13191378
defaultness,
@@ -1522,9 +1581,8 @@ pub fn walk_expr<T: MutVisitor>(vis: &mut T, Expr { kind, id, span, attrs, token
15221581
fn_arg_span,
15231582
}) => {
15241583
visit_constness(vis, constness);
1525-
coroutine_kind.as_mut().map(|coroutine_kind| vis.visit_coroutine_kind(coroutine_kind));
15261584
vis.visit_capture_by(capture_clause);
1527-
vis.visit_fn(FnKind::Closure(binder, fn_decl, body),*span,*id);
1585+
vis.visit_fn(FnKind::Closure(binder,coroutine_kind,fn_decl, body),*span,*id);
15281586
vis.visit_span(fn_decl_span);
15291587
vis.visit_span(fn_arg_span);
15301588
}
@@ -1785,8 +1843,20 @@ impl<N: DummyAstNode, T: DummyAstNode> DummyAstNode for crate::ast_traits::AstNo
17851843
#[derive(Debug)]
17861844
pubenumFnKind<'a>{
17871845
/// E.g., `fn foo()`, `fn foo(&self)`, or `extern "Abi" fn foo()`.
1788-
Fn(&'amutFnSig,&'amutGenerics,&'amutOption<P<Block>>),
1846+
Fn(
1847+
FnCtxt,
1848+
&'amutIdent,
1849+
&'amutFnSig,
1850+
&'amutVisibility,
1851+
&'amutGenerics,
1852+
&'amutOption<P<Block>>,
1853+
),
17891854

17901855
/// E.g., `|x, y| body`.
1791-
Closure(&'amutClosureBinder,&'amutP<FnDecl>,&'amutP<Expr>),
1856+
Closure(
1857+
&'amutClosureBinder,
1858+
&'amutOption<CoroutineKind>,
1859+
&'amutP<FnDecl>,
1860+
&'amutP<Expr>,
1861+
),
17921862
}

0 commit comments

Comments
 (0)