Skip to content

Commit 0c8a204

Browse files
committed
ast: Remove token visiting from AST visitor
It's no longer necessary after the removal of nonterminal tokens in #124141.
1 parent 4c83e55 commit 0c8a204

File tree

4 files changed

+32
-206
lines changed

4 files changed

+32
-206
lines changed

compiler/rustc_ast/src/mut_visit.rs

+16-123
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
1010
use std::ops::DerefMut;
1111
use std::panic;
12-
use std::sync::Arc;
1312

1413
use rustc_data_structures::flat_map_in_place::FlatMapInPlace;
1514
use rustc_data_structures::stack::ensure_sufficient_stack;
@@ -20,7 +19,6 @@ use thin_vec::ThinVec;
2019

2120
use crate::ast::*;
2221
use crate::ptr::P;
23-
use crate::token::{self, Token};
2422
use crate::tokenstream::*;
2523
use crate::visit::{AssocCtxt, BoundKind, FnCtxt};
2624

@@ -48,11 +46,6 @@ pub trait WalkItemKind {
4846
}
4947

5048
pub trait MutVisitor: Sized {
51-
/// Mutable token visiting only exists for the `macro_rules` token marker and should not be
52-
/// used otherwise. Token visitor would be entirely separate from the regular visitor if
53-
/// the marker didn't have to visit AST fragments in nonterminal tokens.
54-
const VISIT_TOKENS: bool = false;
55-
5649
// Methods in this trait have one of three forms:
5750
//
5851
// fn visit_t(&mut self, t: &mut T); // common
@@ -360,6 +353,8 @@ pub trait MutVisitor: Sized {
360353
// Do nothing.
361354
}
362355

356+
// Span visiting is no longer used, but we keep it for now,
357+
// in case it's needed for something like #127241.
363358
fn visit_span(&mut self, _sp: &mut Span) {
364359
// Do nothing.
365360
}
@@ -473,12 +468,8 @@ fn visit_attr_args<T: MutVisitor>(vis: &mut T, args: &mut AttrArgs) {
473468

474469
// No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
475470
fn visit_delim_args<T: MutVisitor>(vis: &mut T, args: &mut DelimArgs) {
476-
let DelimArgs { dspan, delim: _, tokens } = args;
477-
visit_tts(vis, tokens);
478-
visit_delim_span(vis, dspan);
479-
}
480-
481-
pub fn visit_delim_span<T: MutVisitor>(vis: &mut T, DelimSpan { open, close }: &mut DelimSpan) {
471+
let DelimArgs { dspan, delim: _, tokens: _ } = args;
472+
let DelimSpan { open, close } = dspan;
482473
vis.visit_span(open);
483474
vis.visit_span(close);
484475
}
@@ -552,7 +543,7 @@ fn walk_assoc_item_constraint<T: MutVisitor>(
552543
}
553544

554545
pub fn walk_ty<T: MutVisitor>(vis: &mut T, ty: &mut P<Ty>) {
555-
let Ty { id, kind, span, tokens } = ty.deref_mut();
546+
let Ty { id, kind, span, tokens: _ } = ty.deref_mut();
556547
vis.visit_id(id);
557548
match kind {
558549
TyKind::Err(_guar) => {}
@@ -600,12 +591,11 @@ pub fn walk_ty<T: MutVisitor>(vis: &mut T, ty: &mut P<Ty>) {
600591
}
601592
TyKind::MacCall(mac) => vis.visit_mac_call(mac),
602593
}
603-
visit_lazy_tts(vis, tokens);
604594
vis.visit_span(span);
605595
}
606596

607597
pub fn walk_ty_pat<T: MutVisitor>(vis: &mut T, ty: &mut P<TyPat>) {
608-
let TyPat { id, kind, span, tokens } = ty.deref_mut();
598+
let TyPat { id, kind, span, tokens: _ } = ty.deref_mut();
609599
vis.visit_id(id);
610600
match kind {
611601
TyPatKind::Range(start, end, _include_end) => {
@@ -614,7 +604,6 @@ pub fn walk_ty_pat<T: MutVisitor>(vis: &mut T, ty: &mut P<TyPat>) {
614604
}
615605
TyPatKind::Err(_) => {}
616606
}
617-
visit_lazy_tts(vis, tokens);
618607
vis.visit_span(span);
619608
}
620609

@@ -654,11 +643,10 @@ fn walk_path_segment<T: MutVisitor>(vis: &mut T, segment: &mut PathSegment) {
654643
visit_opt(args, |args| vis.visit_generic_args(args));
655644
}
656645

657-
fn walk_path<T: MutVisitor>(vis: &mut T, Path { segments, span, tokens }: &mut Path) {
646+
fn walk_path<T: MutVisitor>(vis: &mut T, Path { segments, span, tokens: _ }: &mut Path) {
658647
for segment in segments {
659648
vis.visit_path_segment(segment);
660649
}
661-
visit_lazy_tts(vis, tokens);
662650
vis.visit_span(span);
663651
}
664652

@@ -704,7 +692,7 @@ fn walk_parenthesized_parameter_data<T: MutVisitor>(vis: &mut T, args: &mut Pare
704692
}
705693

706694
fn walk_local<T: MutVisitor>(vis: &mut T, local: &mut P<Local>) {
707-
let Local { id, super_, pat, ty, kind, span, colon_sp, attrs, tokens } = local.deref_mut();
695+
let Local { id, super_, pat, ty, kind, span, colon_sp, attrs, tokens: _ } = local.deref_mut();
708696
visit_opt(super_, |sp| vis.visit_span(sp));
709697
vis.visit_id(id);
710698
visit_attrs(vis, attrs);
@@ -720,7 +708,6 @@ fn walk_local<T: MutVisitor>(vis: &mut T, local: &mut P<Local>) {
720708
vis.visit_block(els);
721709
}
722710
}
723-
visit_lazy_tts(vis, tokens);
724711
visit_opt(colon_sp, |sp| vis.visit_span(sp));
725712
vis.visit_span(span);
726713
}
@@ -729,14 +716,10 @@ fn walk_attribute<T: MutVisitor>(vis: &mut T, attr: &mut Attribute) {
729716
let Attribute { kind, id: _, style: _, span } = attr;
730717
match kind {
731718
AttrKind::Normal(normal) => {
732-
let NormalAttr {
733-
item: AttrItem { unsafety: _, path, args, tokens },
734-
tokens: attr_tokens,
735-
} = &mut **normal;
719+
let NormalAttr { item: AttrItem { unsafety: _, path, args, tokens: _ }, tokens: _ } =
720+
&mut **normal;
736721
vis.visit_path(path);
737722
visit_attr_args(vis, args);
738-
visit_lazy_tts(vis, tokens);
739-
visit_lazy_tts(vis, attr_tokens);
740723
}
741724
AttrKind::DocComment(_kind, _sym) => {}
742725
}
@@ -785,90 +768,6 @@ pub fn walk_flat_map_param<T: MutVisitor>(vis: &mut T, mut param: Param) -> Smal
785768
smallvec![param]
786769
}
787770

788-
// No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
789-
fn visit_attr_tt<T: MutVisitor>(vis: &mut T, tt: &mut AttrTokenTree) {
790-
match tt {
791-
AttrTokenTree::Token(token, _spacing) => {
792-
visit_token(vis, token);
793-
}
794-
AttrTokenTree::Delimited(dspan, _spacing, _delim, tts) => {
795-
visit_attr_tts(vis, tts);
796-
visit_delim_span(vis, dspan);
797-
}
798-
AttrTokenTree::AttrsTarget(AttrsTarget { attrs, tokens }) => {
799-
visit_attrs(vis, attrs);
800-
visit_lazy_tts_opt_mut(vis, Some(tokens));
801-
}
802-
}
803-
}
804-
805-
// No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
806-
fn visit_tt<T: MutVisitor>(vis: &mut T, tt: &mut TokenTree) {
807-
match tt {
808-
TokenTree::Token(token, _spacing) => {
809-
visit_token(vis, token);
810-
}
811-
TokenTree::Delimited(dspan, _spacing, _delim, tts) => {
812-
visit_tts(vis, tts);
813-
visit_delim_span(vis, dspan);
814-
}
815-
}
816-
}
817-
818-
// No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
819-
fn visit_tts<T: MutVisitor>(vis: &mut T, TokenStream(tts): &mut TokenStream) {
820-
if T::VISIT_TOKENS && !tts.is_empty() {
821-
let tts = Arc::make_mut(tts);
822-
visit_vec(tts, |tree| visit_tt(vis, tree));
823-
}
824-
}
825-
826-
fn visit_attr_tts<T: MutVisitor>(vis: &mut T, AttrTokenStream(tts): &mut AttrTokenStream) {
827-
if T::VISIT_TOKENS && !tts.is_empty() {
828-
let tts = Arc::make_mut(tts);
829-
visit_vec(tts, |tree| visit_attr_tt(vis, tree));
830-
}
831-
}
832-
833-
fn visit_lazy_tts_opt_mut<T: MutVisitor>(vis: &mut T, lazy_tts: Option<&mut LazyAttrTokenStream>) {
834-
if T::VISIT_TOKENS {
835-
if let Some(lazy_tts) = lazy_tts {
836-
let mut tts = lazy_tts.to_attr_token_stream();
837-
visit_attr_tts(vis, &mut tts);
838-
*lazy_tts = LazyAttrTokenStream::new(tts);
839-
}
840-
}
841-
}
842-
843-
fn visit_lazy_tts<T: MutVisitor>(vis: &mut T, lazy_tts: &mut Option<LazyAttrTokenStream>) {
844-
visit_lazy_tts_opt_mut(vis, lazy_tts.as_mut());
845-
}
846-
847-
/// Applies ident visitor if it's an ident. In practice this is not actually
848-
/// used by specific visitors right now, but there's a test below checking that
849-
/// it works.
850-
// No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
851-
pub fn visit_token<T: MutVisitor>(vis: &mut T, t: &mut Token) {
852-
let Token { kind, span } = t;
853-
match kind {
854-
token::Ident(name, _is_raw) | token::Lifetime(name, _is_raw) => {
855-
let mut ident = Ident::new(*name, *span);
856-
vis.visit_ident(&mut ident);
857-
*name = ident.name;
858-
*span = ident.span;
859-
return; // Avoid visiting the span for the second time.
860-
}
861-
token::NtIdent(ident, _is_raw) => {
862-
vis.visit_ident(ident);
863-
}
864-
token::NtLifetime(ident, _is_raw) => {
865-
vis.visit_ident(ident);
866-
}
867-
_ => {}
868-
}
869-
vis.visit_span(span);
870-
}
871-
872771
// No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
873772
fn visit_defaultness<T: MutVisitor>(vis: &mut T, defaultness: &mut Defaultness) {
874773
match defaultness {
@@ -1187,10 +1086,9 @@ fn walk_mt<T: MutVisitor>(vis: &mut T, MutTy { ty, mutbl: _ }: &mut MutTy) {
11871086
}
11881087

11891088
pub fn walk_block<T: MutVisitor>(vis: &mut T, block: &mut P<Block>) {
1190-
let Block { id, stmts, rules: _, span, tokens } = block.deref_mut();
1089+
let Block { id, stmts, rules: _, span, tokens: _ } = block.deref_mut();
11911090
vis.visit_id(id);
11921091
stmts.flat_map_in_place(|stmt| vis.flat_map_stmt(stmt));
1193-
visit_lazy_tts(vis, tokens);
11941092
vis.visit_span(span);
11951093
}
11961094

@@ -1471,12 +1369,11 @@ fn walk_item_ctxt<K: WalkItemKind>(
14711369
item: &mut P<Item<K>>,
14721370
ctxt: K::Ctxt,
14731371
) {
1474-
let Item { attrs, id, kind, vis, span, tokens } = item.deref_mut();
1372+
let Item { attrs, id, kind, vis, span, tokens: _ } = item.deref_mut();
14751373
visitor.visit_id(id);
14761374
visit_attrs(visitor, attrs);
14771375
visitor.visit_vis(vis);
14781376
kind.walk(*span, *id, vis, ctxt, visitor);
1479-
visit_lazy_tts(visitor, tokens);
14801377
visitor.visit_span(span);
14811378
}
14821379

@@ -1550,7 +1447,7 @@ impl WalkItemKind for ForeignItemKind {
15501447
}
15511448

15521449
pub fn walk_pat<T: MutVisitor>(vis: &mut T, pat: &mut P<Pat>) {
1553-
let Pat { id, kind, span, tokens } = pat.deref_mut();
1450+
let Pat { id, kind, span, tokens: _ } = pat.deref_mut();
15541451
vis.visit_id(id);
15551452
match kind {
15561453
PatKind::Err(_guar) => {}
@@ -1592,7 +1489,6 @@ pub fn walk_pat<T: MutVisitor>(vis: &mut T, pat: &mut P<Pat>) {
15921489
PatKind::Paren(inner) => vis.visit_pat(inner),
15931490
PatKind::MacCall(mac) => vis.visit_mac_call(mac),
15941491
}
1595-
visit_lazy_tts(vis, tokens);
15961492
vis.visit_span(span);
15971493
}
15981494

@@ -1656,7 +1552,7 @@ fn walk_format_args<T: MutVisitor>(vis: &mut T, fmt: &mut FormatArgs) {
16561552
vis.visit_span(span);
16571553
}
16581554

1659-
pub fn walk_expr<T: MutVisitor>(vis: &mut T, Expr { kind, id, span, attrs, tokens }: &mut Expr) {
1555+
pub fn walk_expr<T: MutVisitor>(vis: &mut T, Expr { kind, id, span, attrs, tokens: _ }: &mut Expr) {
16601556
vis.visit_id(id);
16611557
visit_attrs(vis, attrs);
16621558
match kind {
@@ -1847,7 +1743,6 @@ pub fn walk_expr<T: MutVisitor>(vis: &mut T, Expr { kind, id, span, attrs, token
18471743
ExprKind::Err(_guar) => {}
18481744
ExprKind::Dummy => {}
18491745
}
1850-
visit_lazy_tts(vis, tokens);
18511746
vis.visit_span(span);
18521747
}
18531748

@@ -1889,25 +1784,23 @@ fn walk_flat_map_stmt_kind<T: MutVisitor>(vis: &mut T, kind: StmtKind) -> SmallV
18891784
StmtKind::Semi(expr) => vis.filter_map_expr(expr).into_iter().map(StmtKind::Semi).collect(),
18901785
StmtKind::Empty => smallvec![StmtKind::Empty],
18911786
StmtKind::MacCall(mut mac) => {
1892-
let MacCallStmt { mac: mac_, style: _, attrs, tokens } = mac.deref_mut();
1787+
let MacCallStmt { mac: mac_, style: _, attrs, tokens: _ } = mac.deref_mut();
18931788
visit_attrs(vis, attrs);
18941789
vis.visit_mac_call(mac_);
1895-
visit_lazy_tts(vis, tokens);
18961790
smallvec![StmtKind::MacCall(mac)]
18971791
}
18981792
}
18991793
}
19001794

19011795
fn walk_vis<T: MutVisitor>(vis: &mut T, visibility: &mut Visibility) {
1902-
let Visibility { kind, span, tokens } = visibility;
1796+
let Visibility { kind, span, tokens: _ } = visibility;
19031797
match kind {
19041798
VisibilityKind::Public | VisibilityKind::Inherited => {}
19051799
VisibilityKind::Restricted { path, id, shorthand: _ } => {
19061800
vis.visit_id(id);
19071801
vis.visit_path(path);
19081802
}
19091803
}
1910-
visit_lazy_tts(vis, tokens);
19111804
vis.visit_span(span);
19121805
}
19131806

0 commit comments

Comments
 (0)