Skip to content

Commit 2805e1d

Browse files
committed
Auto merge of rust-lang#141605 - jieyouxu:rollup-3gjqh5l, r=jieyouxu
Rollup of 10 pull requests Successful merges: - rust-lang#140898 (minor improvements on running miri) - rust-lang#141392 (Avoid obligation construction dance with query region constraints) - rust-lang#141431 (Emit dummy open drop for unsafe binder) - rust-lang#141433 (Properly analyze captures from unsafe binders) - rust-lang#141439 (Deduplicate dyn compatibility violations due to coercion) - rust-lang#141449 (further deduplicate ast visitor code) - rust-lang#141513 (interpret: add allocation parameters to `AllocBytes`) - rust-lang#141516 (speed up charsearcher for ascii chars) - rust-lang#141526 (add a dedicated section for compiler environment variables in the unstable book) - rust-lang#141550 (Fix `unused_braces` lint suggestion when encountering attributes) r? `@ghost` `@rustbot` modify labels: rollup
2 parents 40d2563 + bca4279 commit 2805e1d

File tree

117 files changed

+740
-1367
lines changed

Some content is hidden

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

117 files changed

+740
-1367
lines changed

compiler/rustc_ast/src/mut_visit.rs

Lines changed: 5 additions & 233 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, try_visit};
23+
use crate::visit::{AssocCtxt, BoundKind, FnCtxt, try_visit, visit_opt, walk_list};
2424

