@@ -370,6 +370,7 @@ ParserResult<Expr> Parser::parseExprSequence(Diag<> Message,
370
370
// / 'try' '?' expr-sequence-element(Mode)
371
371
// / 'try' '!' expr-sequence-element(Mode)
372
372
// / '_move' expr-sequence-element(Mode)
373
+ // / 'borrow' expr-sequence-element(Mode)
373
374
// / expr-unary(Mode)
374
375
// /
375
376
// / 'try' is not actually allowed at an arbitrary position of a
@@ -405,17 +406,28 @@ ParserResult<Expr> Parser::parseExprSequenceElement(Diag<> message,
405
406
return sub;
406
407
}
407
408
408
- if (Context.LangOpts .hasFeature (Feature::MoveOnly)
409
- && Tok.isContextualKeyword (" _move" )) {
410
- Tok.setKind (tok::contextual_keyword);
411
- SourceLoc awaitLoc = consumeToken ();
412
- ParserResult<Expr> sub =
413
- parseExprSequenceElement (diag::expected_expr_after_await, isExprBasic);
414
- if (!sub.hasCodeCompletion () && !sub.isNull ()) {
415
- sub = makeParserResult (new (Context) MoveExpr (awaitLoc, sub.get ()));
409
+ if (Context.LangOpts .hasFeature (Feature::MoveOnly)) {
410
+ if (Tok.isContextualKeyword (" _move" )) {
411
+ Tok.setKind (tok::contextual_keyword);
412
+ SourceLoc awaitLoc = consumeToken ();
413
+ ParserResult<Expr> sub =
414
+ parseExprSequenceElement (diag::expected_expr_after_move, isExprBasic);
415
+ if (!sub.hasCodeCompletion () && !sub.isNull ()) {
416
+ sub = makeParserResult (new (Context) MoveExpr (awaitLoc, sub.get ()));
417
+ }
418
+ return sub;
416
419
}
417
420
418
- return sub;
421
+ if (Tok.isContextualKeyword (" _borrow" )) {
422
+ Tok.setKind (tok::contextual_keyword);
423
+ SourceLoc awaitLoc = consumeToken ();
424
+ ParserResult<Expr> sub = parseExprSequenceElement (
425
+ diag::expected_expr_after_borrow, isExprBasic);
426
+ if (!sub.hasCodeCompletion () && !sub.isNull ()) {
427
+ sub = makeParserResult (new (Context) BorrowExpr (awaitLoc, sub.get ()));
428
+ }
429
+ return sub;
430
+ }
419
431
}
420
432
421
433
SourceLoc tryLoc;
0 commit comments