@@ -2823,6 +2823,15 @@ ParserResult<LifetimeAttr> Parser::parseLifetimeAttribute(SourceLoc atLoc,
28232823 diag::expected_rparen_after_lifetime_dependence, [&]() -> ParserStatus {
28242824 ParserStatus listStatus;
28252825 foundParamId = true ;
2826+
2827+ auto lifetimeDependenceKind = ParsedLifetimeDependenceKind::Default;
2828+ if (Tok.isContextualKeyword (" borrow" ) &&
2829+ peekToken ().isAny (tok::identifier, tok::integer_literal,
2830+ tok::kw_self)) {
2831+ lifetimeDependenceKind = ParsedLifetimeDependenceKind::Scope;
2832+ consumeToken ();
2833+ }
2834+
28262835 switch (Tok.getKind ()) {
28272836 case tok::identifier: {
28282837 Identifier paramName;
@@ -2832,8 +2841,8 @@ ParserResult<LifetimeAttr> Parser::parseLifetimeAttribute(SourceLoc atLoc,
28322841 lifetimeEntries.push_back (
28332842 LifetimeEntry::getImmortalLifetimeEntry (paramLoc));
28342843 } else {
2835- lifetimeEntries.push_back (
2836- LifetimeEntry::getNamedLifetimeEntry ( paramLoc, paramName));
2844+ lifetimeEntries.push_back (LifetimeEntry::getNamedLifetimeEntry (
2845+ paramLoc, paramName, lifetimeDependenceKind ));
28372846 }
28382847 break ;
28392848 }
@@ -2846,14 +2855,14 @@ ParserResult<LifetimeAttr> Parser::parseLifetimeAttribute(SourceLoc atLoc,
28462855 listStatus.setIsParseError ();
28472856 return listStatus;
28482857 }
2849- lifetimeEntries.push_back (
2850- LifetimeEntry::getOrderedLifetimeEntry ( paramLoc, paramNum));
2858+ lifetimeEntries.push_back (LifetimeEntry::getOrderedLifetimeEntry (
2859+ paramLoc, paramNum, lifetimeDependenceKind ));
28512860 break ;
28522861 }
28532862 case tok::kw_self: {
28542863 auto paramLoc = consumeToken (tok::kw_self);
2855- lifetimeEntries.push_back (
2856- LifetimeEntry::getSelfLifetimeEntry ( paramLoc));
2864+ lifetimeEntries.push_back (LifetimeEntry::getSelfLifetimeEntry (
2865+ paramLoc, lifetimeDependenceKind ));
28572866 break ;
28582867 }
28592868 default :
0 commit comments