Skip to content

Commit c2996b4

Browse files
committed
Auto merge of #142371 - fee1-dead-contrib:push-xqlkumzurkus, r=<try>
[experiment] avoid `P<T>` in `visit_expr` etc methods trying a different way than #141636 r? ghost
2 parents bdb04d6 + acf4046 commit c2996b4

File tree

11 files changed

+62
-46
lines changed

11 files changed

+62
-46
lines changed

compiler/rustc_ast/src/ast.rs

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -693,6 +693,12 @@ impl Pat {
693693
}
694694
}
695695

696+
impl From<P<Pat>> for Pat {
697+
fn from(value: P<Pat>) -> Self {
698+
*value
699+
}
700+
}
701+
696702
/// A single field in a struct pattern.
697703
///
698704
/// Patterns like the fields of `Foo { x, ref y, ref mut z }`
@@ -1522,17 +1528,23 @@ impl Expr {
15221528
)
15231529
}
15241530

1525-
/// Creates a dummy `P<Expr>`.
1531+
/// Creates a dummy `Expr`.
15261532
///
15271533
/// Should only be used when it will be replaced afterwards or as a return value when an error was encountered.
1528-
pub fn dummy() -> P<Expr> {
1529-
P(Expr {
1534+
pub fn dummy() -> Expr {
1535+
Expr {
15301536
id: DUMMY_NODE_ID,
15311537
kind: ExprKind::Dummy,
15321538
span: DUMMY_SP,
15331539
attrs: ThinVec::new(),
15341540
tokens: None,
1535-
})
1541+
}
1542+
}
1543+
}
1544+
1545+
impl From<P<Expr>> for Expr {
1546+
fn from(value: P<Expr>) -> Self {
1547+
*value
15361548
}
15371549
}
15381550

@@ -2343,6 +2355,12 @@ impl Clone for Ty {
23432355
}
23442356
}
23452357

