@@ -2819,6 +2819,15 @@ ParserResult<LifetimeAttr> Parser::parseLifetimeAttribute(SourceLoc atLoc,
2819
2819
diag::expected_rparen_after_lifetime_dependence, [&]() -> ParserStatus {
2820
2820
ParserStatus listStatus;
2821
2821
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
+
2822
2831
switch (Tok.getKind ()) {
2823
2832
case tok::identifier: {
2824
2833
Identifier paramName;
@@ -2828,8 +2837,8 @@ ParserResult<LifetimeAttr> Parser::parseLifetimeAttribute(SourceLoc atLoc,
2828
2837
lifetimeEntries.push_back (
2829
2838
LifetimeEntry::getImmortalLifetimeEntry (paramLoc));
2830
2839
} else {
2831
- lifetimeEntries.push_back (
2832
- LifetimeEntry::getNamedLifetimeEntry ( paramLoc, paramName));
2840
+ lifetimeEntries.push_back (LifetimeEntry::getNamedLifetimeEntry (
2841
+ paramLoc, paramName, lifetimeDependenceKind ));
2833
2842
}
2834
2843
break ;
2835
2844
}
@@ -2842,14 +2851,14 @@ ParserResult<LifetimeAttr> Parser::parseLifetimeAttribute(SourceLoc atLoc,
2842
2851
listStatus.setIsParseError ();
2843
2852
return listStatus;
2844
2853
}
2845
- lifetimeEntries.push_back (
2846
- LifetimeEntry::getOrderedLifetimeEntry ( paramLoc, paramNum));
2854
+ lifetimeEntries.push_back (LifetimeEntry::getOrderedLifetimeEntry (
2855
+ paramLoc, paramNum, lifetimeDependenceKind ));
2847
2856
break ;
2848
2857
}
2849
2858
case tok::kw_self: {
2850
2859
auto paramLoc = consumeToken (tok::kw_self);
2851
- lifetimeEntries.push_back (
2852
- LifetimeEntry::getSelfLifetimeEntry ( paramLoc));
2860
+ lifetimeEntries.push_back (LifetimeEntry::getSelfLifetimeEntry (
2861
+ paramLoc, lifetimeDependenceKind ));
2853
2862
break ;
2854
2863
}
2855
2864
default :
0 commit comments