2525
pub trait ExpectOne<A: Array> {
2626
fn expect_one(self, err: &'static str) -> A::Item;
@@ -33,18 +33,6 @@ impl<A: Array> ExpectOne<A> for SmallVec<A> {
3333
}
3434
}
3535

36-
pub trait WalkItemKind {
37-
type Ctxt;
38-
fn walk(
39-
&mut self,
40-
span: Span,
41-
id: NodeId,
42-
visibility: &mut Visibility,
43-
ctxt: Self::Ctxt,
44-
visitor: &mut impl MutVisitor,
45-
);
46-
}
47-
4836
pub trait MutVisitor: Sized {
4937
// Methods in this trait have one of three forms:
5038
//
@@ -451,11 +439,6 @@ fn visit_thin_exprs<T: MutVisitor>(vis: &mut T, exprs: &mut ThinVec<P<Expr>>) {
451439
exprs.flat_map_in_place(|expr| vis.filter_map_expr(expr))
452440
}
453441

454-
// No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
455-
fn visit_bounds<T: MutVisitor>(vis: &mut T, bounds: &mut GenericBounds, ctxt: BoundKind) {
456-
visit_vec(bounds, |bound| vis.visit_param_bound(bound, ctxt));
457-
}
458-
459442
// No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
460443
fn visit_attr_args<T: MutVisitor>(vis: &mut T, args: &mut AttrArgs) {
461444
match args {
@@ -610,12 +593,6 @@ pub fn walk_ty_pat<T: MutVisitor>(vis: &mut T, ty: &mut P<TyPat>) {
610593
vis.visit_span(span);
611594
}
612595

613-
fn walk_foreign_mod<T: MutVisitor>(vis: &mut T, foreign_mod: &mut ForeignMod) {
614-
let ForeignMod { extern_span: _, safety, abi: _, items } = foreign_mod;
615-
visit_safety(vis, safety);
616-
items.flat_map_in_place(|item| vis.flat_map_foreign_item(item));
617-
}
618-
619596
pub fn walk_variant<T: MutVisitor>(visitor: &mut T, variant: &mut Variant) {
620597
let Variant { ident, vis, attrs, id, data, disr_expr, span, is_placeholder: _ } = variant;
621598
visitor.visit_id(id);
@@ -771,22 +748,6 @@ pub fn walk_flat_map_param<T: MutVisitor>(vis: &mut T, mut param: Param) -> Smal
771748
smallvec![param]
772749
}
773750

774-
// No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
775-
fn visit_defaultness<T: MutVisitor>(vis: &mut T, defaultness: &mut Defaultness) {
776-
match defaultness {
777-
Defaultness::Default(span) => vis.visit_span(span),
778-
Defaultness::Final => {}
779-
}
780-
}
781-
782-
// No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
783-
fn visit_polarity<T: MutVisitor>(vis: &mut T, polarity: &mut ImplPolarity) {
784-
match polarity {
785-
ImplPolarity::Positive => {}
786-
ImplPolarity::Negative(span) => vis.visit_span(span),
787-
}
788-
}
789-
790751
fn walk_closure_binder<T: MutVisitor>(vis: &mut T, binder: &mut ClosureBinder) {
791752
match binder {
792753
ClosureBinder::NotPresent => {}
@@ -1080,169 +1041,15 @@ pub fn walk_item_kind<K: WalkItemKind>(
10801041
kind.walk(span, id, visibility, ctxt, vis)
10811042
}
10821043

1083-
impl WalkItemKind for ItemKind {
1084-
type Ctxt = ();
1085-
fn walk(
1086-
&mut self,
1087-
span: Span,
1088-
id: NodeId,
1089-
visibility: &mut Visibility,
1090-
_ctxt: Self::Ctxt,
1091-
vis: &mut impl MutVisitor,
1092-
) {
1093-
match self {
1094-
ItemKind::ExternCrate(_orig_name, ident) => vis.visit_ident(ident),
1095-
ItemKind::Use(use_tree) => vis.visit_use_tree(use_tree),
1096-
ItemKind::Static(box StaticItem {
1097-
ident,
1098-
ty,
1099-
safety: _,
1100-
mutability: _,
1101-
expr,
1102-
define_opaque,
1103-
}) => {
1104-
vis.visit_ident(ident);
1105-
vis.visit_ty(ty);
1106-
visit_opt(expr, |expr| vis.visit_expr(expr));
1107-
walk_define_opaques(vis, define_opaque);
1108-
}
1109-
ItemKind::Const(item) => {
1110-
walk_const_item(vis, item);
1111-
}
1112-
ItemKind::Fn(func) => {
1113-
vis.visit_fn(FnKind::Fn(FnCtxt::Free, visibility, &mut *func), span, id);
1114-
}
1115-
ItemKind::Mod(safety, ident, mod_kind) => {
1116-
visit_safety(vis, safety);
1117-
vis.visit_ident(ident);
1118-
match mod_kind {
1119-
ModKind::Loaded(
1120-
items,
1121-
_inline,
1122-
ModSpans { inner_span, inject_use_span },
1123-
_,
1124-
) => {
1125-
items.flat_map_in_place(|item| vis.flat_map_item(item));
1126-
vis.visit_span(inner_span);
1127-
vis.visit_span(inject_use_span);
1128-
}
1129-
ModKind::Unloaded => {}
1130-
}
1131-
}
1132-
ItemKind::ForeignMod(nm) => vis.visit_foreign_mod(nm),
1133-
ItemKind::GlobalAsm(asm) => vis.visit_inline_asm(asm),
1134-
ItemKind::TyAlias(box TyAlias {
1135-
defaultness,
1136-
ident,
1137-
generics,
1138-
where_clauses,
1139-
bounds,
1140-
ty,
1141-
}) => {
1142-
visit_defaultness(vis, defaultness);
1143-
vis.visit_ident(ident);
1144-
vis.visit_generics(generics);
1145-
visit_bounds(vis, bounds, BoundKind::Bound);
1146-
visit_opt(ty, |ty| vis.visit_ty(ty));
1147-
walk_ty_alias_where_clauses(vis, where_clauses);
1148-
}
1149-
ItemKind::Enum(ident, EnumDef { variants }, generics) => {
1150-
vis.visit_ident(ident);
1151-
vis.visit_generics(generics);
1152-
variants.flat_map_in_place(|variant| vis.flat_map_variant(variant));
1153-
}
1154-
ItemKind::Struct(ident, variant_data, generics)
1155-
| ItemKind::Union(ident, variant_data, generics) => {
1156-
vis.visit_ident(ident);
1157-
vis.visit_generics(generics);
1158-
vis.visit_variant_data(variant_data);
1159-
}
1160-
ItemKind::Impl(box Impl {
1161-
defaultness,
1162-
safety,
1163-
generics,
1164-
constness,
1165-
polarity,
1166-
of_trait,
1167-
self_ty,
1168-
items,
1169-
}) => {
1170-
visit_defaultness(vis, defaultness);
1171-
visit_safety(vis, safety);
1172-
vis.visit_generics(generics);
1173-
visit_constness(vis, constness);
1174-
visit_polarity(vis, polarity);
1175-
visit_opt(of_trait, |trait_ref| vis.visit_trait_ref(trait_ref));
1176-
vis.visit_ty(self_ty);
1177-
items.flat_map_in_place(|item| {
1178-
vis.flat_map_assoc_item(item, AssocCtxt::Impl { of_trait: of_trait.is_some() })
1179-
});
1180-
}
1181-
ItemKind::Trait(box Trait { safety, is_auto: _, ident, generics, bounds, items }) => {
1182-
visit_safety(vis, safety);
1183-
vis.visit_ident(ident);
1184-
vis.visit_generics(generics);
1185-
visit_bounds(vis, bounds, BoundKind::Bound);
1186-
items.flat_map_in_place(|item| vis.flat_map_assoc_item(item, AssocCtxt::Trait));
1187-
}
1188-
ItemKind::TraitAlias(ident, generics, bounds) => {
1189-
vis.visit_ident(ident);
1190-
vis.visit_generics(generics);
1191-
visit_bounds(vis, bounds, BoundKind::Bound);
1192-
}
1193-
ItemKind::MacCall(m) => vis.visit_mac_call(m),
1194-
ItemKind::MacroDef(ident, def) => {
1195-
vis.visit_ident(ident);
1196-
vis.visit_macro_def(def)
1197-
}
1198-
ItemKind::Delegation(box Delegation {
1199-
id,
1200-
qself,
1201-
path,
1202-
ident,
1203-
rename,
1204-
body,
1205-
from_glob: _,
1206-
}) => {
1207-
vis.visit_id(id);
1208-
vis.visit_qself(qself);
1209-
vis.visit_path(path);
1210-
vis.visit_ident(ident);
1211-
if let Some(rename) = rename {
1212-
vis.visit_ident(rename);
1213-
}
1214-
if let Some(body) = body {
1215-
vis.visit_block(body);
1216-
}
1217-
}
1218-
ItemKind::DelegationMac(box DelegationMac { qself, prefix, suffixes, body }) => {
1219-
vis.visit_qself(qself);
1220-
vis.visit_path(prefix);
1221-
if let Some(suffixes) = suffixes {
1222-
for (ident, rename) in suffixes {
1223-
vis.visit_ident(ident);
1224-
if let Some(rename) = rename {
1225-
vis.visit_ident(rename);
1226-
}
1227-
}
1228-
}
1229-
if let Some(body) = body {
1230-
vis.visit_block(body);
1231-
}
1232-
}
1233-
}
1234-
}
1235-
}
1236-
12371044
impl WalkItemKind for AssocItemKind {
12381045
type Ctxt = AssocCtxt;
1239-
fn walk(
1046+
fn walk<V: MutVisitor>(
12401047
&mut self,
12411048
span: Span,
12421049
id: NodeId,
12431050
visibility: &mut Visibility,
12441051
ctxt: Self::Ctxt,
1245-
visitor: &mut impl MutVisitor,
1052+
visitor: &mut V,
12461053
) {
12471054
match self {
12481055
AssocItemKind::Const(item) => {
@@ -1306,16 +1113,6 @@ impl WalkItemKind for AssocItemKind {
13061113
}
13071114
}
13081115

1309-
fn walk_const_item<T: MutVisitor>(vis: &mut T, item: &mut ConstItem) {
1310-
let ConstItem { defaultness, ident, generics, ty, expr, define_opaque } = item;
1311-
visit_defaultness(vis, defaultness);
1312-
vis.visit_ident(ident);
1313-
vis.visit_generics(generics);
1314-
vis.visit_ty(ty);
1315-
visit_opt(expr, |expr| vis.visit_expr(expr));
1316-
walk_define_opaques(vis, define_opaque);
1317-
}
1318-
13191116
pub fn walk_crate<T: MutVisitor>(vis: &mut T, krate: &mut Crate) {
13201117
let Crate { attrs, items, spans, id, is_placeholder: _ } = krate;
13211118
vis.visit_id(id);
@@ -1334,19 +1131,6 @@ pub fn walk_assoc_item(visitor: &mut impl MutVisitor, item: &mut P<AssocItem>, c
13341131
walk_item_ctxt(visitor, item, ctxt)
13351132
}
13361133

1337-
fn walk_item_ctxt<K: WalkItemKind>(
1338-
visitor: &mut impl MutVisitor,
1339-
item: &mut P<Item<K>>,
1340-
ctxt: K::Ctxt,
1341-
) {
1342-
let Item { attrs, id, kind, vis, span, tokens: _ } = item.deref_mut();
1343-
visitor.visit_id(id);
1344-
visit_attrs(visitor, attrs);
1345-
visitor.visit_vis(vis);
1346-
kind.walk(*span, *id, vis, ctxt, visitor);
1347-
visitor.visit_span(span);
1348-
}
1349-
13501134
pub fn walk_flat_map_item(vis: &mut impl MutVisitor, mut item: P<Item>) -> SmallVec<[P<Item>; 1]> {
13511135
vis.visit_item(&mut item);
13521136
smallvec![item]
@@ -1371,13 +1155,13 @@ pub fn walk_flat_map_assoc_item(
13711155

13721156
impl WalkItemKind for ForeignItemKind {
13731157
type Ctxt = ();
1374-
fn walk(
1158+
fn walk<V: MutVisitor>(
13751159
&mut self,
13761160
span: Span,
13771161
id: NodeId,
13781162
visibility: &mut Visibility,
13791163
_ctxt: Self::Ctxt,
1380-
visitor: &mut impl MutVisitor,
1164+
visitor: &mut V,
13811165
) {
13821166
match self {
13831167
ForeignItemKind::Static(box StaticItem {
@@ -1786,18 +1570,6 @@ fn walk_capture_by<T: MutVisitor>(vis: &mut T, capture_by: &mut CaptureBy) {
17861570
}
17871571
}
17881572

1789-
fn walk_define_opaques<T: MutVisitor>(
1790-
vis: &mut T,
1791-
define_opaque: &mut Option<ThinVec<(NodeId, Path)>>,
1792-
) {
1793-
if let Some(define_opaque) = define_opaque {
1794-
for (id, path) in define_opaque {
1795-
vis.visit_id(id);
1796-
vis.visit_path(path)
1797-
}
1798-
}
1799-
}
1800-
18011573
/// Some value for the AST node that is valid but possibly meaningless. Similar
18021574
/// to `Default` but not intended for wide use. The value will never be used
18031575
/// meaningfully, it exists just to support unwinding in `visit_clobber` in the

0 commit comments

Comments
 (0)