2358+
impl From<P<Ty>> for Ty {
2359+
fn from(value: P<Ty>) -> Self {
2360+
*value
2361+
}
2362+
}
2363+
23462364
impl Ty {
23472365
pub fn peel_refs(&self) -> &Self {
23482366
let mut final_ty = self;

compiler/rustc_ast/src/mut_visit.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -168,15 +168,15 @@ pub trait MutVisitor: Sized + MutVisitorResult<Result = ()> {
168168
walk_flat_map_arm(self, arm)
169169
}
170170

171-
fn visit_pat(&mut self, p: &mut P<Pat>) {
171+
fn visit_pat(&mut self, p: &mut Pat) {
172172
walk_pat(self, p);
173173
}
174174

175175
fn visit_anon_const(&mut self, c: &mut AnonConst) {
176176
walk_anon_const(self, c);
177177
}
178178

179-
fn visit_expr(&mut self, e: &mut P<Expr>) {
179+
fn visit_expr(&mut self, e: &mut Expr) {
180180
walk_expr(self, e);
181181
}
182182

@@ -194,7 +194,7 @@ pub trait MutVisitor: Sized + MutVisitorResult<Result = ()> {
194194
walk_generic_arg(self, arg);
195195
}
196196

197-
fn visit_ty(&mut self, t: &mut P<Ty>) {
197+
fn visit_ty(&mut self, t: &mut Ty) {
198198
walk_ty(self, t);
199199
}
200200

compiler/rustc_builtin_macros/src/cfg_eval.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ impl CfgEval<'_> {
155155

156156
impl MutVisitor for CfgEval<'_> {
157157
#[instrument(level = "trace", skip(self))]
158-
fn visit_expr(&mut self, expr: &mut P<ast::Expr>) {
158+
fn visit_expr(&mut self, expr: &mut ast::Expr) {
159159
self.0.configure_expr(expr, false);
160160
mut_visit::walk_expr(self, expr);
161161
}

compiler/rustc_builtin_macros/src/deriving/coerce_pointee.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
use ast::HasAttrs;
2-
use ast::ptr::P;
32
use rustc_ast::mut_visit::MutVisitor;
43
use rustc_ast::visit::BoundKind;
54
use rustc_ast::{
@@ -378,11 +377,11 @@ struct TypeSubstitution<'a> {
378377
}
379378

380379
impl<'a> ast::mut_visit::MutVisitor for TypeSubstitution<'a> {
381-
fn visit_ty(&mut self, ty: &mut P<ast::Ty>) {
380+
fn visit_ty(&mut self, ty: &mut ast::Ty) {
382381
if let Some(name) = ty.kind.is_simple_path()
383382
&& name == self.from_name
384383
{
385-
**ty = self.to_ty.clone();
384+
*ty = self.to_ty.clone();
386385
self.rewritten = true;
387386
} else {
388387
ast::mut_visit::walk_ty(self, ty);

compiler/rustc_expand/src/expand.rs

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1668,7 +1668,7 @@ impl InvocationCollectorNode for ast::Crate {
16681668
}
16691669
}
16701670

1671-
impl InvocationCollectorNode for P<ast::Ty> {
1671+
impl InvocationCollectorNode for ast::Ty {
16721672
type OutputTy = P<ast::Ty>;
16731673
const KIND: AstFragmentKind = AstFragmentKind::Ty;
16741674
fn to_annotatable(self) -> Annotatable {
@@ -1691,7 +1691,7 @@ impl InvocationCollectorNode for P<ast::Ty> {
16911691
}
16921692
}
16931693

1694-
impl InvocationCollectorNode for P<ast::Pat> {
1694+
impl InvocationCollectorNode for ast::Pat {
16951695
type OutputTy = P<ast::Pat>;
16961696
const KIND: AstFragmentKind = AstFragmentKind::Pat;
16971697
fn to_annotatable(self) -> Annotatable {
@@ -1714,11 +1714,11 @@ impl InvocationCollectorNode for P<ast::Pat> {
17141714
}
17151715
}
17161716

1717-
impl InvocationCollectorNode for P<ast::Expr> {
1717+
impl InvocationCollectorNode for ast::Expr {
17181718
type OutputTy = P<ast::Expr>;
17191719
const KIND: AstFragmentKind = AstFragmentKind::Expr;
17201720
fn to_annotatable(self) -> Annotatable {
1721-
Annotatable::Expr(self)
1721+
Annotatable::Expr(P(self))
17221722
}
17231723
fn fragment_to_output(fragment: AstFragment) -> Self::OutputTy {
17241724
fragment.make_expr()
@@ -1855,37 +1855,37 @@ impl DummyAstNode for ast::Crate {
18551855
}
18561856
}
18571857

1858-
impl DummyAstNode for P<ast::Ty> {
1858+
impl DummyAstNode for ast::Ty {
18591859
fn dummy() -> Self {
1860-
P(ast::Ty {
1860+
ast::Ty {
18611861
id: DUMMY_NODE_ID,
18621862
kind: TyKind::Dummy,
18631863
span: Default::default(),
18641864
tokens: Default::default(),
1865-
})
1865+
}
18661866
}
18671867
}
18681868

1869-
impl DummyAstNode for P<ast::Pat> {
1869+
impl DummyAstNode for ast::Pat {
18701870
fn dummy() -> Self {
1871-
P(ast::Pat {
1871+
ast::Pat {
18721872
id: DUMMY_NODE_ID,
18731873
kind: PatKind::Wild,
18741874
span: Default::default(),
18751875
tokens: Default::default(),
1876-
})
1876+
}
18771877
}
18781878
}
18791879

1880-
impl DummyAstNode for P<ast::Expr> {
1880+
impl DummyAstNode for ast::Expr {
18811881
fn dummy() -> Self {
18821882
ast::Expr::dummy()
18831883
}
18841884
}
18851885

18861886
impl DummyAstNode for AstNodeWrapper<P<ast::Expr>, MethodReceiverTag> {
18871887
fn dummy() -> Self {
1888-
AstNodeWrapper::new(ast::Expr::dummy(), MethodReceiverTag)
1888+
AstNodeWrapper::new(P(ast::Expr::dummy()), MethodReceiverTag)
18891889
}
18901890
}
18911891

@@ -2172,7 +2172,7 @@ impl<'a, 'b> InvocationCollector<'a, 'b> {
21722172
}
21732173
}
21742174

2175-
fn visit_node<Node: InvocationCollectorNode<OutputTy = Node> + DummyAstNode>(
2175+
fn visit_node<Node: InvocationCollectorNode<OutputTy: Into<Node>> + DummyAstNode>(
21762176
&mut self,
21772177
node: &mut Node,
21782178
) {
@@ -2196,15 +2196,15 @@ impl<'a, 'b> InvocationCollector<'a, 'b> {
21962196
let n = mem::replace(node, Node::dummy());
21972197
*node = self
21982198
.collect_attr((attr, pos, derives), n.to_annotatable(), Node::KIND)
2199-
.make_ast::<Node>()
2199+
.make_ast::<Node>().into()
22002200
}
22012201
},
22022202
None if node.is_mac_call() => {
22032203
let n = mem::replace(node, Node::dummy());
22042204
let (mac, attrs, _) = n.take_mac_call();
22052205
self.check_attributes(&attrs, &mac);
22062206

2207-
*node = self.collect_bang(mac, Node::KIND).make_ast::<Node>()
2207+
*node = self.collect_bang(mac, Node::KIND).make_ast::<Node>().into()
22082208
}
22092209
None if node.delegation().is_some() => unreachable!(),
22102210
None => {
@@ -2314,15 +2314,15 @@ impl<'a, 'b> MutVisitor for InvocationCollector<'a, 'b> {
23142314
self.visit_node(node)
23152315
}
23162316

2317-
fn visit_ty(&mut self, node: &mut P<ast::Ty>) {
2317+
fn visit_ty(&mut self, node: &mut ast::Ty) {
23182318
self.visit_node(node)
23192319
}
23202320

2321-
fn visit_pat(&mut self, node: &mut P<ast::Pat>) {
2321+
fn visit_pat(&mut self, node: &mut ast::Pat) {
23222322
self.visit_node(node)
23232323
}
23242324

2325-
fn visit_expr(&mut self, node: &mut P<ast::Expr>) {
2325+
fn visit_expr(&mut self, node: &mut ast::Expr) {
23262326
// FIXME: Feature gating is performed inconsistently between `Expr` and `OptExpr`.
23272327
if let Some(attr) = node.attrs.first() {
23282328
self.cfg().maybe_emit_expr_attr_err(attr);

compiler/rustc_expand/src/placeholders.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -332,9 +332,9 @@ impl MutVisitor for PlaceholderExpander {
332332
}
333333
}
334334

335-
fn visit_expr(&mut self, expr: &mut P<ast::Expr>) {
335+
fn visit_expr(&mut self, expr: &mut ast::Expr) {
336336
match expr.kind {
337-
ast::ExprKind::MacCall(_) => *expr = self.remove(expr.id).make_expr(),
337+
ast::ExprKind::MacCall(_) => *expr = *self.remove(expr.id).make_expr(),
338338
_ => walk_expr(self, expr),
339339
}
340340
}
@@ -399,16 +399,16 @@ impl MutVisitor for PlaceholderExpander {
399399
stmts
400400
}
401401

402-
fn visit_pat(&mut self, pat: &mut P<ast::Pat>) {
402+
fn visit_pat(&mut self, pat: &mut ast::Pat) {
403403
match pat.kind {
404-
ast::PatKind::MacCall(_) => *pat = self.remove(pat.id).make_pat(),
404+
ast::PatKind::MacCall(_) => *pat = *self.remove(pat.id).make_pat(),
405405
_ => walk_pat(self, pat),
406406
}
407407
}
408408

409-
fn visit_ty(&mut self, ty: &mut P<ast::Ty>) {
409+
fn visit_ty(&mut self, ty: &mut ast::Ty) {
410410
match ty.kind {
411-
ast::TyKind::MacCall(_) => *ty = self.remove(ty.id).make_ty(),
411+
ast::TyKind::MacCall(_) => *ty = *self.remove(ty.id).make_ty(),
412412
_ => walk_ty(self, ty),
413413
}
414414
}

compiler/rustc_parse/src/parser/expr.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4081,7 +4081,7 @@ impl<'a> CondChecker<'a> {
40814081
}
40824082

40834083
impl MutVisitor for CondChecker<'_> {
4084-
fn visit_expr(&mut self, e: &mut P<Expr>) {
4084+
fn visit_expr(&mut self, e: &mut Expr) {
40854085
self.depth += 1;
40864086
use ForbiddenLetReason::*;
40874087

compiler/rustc_parse/src/parser/pat.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1094,7 +1094,7 @@ impl<'a> Parser<'a> {
10941094
fn make_all_value_bindings_mutable(pat: &mut P<Pat>) -> bool {
10951095
struct AddMut(bool);
10961096
impl MutVisitor for AddMut {
1097-
fn visit_pat(&mut self, pat: &mut P<Pat>) {
1097+
fn visit_pat(&mut self, pat: &mut Pat) {
10981098
if let PatKind::Ident(BindingMode(ByRef::No, m @ Mutability::Not), ..) =
10991099
&mut pat.kind
11001100
{

src/tools/clippy/clippy_lints/src/unnested_or_patterns.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ fn remove_all_parens(pat: &mut P<Pat>) {
128128
}
129129

130130
impl MutVisitor for Visitor {
131-
fn visit_pat(&mut self, pat: &mut P<Pat>) {
131+
fn visit_pat(&mut self, pat: &mut Pat) {
132132
let is_inner = mem::replace(&mut self.is_inner, true);
133133
walk_pat(self, pat);
134134
let inner = match &mut pat.kind {
@@ -145,7 +145,7 @@ fn remove_all_parens(pat: &mut P<Pat>) {
145145
fn insert_necessary_parens(pat: &mut P<Pat>) {
146146
struct Visitor;
147147
impl MutVisitor for Visitor {
148-
fn visit_pat(&mut self, pat: &mut P<Pat>) {
148+
fn visit_pat(&mut self, pat: &mut Pat) {
149149
use ast::BindingMode;
150150
walk_pat(self, pat);
151151
let target = match &mut pat.kind {
@@ -167,7 +167,7 @@ fn unnest_or_patterns(pat: &mut P<Pat>) -> bool {
167167
changed: bool,
168168
}
169169
impl MutVisitor for Visitor {
170-
fn visit_pat(&mut self, p: &mut P<Pat>) {
170+
fn visit_pat(&mut self, p: &mut Pat) {
171171
// This is a bottom up transformation, so recurse first.
172172
walk_pat(self, p);
173173

tests/ui-fulldeps/pprust-expr-roundtrip.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -187,9 +187,9 @@ fn iter_exprs(depth: usize, f: &mut dyn FnMut(P<Expr>)) {
187187
struct RemoveParens;
188188

189189
impl MutVisitor for RemoveParens {
190-
fn visit_expr(&mut self, e: &mut P<Expr>) {
190+
fn visit_expr(&mut self, e: &mut Expr) {
191191
match e.kind.clone() {
192-
ExprKind::Paren(inner) => *e = inner,
192+
ExprKind::Paren(inner) => *e = *inner,
193193
_ => {}
194194
};
195195
mut_visit::walk_expr(self, e);
@@ -200,11 +200,11 @@ impl MutVisitor for RemoveParens {
200200
struct AddParens;
201201

202202
impl MutVisitor for AddParens {
203-
fn visit_expr(&mut self, e: &mut P<Expr>) {
203+
fn visit_expr(&mut self, e: &mut Expr) {
204204
mut_visit::walk_expr(self, e);
205205
let expr = std::mem::replace(e, Expr::dummy());
206206

207-
e.kind = ExprKind::Paren(expr);
207+
e.kind = ExprKind::Paren(P(expr));
208208
}
209209
}
210210

tests/ui-fulldeps/pprust-parenthesis-insertion.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ use std::process::ExitCode;
4343
use parser::parse_expr;
4444
use rustc_ast::ast::{Expr, ExprKind};
4545
use rustc_ast::mut_visit::{self, MutVisitor};
46-
use rustc_ast::ptr::P;
4746
use rustc_ast_pretty::pprust;
4847
use rustc_session::parse::ParseSess;
4948

@@ -152,7 +151,7 @@ static EXPRS: &[&str] = &[
152151
struct Unparenthesize;
153152

154153
impl MutVisitor for Unparenthesize {
155-
fn visit_expr(&mut self, e: &mut P<Expr>) {
154+
fn visit_expr(&mut self, e: &mut Expr) {
156155
while let ExprKind::Paren(paren) = &mut e.kind {
157156
*e = mem::replace(paren, Expr::dummy());
158157
}

0 commit comments

Comments
 (0)