Skip to content

Commit 2a99f63

Browse files
committed
Remove special handling of box expressions from parser
1 parent 1ead476 commit 2a99f63

File tree

6 files changed

+9
-110
lines changed

6 files changed

+9
-110
lines changed

compiler/rustc_parse/src/parser/expr.rs

-27
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ use rustc_session::errors::{report_lit_error, ExprParenthesesNeeded};
3333
use rustc_session::lint::builtin::BREAK_WITH_LABEL_AND_LOOP;
3434
use rustc_session::lint::BuiltinLintDiagnostics;
3535
use rustc_span::source_map::{self, Spanned};
36-
use rustc_span::symbol::kw::PathRoot;
3736
use rustc_span::symbol::{kw, sym, Ident, Symbol};
3837
use rustc_span::{BytePos, Pos, Span};
3938
use thin_vec::{thin_vec, ThinVec};
@@ -612,9 +611,6 @@ impl<'a> Parser<'a> {
612611
let operand_expr = this.parse_expr_dot_or_call(Default::default())?;
613612
this.recover_from_prefix_increment(operand_expr, pre_span, starts_stmt)
614613
}
615-
token::Ident(..) if this.token.is_keyword(kw::Box) => {
616-
make_it!(this, attrs, |this, _| this.parse_expr_box(lo))
617-
}
618614
token::Ident(..) if this.may_recover() && this.is_mistaken_not_ident_negation() => {
619615
make_it!(this, attrs, |this, _| this.recover_not_expr(lo))
620616
}
@@ -641,29 +637,6 @@ impl<'a> Parser<'a> {
641637
self.parse_expr_unary(lo, UnOp::Not)
642638
}
643639

644-
/// Parse `box expr` - this syntax has been removed, but we still parse this
645-
/// for now to provide an automated way to fix usages of it
646-
fn parse_expr_box(&mut self, lo: Span) -> PResult<'a, (Span, ExprKind)> {
647-
let (span, expr) = self.parse_expr_prefix_common(lo)?;
648-
let code = self.sess.source_map().span_to_snippet(span.with_lo(lo.hi())).unwrap();
649-
self.dcx().emit_err(errors::BoxSyntaxRemoved { span, code: code.trim() });
650-
// So typechecking works, parse `box <expr>` as `::std::boxed::Box::new(expr)`
651-
let path = Path {
652-
span,
653-
segments: [
654-
PathSegment::from_ident(Ident::with_dummy_span(PathRoot)),
655-
PathSegment::from_ident(Ident::with_dummy_span(sym::std)),
656-
PathSegment::from_ident(Ident::from_str("boxed")),
657-
PathSegment::from_ident(Ident::from_str("Box")),
658-
PathSegment::from_ident(Ident::with_dummy_span(sym::new)),
659-
]
660-
.into(),
661-
tokens: None,
662-
};
663-
let path = self.mk_expr(span, ExprKind::Path(None, path));
664-
Ok((span, self.mk_call(path, ThinVec::from([expr]))))
665-
}
666-
667640
fn is_mistaken_not_ident_negation(&self) -> bool {
668641
let token_cannot_continue_expr = |t: &Token| match t.uninterpolate().kind {
669642
// These tokens can start an expression after `!`, but

tests/ui/parser/removed-syntax-box.fixed

-14
This file was deleted.

tests/ui/parser/removed-syntax-box.rs

+1-12
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,3 @@
1-
// run-rustfix
2-
31
fn main() {
4-
#[allow(dead_code)]
5-
struct T {
6-
a: u8,
7-
b: u8,
8-
}
9-
let _ = box (); //~ ERROR `box_syntax` has been removed
10-
let _ = box 1; //~ ERROR `box_syntax` has been removed
11-
let _ = box T { a: 12, b: 18 }; //~ ERROR `box_syntax` has been removed
12-
let _ = box [5; 30]; //~ ERROR `box_syntax` has been removed
13-
let _: Box<()> = box (); //~ ERROR `box_syntax` has been removed
2+
let _ = box (); //~ ERROR expected expression, found reserved keyword `box`
143
}
+4-53
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,8 @@
1-
error: `box_syntax` has been removed
2-
--> $DIR/removed-syntax-box.rs:9:13
1+
error: expected expression, found reserved keyword `box`
2+
--> $DIR/removed-syntax-box.rs:2:13
33
|
44
LL | let _ = box ();
5-
| ^^^^^^
6-
|
7-
help: use `Box::new()` instead
8-
|
9-
LL | let _ = Box::new(());
10-
| ~~~~~~~~~~~~
11-
12-
error: `box_syntax` has been removed
13-
--> $DIR/removed-syntax-box.rs:10:13
14-
|
15-
LL | let _ = box 1;
16-
| ^^^^^
17-
|
18-
help: use `Box::new()` instead
19-
|
20-
LL | let _ = Box::new(1);
21-
| ~~~~~~~~~~~
22-
23-
error: `box_syntax` has been removed
24-
--> $DIR/removed-syntax-box.rs:11:13
25-
|
26-
LL | let _ = box T { a: 12, b: 18 };
27-
| ^^^^^^^^^^^^^^^^^^^^^^
28-
|
29-
help: use `Box::new()` instead
30-
|
31-
LL | let _ = Box::new(T { a: 12, b: 18 });
32-
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
33-
34-
error: `box_syntax` has been removed
35-
--> $DIR/removed-syntax-box.rs:12:13
36-
|
37-
LL | let _ = box [5; 30];
38-
| ^^^^^^^^^^^
39-
|
40-
help: use `Box::new()` instead
41-
|
42-
LL | let _ = Box::new([5; 30]);
43-
| ~~~~~~~~~~~~~~~~~
44-
45-
error: `box_syntax` has been removed
46-
--> $DIR/removed-syntax-box.rs:13:22
47-
|
48-
LL | let _: Box<()> = box ();
49-
| ^^^^^^
50-
|
51-
help: use `Box::new()` instead
52-
|
53-
LL | let _: Box<()> = Box::new(());
54-
| ~~~~~~~~~~~~
5+
| ^^^ expected expression
556

56-
error: aborting due to 5 previous errors
7+
error: aborting due to 1 previous error
578

Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
fn main() {
2-
let a_box = box mut 42; //~ ERROR expected expression, found keyword `mut`
2+
let a_box = box mut 42; //~ ERROR expected expression, found reserved keyword `box`
33
}
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
error: expected expression, found keyword `mut`
2-
--> $DIR/removed-syntax-uniq-mut-expr.rs:2:21
1+
error: expected expression, found reserved keyword `box`
2+
--> $DIR/removed-syntax-uniq-mut-expr.rs:2:17
33
|
44
LL | let a_box = box mut 42;
5-
| ^^^ expected expression
5+
| ^^^ expected expression
66

77
error: aborting due to 1 previous error
88

0 commit comments

Comments
 (0)