diff options
Diffstat (limited to 'crates/ra_parser/src/grammar')
-rw-r--r-- | crates/ra_parser/src/grammar/expressions.rs | 5 | ||||
-rw-r--r-- | crates/ra_parser/src/grammar/expressions/atom.rs | 15 | ||||
-rw-r--r-- | crates/ra_parser/src/grammar/patterns.rs | 3 |
3 files changed, 18 insertions, 5 deletions
diff --git a/crates/ra_parser/src/grammar/expressions.rs b/crates/ra_parser/src/grammar/expressions.rs index 2ae05521c..795dccea1 100644 --- a/crates/ra_parser/src/grammar/expressions.rs +++ b/crates/ra_parser/src/grammar/expressions.rs | |||
@@ -583,8 +583,3 @@ pub(crate) fn named_field_list(p: &mut Parser) { | |||
583 | p.expect(T!['}']); | 583 | p.expect(T!['}']); |
584 | m.complete(p, NAMED_FIELD_LIST); | 584 | m.complete(p, NAMED_FIELD_LIST); |
585 | } | 585 | } |
586 | |||
587 | // test box_syntax | ||
588 | // fn foo() { | ||
589 | // let x = box 1i32; | ||
590 | // } | ||
diff --git a/crates/ra_parser/src/grammar/expressions/atom.rs b/crates/ra_parser/src/grammar/expressions/atom.rs index 725fb99f6..41be283d0 100644 --- a/crates/ra_parser/src/grammar/expressions/atom.rs +++ b/crates/ra_parser/src/grammar/expressions/atom.rs | |||
@@ -74,6 +74,7 @@ pub(super) fn atom_expr(p: &mut Parser, r: Restrictions) -> Option<(CompletedMar | |||
74 | T![if] => if_expr(p), | 74 | T![if] => if_expr(p), |
75 | 75 | ||
76 | T![loop] => loop_expr(p, None), | 76 | T![loop] => loop_expr(p, None), |
77 | T![box] => box_expr(p, None), | ||
77 | T![for] => for_expr(p, None), | 78 | T![for] => for_expr(p, None), |
78 | T![while] => while_expr(p, None), | 79 | T![while] => while_expr(p, None), |
79 | T![try] => try_block_expr(p, None), | 80 | T![try] => try_block_expr(p, None), |
@@ -507,3 +508,17 @@ fn try_block_expr(p: &mut Parser, m: Option<Marker>) -> CompletedMarker { | |||
507 | block(p); | 508 | block(p); |
508 | m.complete(p, TRY_EXPR) | 509 | m.complete(p, TRY_EXPR) |
509 | } | 510 | } |
511 | |||
512 | // test box_expr | ||
513 | // fn foo() { | ||
514 | // let x = box 1i32; | ||
515 | // } | ||
516 | fn box_expr(p: &mut Parser, m: Option<Marker>) -> CompletedMarker { | ||
517 | assert!(p.at(T![box])); | ||
518 | let m = m.unwrap_or_else(|| p.start()); | ||
519 | p.bump(); | ||
520 | if p.at_ts(EXPR_FIRST) { | ||
521 | expr(p); | ||
522 | } | ||
523 | m.complete(p, BOX_EXPR) | ||
524 | } | ||
diff --git a/crates/ra_parser/src/grammar/patterns.rs b/crates/ra_parser/src/grammar/patterns.rs index 16ae9da63..46034942a 100644 --- a/crates/ra_parser/src/grammar/patterns.rs +++ b/crates/ra_parser/src/grammar/patterns.rs | |||
@@ -60,6 +60,7 @@ fn atom_pat(p: &mut Parser, recovery_set: TokenSet) -> Option<CompletedMarker> { | |||
60 | let la1 = p.nth(1); | 60 | let la1 = p.nth(1); |
61 | if la0 == T![ref] | 61 | if la0 == T![ref] |
62 | || la0 == T![mut] | 62 | || la0 == T![mut] |
63 | || la0 == T![box] | ||
63 | || (la0 == IDENT && !(la1 == T![::] || la1 == T!['('] || la1 == T!['{'] || la1 == T![!])) | 64 | || (la0 == IDENT && !(la1 == T![::] || la1 == T!['('] || la1 == T!['{'] || la1 == T![!])) |
64 | { | 65 | { |
65 | return Some(bind_pat(p, true)); | 66 | return Some(bind_pat(p, true)); |
@@ -260,9 +261,11 @@ fn pat_list(p: &mut Parser, ket: SyntaxKind) { | |||
260 | // let ref mut d = (); | 261 | // let ref mut d = (); |
261 | // let e @ _ = (); | 262 | // let e @ _ = (); |
262 | // let ref mut f @ g @ _ = (); | 263 | // let ref mut f @ g @ _ = (); |
264 | // let box i = Box::new(1i32); | ||
263 | // } | 265 | // } |
264 | fn bind_pat(p: &mut Parser, with_at: bool) -> CompletedMarker { | 266 | fn bind_pat(p: &mut Parser, with_at: bool) -> CompletedMarker { |
265 | let m = p.start(); | 267 | let m = p.start(); |
268 | p.eat(T![box]); | ||
266 | p.eat(T![ref]); | 269 | p.eat(T![ref]); |
267 | p.eat(T![mut]); | 270 | p.eat(T![mut]); |
268 | name(p); | 271 | name(p); |