@@ -2819,6 +2819,15 @@ ParserResult<LifetimeAttr> Parser::parseLifetimeAttribute(SourceLoc atLoc,
28192819 diag::expected_rparen_after_lifetime_dependence, [&]() -> ParserStatus {
28202820 ParserStatus listStatus;
28212821 foundParamId = true ;
2822+
2823+ auto lifetimeDependenceKind = ParsedLifetimeDependenceKind::Default;
2824+ if (Tok.isContextualKeyword (" borrow" ) &&
2825+ peekToken ().isAny (tok::identifier, tok::integer_literal,
2826+ tok::kw_self)) {
2827+ lifetimeDependenceKind = ParsedLifetimeDependenceKind::Scope;
2828+ consumeToken ();
2829+ }
2830+
28222831 switch (Tok.getKind ()) {
28232832 case tok::identifier: {
28242833 Identifier paramName;
@@ -2828,8 +2837,8 @@ ParserResult<LifetimeAttr> Parser::parseLifetimeAttribute(SourceLoc atLoc,
28282837 lifetimeEntries.push_back (
28292838 LifetimeEntry::getImmortalLifetimeEntry (paramLoc));
28302839 } else {
2831- lifetimeEntries.push_back (
2832- LifetimeEntry::getNamedLifetimeEntry ( paramLoc, paramName));
2840+ lifetimeEntries.push_back (LifetimeEntry::getNamedLifetimeEntry (
2841+ paramLoc, paramName, lifetimeDependenceKind ));
28332842 }
28342843 break ;
28352844 }
@@ -2842,14 +2851,14 @@ ParserResult<LifetimeAttr> Parser::parseLifetimeAttribute(SourceLoc atLoc,
28422851 listStatus.setIsParseError ();
28432852 return listStatus;
28442853 }
2845- lifetimeEntries.push_back (
2846- LifetimeEntry::getOrderedLifetimeEntry ( paramLoc, paramNum));
2854+ lifetimeEntries.push_back (LifetimeEntry::getOrderedLifetimeEntry (
2855+ paramLoc, paramNum, lifetimeDependenceKind ));
28472856 break ;
28482857 }
28492858 case tok::kw_self: {
28502859 auto paramLoc = consumeToken (tok::kw_self);
2851- lifetimeEntries.push_back (
2852- LifetimeEntry::getSelfLifetimeEntry ( paramLoc));
2860+ lifetimeEntries.push_back (LifetimeEntry::getSelfLifetimeEntry (
2861+ paramLoc, lifetimeDependenceKind ));
28532862 break ;
28542863 }
28552864 default :
0 commit comments