Skip to content

Commit 9bea01a

Browse files
committed
[NFC] Add DeclNameLoc to specialize/dynamicReplacement
1 parent 4962754 commit 9bea01a

File tree

7 files changed

+75
-46
lines changed

7 files changed

+75
-46
lines changed

include/swift/AST/ASTBridging.h

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1015,11 +1015,12 @@ BridgedDocumentationAttr BridgedDocumentationAttr_createParsed(
10151015

10161016
SWIFT_NAME(
10171017
"BridgedDynamicReplacementAttr.createParsed(_:atLoc:attrNameLoc:lParenLoc:"
1018-
"replacedFunction:rParenLoc:)")
1018+
"replacedFunction:replacedFunctionLoc:rParenLoc:)")
10191019
BridgedDynamicReplacementAttr BridgedDynamicReplacementAttr_createParsed(
10201020
BridgedASTContext cContext, BridgedSourceLoc cAtLoc,
10211021
BridgedSourceLoc cAttrNameLoc, BridgedSourceLoc cLParenLoc,
1022-
BridgedDeclNameRef cReplacedFunction, BridgedSourceLoc cRParenLoc);
1022+
BridgedDeclNameRef cReplacedFunction,
1023+
BridgedDeclNameLoc cReplacedFunctionLoc, BridgedSourceLoc cRParenLoc);
10231024

10241025
enum ENUM_EXTENSIBILITY_ATTR(closed) BridgedEffectsKind {
10251026
BridgedEffectsKindReadNone,
@@ -1388,13 +1389,14 @@ enum ENUM_EXTENSIBILITY_ATTR(closed) BridgedSpecializationKind : uint8_t {
13881389
};
13891390

13901391
SWIFT_NAME("BridgedSpecializeAttr.createParsed(_:atLoc:range:whereClause:"
1391-
"exported:kind:taretFunction:spiGroups:availableAttrs:)")
1392+
"exported:kind:targetFunction:targetFunctionLoc:spiGroups:"
1393+
"availableAttrs:)")
13921394
BridgedSpecializeAttr BridgedSpecializeAttr_createParsed(
13931395
BridgedASTContext cContext, BridgedSourceLoc cAtLoc,
13941396
BridgedSourceRange cRange, BridgedNullableTrailingWhereClause cWhereClause,
13951397
bool exported, BridgedSpecializationKind cKind,
1396-
BridgedDeclNameRef cTargetFunction, BridgedArrayRef cSPIGroups,
1397-
BridgedArrayRef cAvailableAttrs);
1398+
BridgedDeclNameRef cTargetFunction, BridgedDeclNameLoc cTargetFunctionLoc,
1399+
BridgedArrayRef cSPIGroups, BridgedArrayRef cAvailableAttrs);
13981400

13991401
SWIFT_NAME(
14001402
"BridgedSPIAccessControlAttr.createParsed(_:atLoc:range:spiGroupName:)")

include/swift/AST/Attr.h

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1207,19 +1207,22 @@ class DynamicReplacementAttr final
12071207
friend class DynamicallyReplacedDeclRequest;
12081208

12091209
DeclNameRef ReplacedFunctionName;
1210+
DeclNameLoc ReplacedFunctionNameLoc;
12101211
LazyMemberLoader *Resolver = nullptr;
12111212
uint64_t ResolverContextData;
12121213

12131214
/// Create an @_dynamicReplacement(for:) attribute written in the source.
12141215
DynamicReplacementAttr(SourceLoc atLoc, SourceRange baseRange,
12151216
DeclNameRef replacedFunctionName,
1217+
DeclNameLoc replacedFunctionNameLoc,
12161218
SourceRange parenRange);
12171219

12181220
DynamicReplacementAttr(DeclNameRef name, AbstractFunctionDecl *f)
12191221
: DeclAttribute(DeclAttrKind::DynamicReplacement, SourceLoc(),
12201222
SourceRange(),
12211223
/*Implicit=*/false),
1222-
ReplacedFunctionName(name), Resolver(nullptr), ResolverContextData(0) {
1224+
ReplacedFunctionName(name), ReplacedFunctionNameLoc(),
1225+
Resolver(nullptr), ResolverContextData(0) {
12231226
Bits.DynamicReplacementAttr.HasTrailingLocationInfo = false;
12241227
}
12251228

@@ -1228,8 +1231,8 @@ class DynamicReplacementAttr final
12281231
: DeclAttribute(DeclAttrKind::DynamicReplacement, SourceLoc(),
12291232
SourceRange(),
12301233
/*Implicit=*/false),
1231-
ReplacedFunctionName(name), Resolver(Resolver),
1232-
ResolverContextData(Data) {
1234+
ReplacedFunctionName(name), ReplacedFunctionNameLoc(),
1235+
Resolver(Resolver), ResolverContextData(Data) {
12331236
Bits.DynamicReplacementAttr.HasTrailingLocationInfo = false;
12341237
}
12351238

@@ -1250,7 +1253,8 @@ class DynamicReplacementAttr final
12501253
public:
12511254
static DynamicReplacementAttr *
12521255
create(ASTContext &Context, SourceLoc AtLoc, SourceLoc DynReplLoc,
1253-
SourceLoc LParenLoc, DeclNameRef replacedFunction, SourceLoc RParenLoc);
1256+
SourceLoc LParenLoc, DeclNameRef replacedFunction,
1257+
DeclNameLoc replacedFunctionNameLoc, SourceLoc RParenLoc);
12541258

12551259
static DynamicReplacementAttr *create(ASTContext &ctx,
12561260
DeclNameRef replacedFunction,
@@ -1265,6 +1269,10 @@ class DynamicReplacementAttr final
12651269
return ReplacedFunctionName;
12661270
}
12671271

1272+
DeclNameLoc getReplacedFunctionNameLoc() const {
1273+
return ReplacedFunctionNameLoc;
1274+
}
1275+
12681276
/// Retrieve the location of the opening parentheses, if there is one.
12691277
SourceLoc getLParenLoc() const;
12701278

@@ -1752,6 +1760,7 @@ class SpecializeAttr final
17521760
GenericSignature specializedSignature;
17531761

17541762
DeclNameRef targetFunctionName;
1763+
DeclNameLoc targetFunctionNameLoc;
17551764
LazyMemberLoader *resolver = nullptr;
17561765
uint64_t resolverContextData;
17571766
size_t numSPIGroups;
@@ -1762,15 +1771,18 @@ class SpecializeAttr final
17621771
SpecializeAttr(SourceLoc atLoc, SourceRange Range,
17631772
TrailingWhereClause *clause, bool exported,
17641773
SpecializationKind kind, GenericSignature specializedSignature,
1765-
DeclNameRef targetFunctionName, ArrayRef<Identifier> spiGroups,
1774+
DeclNameRef targetFunctionName,
1775+
DeclNameLoc targetFunctionNameLoc,
1776+
ArrayRef<Identifier> spiGroups,
17661777
ArrayRef<AvailableAttr *> availabilityAttrs,
17671778
size_t typeErasedParamsCount);
17681779

17691780
public:
17701781
static SpecializeAttr *
17711782
create(ASTContext &Ctx, SourceLoc atLoc, SourceRange Range,
17721783
TrailingWhereClause *clause, bool exported, SpecializationKind kind,
1773-
DeclNameRef targetFunctionName, ArrayRef<Identifier> spiGroups,
1784+
DeclNameRef targetFunctionName, DeclNameLoc targetFunctionNameLoc,
1785+
ArrayRef<Identifier> spiGroups,
17741786
ArrayRef<AvailableAttr *> availabilityAttrs,
17751787
GenericSignature specializedSignature = nullptr);
17761788

@@ -1849,6 +1861,10 @@ class SpecializeAttr final
18491861
return targetFunctionName;
18501862
}
18511863

1864+
DeclNameLoc getTargetFunctionNameLoc() const {
1865+
return targetFunctionNameLoc;
1866+
}
1867+
18521868
/// \p forDecl is the value decl that the attribute belongs to.
18531869
ValueDecl *getTargetFunctionDecl(const ValueDecl *forDecl) const;
18541870

include/swift/Parse/Parser.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1055,7 +1055,7 @@ class Parser {
10551055
std::optional<bool> &Exported,
10561056
std::optional<SpecializeAttr::SpecializationKind> &Kind,
10571057
TrailingWhereClause *&TrailingWhereClause, DeclNameRef &targetFunction,
1058-
AvailabilityRange *SILAvailability,
1058+
DeclNameLoc &targetFunctionLoc, AvailabilityRange *SILAvailability,
10591059
SmallVectorImpl<Identifier> &spiGroups,
10601060
SmallVectorImpl<AvailableAttr *> &availableAttrs,
10611061
llvm::function_ref<bool(Parser &)> parseSILTargetName,

lib/AST/Attr.cpp

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2080,10 +2080,11 @@ PrivateImportAttr *PrivateImportAttr::create(ASTContext &Ctxt, SourceLoc AtLoc,
20802080
DynamicReplacementAttr::DynamicReplacementAttr(SourceLoc atLoc,
20812081
SourceRange baseRange,
20822082
DeclNameRef name,
2083+
DeclNameLoc nameLoc,
20832084
SourceRange parenRange)
20842085
: DeclAttribute(DeclAttrKind::DynamicReplacement, atLoc, baseRange,
20852086
/*Implicit=*/false),
2086-
ReplacedFunctionName(name) {
2087+
ReplacedFunctionName(name), ReplacedFunctionNameLoc(nameLoc) {
20872088
Bits.DynamicReplacementAttr.HasTrailingLocationInfo = true;
20882089
getTrailingLocations()[0] = parenRange.Start;
20892090
getTrailingLocations()[1] = parenRange.End;
@@ -2092,11 +2093,12 @@ DynamicReplacementAttr::DynamicReplacementAttr(SourceLoc atLoc,
20922093
DynamicReplacementAttr *
20932094
DynamicReplacementAttr::create(ASTContext &Ctx, SourceLoc AtLoc,
20942095
SourceLoc DynReplLoc, SourceLoc LParenLoc,
2095-
DeclNameRef ReplacedFunction, SourceLoc RParenLoc) {
2096+
DeclNameRef ReplacedFunction,
2097+
DeclNameLoc nameLoc, SourceLoc RParenLoc) {
20962098
void *mem = Ctx.Allocate(totalSizeToAlloc<SourceLoc>(2),
20972099
alignof(DynamicReplacementAttr));
20982100
return new (mem) DynamicReplacementAttr(
2099-
AtLoc, SourceRange(DynReplLoc, RParenLoc), ReplacedFunction,
2101+
AtLoc, SourceRange(DynReplLoc, RParenLoc), ReplacedFunction, nameLoc,
21002102
SourceRange(LParenLoc, RParenLoc));
21012103
}
21022104

@@ -2446,13 +2448,16 @@ SpecializeAttr::SpecializeAttr(SourceLoc atLoc, SourceRange range,
24462448
SpecializationKind kind,
24472449
GenericSignature specializedSignature,
24482450
DeclNameRef targetFunctionName,
2451+
DeclNameLoc targetFunctionNameLoc,
24492452
ArrayRef<Identifier> spiGroups,
24502453
ArrayRef<AvailableAttr *> availableAttrs,
24512454
size_t typeErasedParamsCount)
24522455
: DeclAttribute(DeclAttrKind::Specialize, atLoc, range,
24532456
/*Implicit=*/clause == nullptr),
24542457
trailingWhereClause(clause), specializedSignature(specializedSignature),
2455-
targetFunctionName(targetFunctionName), numSPIGroups(spiGroups.size()),
2458+
targetFunctionName(targetFunctionName),
2459+
targetFunctionNameLoc(targetFunctionNameLoc),
2460+
numSPIGroups(spiGroups.size()),
24562461
numAvailableAttrs(availableAttrs.size()),
24572462
numTypeErasedParams(typeErasedParamsCount),
24582463
typeErasedParamsInitialized(false) {
@@ -2474,6 +2479,7 @@ SpecializeAttr *SpecializeAttr::create(ASTContext &Ctx, SourceLoc atLoc,
24742479
TrailingWhereClause *clause,
24752480
bool exported, SpecializationKind kind,
24762481
DeclNameRef targetFunctionName,
2482+
DeclNameLoc targetFunctionNameLoc,
24772483
ArrayRef<Identifier> spiGroups,
24782484
ArrayRef<AvailableAttr *> availableAttrs,
24792485
GenericSignature specializedSignature) {
@@ -2499,7 +2505,8 @@ SpecializeAttr *SpecializeAttr::create(ASTContext &Ctx, SourceLoc atLoc,
24992505

25002506
return new (mem)
25012507
SpecializeAttr(atLoc, range, clause, exported, kind, specializedSignature,
2502-
targetFunctionName, spiGroups, availableAttrs, typeErasedParamsCount);
2508+
targetFunctionName, targetFunctionNameLoc, spiGroups,
2509+
availableAttrs, typeErasedParamsCount);
25032510
}
25042511

25052512
SpecializeAttr *SpecializeAttr::create(ASTContext &ctx, bool exported,
@@ -2513,7 +2520,7 @@ SpecializeAttr *SpecializeAttr::create(ASTContext &ctx, bool exported,
25132520
void *mem = ctx.Allocate(size, alignof(SpecializeAttr));
25142521
return new (mem) SpecializeAttr(
25152522
SourceLoc(), SourceRange(), nullptr, exported, kind, specializedSignature,
2516-
targetFunctionName, spiGroups, availableAttrs, 0);
2523+
targetFunctionName, DeclNameLoc(), spiGroups, availableAttrs, 0);
25172524
}
25182525

25192526
SpecializeAttr *SpecializeAttr::create(
@@ -2527,7 +2534,8 @@ SpecializeAttr *SpecializeAttr::create(
25272534
void *mem = ctx.Allocate(size, alignof(SpecializeAttr));
25282535
auto *attr = new (mem) SpecializeAttr(
25292536
SourceLoc(), SourceRange(), nullptr, exported, kind, specializedSignature,
2530-
targetFunctionName, spiGroups, availableAttrs, typeErasedParams.size());
2537+
targetFunctionName, DeclNameLoc(), spiGroups, availableAttrs,
2538+
typeErasedParams.size());
25312539
attr->setTypeErasedParams(typeErasedParams);
25322540
attr->resolver = resolver;
25332541
attr->resolverContextData = data;

lib/AST/Bridging/DeclAttributeBridging.cpp

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -322,11 +322,12 @@ BridgedDifferentiableAttr BridgedDifferentiableAttr_createParsed(
322322
BridgedDynamicReplacementAttr BridgedDynamicReplacementAttr_createParsed(
323323
BridgedASTContext cContext, BridgedSourceLoc cAtLoc,
324324
BridgedSourceLoc cAttrNameLoc, BridgedSourceLoc cLParenLoc,
325-
BridgedDeclNameRef cReplacedFunction, BridgedSourceLoc cRParenLoc) {
325+
BridgedDeclNameRef cReplacedFunction,
326+
BridgedDeclNameLoc cReplacedFunctionLoc, BridgedSourceLoc cRParenLoc) {
326327
return DynamicReplacementAttr::create(
327328
cContext.unbridged(), cAtLoc.unbridged(), cAttrNameLoc.unbridged(),
328329
cLParenLoc.unbridged(), cReplacedFunction.unbridged(),
329-
cRParenLoc.unbridged());
330+
cReplacedFunctionLoc.unbridged(), cRParenLoc.unbridged());
330331
}
331332

332333
BridgedDocumentationAttr BridgedDocumentationAttr_createParsed(
@@ -853,8 +854,8 @@ BridgedSpecializeAttr BridgedSpecializeAttr_createParsed(
853854
BridgedASTContext cContext, BridgedSourceLoc cAtLoc,
854855
BridgedSourceRange cRange, BridgedNullableTrailingWhereClause cWhereClause,
855856
bool exported, BridgedSpecializationKind cKind,
856-
BridgedDeclNameRef cTargetFunction, BridgedArrayRef cSPIGroups,
857-
BridgedArrayRef cAvailableAttrs) {
857+
BridgedDeclNameRef cTargetFunction, BridgedDeclNameLoc cTargetFunctionLoc,
858+
BridgedArrayRef cSPIGroups, BridgedArrayRef cAvailableAttrs) {
858859
SmallVector<Identifier, 2> spiGroups;
859860
for (auto bridging : cSPIGroups.unbridged<BridgedIdentifier>())
860861
spiGroups.push_back(bridging.unbridged());
@@ -865,7 +866,8 @@ BridgedSpecializeAttr BridgedSpecializeAttr_createParsed(
865866
return SpecializeAttr::create(
866867
cContext.unbridged(), cAtLoc.unbridged(), cRange.unbridged(),
867868
cWhereClause.unbridged(), exported, unbridge(cKind),
868-
cTargetFunction.unbridged(), spiGroups, availableAttrs);
869+
cTargetFunction.unbridged(), cTargetFunctionLoc.unbridged(),
870+
spiGroups, availableAttrs);
869871
}
870872

871873
BridgedSPIAccessControlAttr BridgedSPIAccessControlAttr_createParsed(
@@ -918,4 +920,4 @@ BridgedUnavailableFromAsyncAttr BridgedUnavailableFromAsyncAttr_createParsed(
918920
return new (cContext.unbridged())
919921
UnavailableFromAsyncAttr(cMessage.unbridged(), cAtLoc.unbridged(),
920922
cRange.unbridged(), /*implicit=*/false);
921-
}
923+
}

lib/ASTGen/Sources/ASTGen/DeclAttrs.swift

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -740,6 +740,7 @@ extension ASTGenVisitor {
740740
attrNameLoc: self.generateSourceLoc(node.attributeName),
741741
lParenLoc: self.generateSourceLoc(node.leftParen),
742742
replacedFunction: replacedFunction.name,
743+
replacedFunctionLoc: replacedFunction.loc,
743744
rParenLoc: self.generateSourceLoc(node.rightParen)
744745
)
745746
}
@@ -1884,7 +1885,7 @@ extension ASTGenVisitor {
18841885
var exported: Bool?
18851886
var kind: BridgedSpecializationKind? = nil
18861887
var whereClause: BridgedTrailingWhereClause? = nil
1887-
var targetFunction: BridgedDeclNameRef? = nil
1888+
var targetFunction: (name: BridgedDeclNameRef, loc: BridgedDeclNameLoc)?
18881889
var spiGroups: [BridgedIdentifier] = []
18891890
var availableAttrs: [BridgedAvailableAttr] = []
18901891

@@ -1896,7 +1897,7 @@ extension ASTGenVisitor {
18961897
if targetFunction != nil {
18971898
// TODO: Diangose.
18981899
}
1899-
targetFunction = self.generateDeclNameRef(declReferenceExpr: arg.declName).name
1900+
targetFunction = self.generateDeclNameRef(declReferenceExpr: arg.declName)
19001901
case .specializeAvailabilityArgument(let arg):
19011902
availableAttrs = self.generateAvailableAttr(
19021903
atLoc: self.generateSourceLoc(arg.availabilityLabel),
@@ -1960,7 +1961,8 @@ extension ASTGenVisitor {
19601961
whereClause: whereClause.asNullable,
19611962
exported: exported ?? false,
19621963
kind: kind ?? .full,
1963-
taretFunction: targetFunction ?? BridgedDeclNameRef(),
1964+
targetFunction: targetFunction?.name ?? BridgedDeclNameRef(),
1965+
targetFunctionLoc: targetFunction?.loc ?? BridgedDeclNameLoc(),
19641966
spiGroups: spiGroups.lazy.bridgedArray(in: self),
19651967
availableAttrs: availableAttrs.lazy.bridgedArray(in: self)
19661968
)

lib/Parse/ParseDecl.cpp

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -564,8 +564,8 @@ bool Parser::parseSpecializeAttributeArguments(
564564
std::optional<bool> &Exported,
565565
std::optional<SpecializeAttr::SpecializationKind> &Kind,
566566
swift::TrailingWhereClause *&TrailingWhereClause,
567-
DeclNameRef &targetFunction, AvailabilityRange *SILAvailability,
568-
SmallVectorImpl<Identifier> &spiGroups,
567+
DeclNameRef &targetFunction, DeclNameLoc &targetFunctionLoc,
568+
AvailabilityRange *SILAvailability, SmallVectorImpl<Identifier> &spiGroups,
569569
SmallVectorImpl<AvailableAttr *> &availableAttrs,
570570
llvm::function_ref<bool(Parser &)> parseSILTargetName,
571571
llvm::function_ref<bool(Parser &)> parseSILSIPModule) {
@@ -666,9 +666,8 @@ bool Parser::parseSpecializeAttributeArguments(
666666
}
667667
if (ParamLabel == "target") {
668668
if (!parseSILTargetName(*this)) {
669-
DeclNameLoc loc;
670669
targetFunction = parseDeclNameRef(
671-
loc, diag::attr_specialize_expected_function,
670+
targetFunctionLoc, diag::attr_specialize_expected_function,
672671
DeclNameFlag::AllowZeroArgCompoundNames |
673672
DeclNameFlag::AllowKeywordsUsingSpecialNames |
674673
DeclNameFlag::AllowOperators |
@@ -881,12 +880,13 @@ bool Parser::parseSpecializeAttribute(
881880
TrailingWhereClause *trailingWhereClause = nullptr;
882881

883882
DeclNameRef targetFunction;
883+
DeclNameLoc targetFunctionLoc;
884884
SmallVector<Identifier, 4> spiGroups;
885885
SmallVector<AvailableAttr *, 4> availableAttrs;
886886
if (!parseSpecializeAttributeArguments(
887887
ClosingBrace, DiscardAttribute, exported, kind, trailingWhereClause,
888-
targetFunction, SILAvailability, spiGroups, availableAttrs,
889-
parseSILTargetName, parseSILSIPModule)) {
888+
targetFunction, targetFunctionLoc, SILAvailability, spiGroups,
889+
availableAttrs, parseSILTargetName, parseSILSIPModule)) {
890890
return false;
891891
}
892892

@@ -916,8 +916,8 @@ bool Parser::parseSpecializeAttribute(
916916
// Store the attribute.
917917
Attr = SpecializeAttr::create(Context, AtLoc, SourceRange(Loc, rParenLoc),
918918
trailingWhereClause, exported.value(),
919-
kind.value(), targetFunction, spiGroups,
920-
availableAttrs);
919+
kind.value(), targetFunction, targetFunctionLoc,
920+
spiGroups, availableAttrs);
921921
return true;
922922
}
923923

@@ -3515,6 +3515,7 @@ ParserStatus Parser::parseNewDeclAttribute(DeclAttributes &Attributes,
35153515

35163516
SourceLoc LParenLoc = consumeAttributeLParen();
35173517
DeclNameRef replacedFunction;
3518+
DeclNameLoc replacedFunctionLoc;
35183519
{
35193520
// Parse 'for'.
35203521
if (Tok.getText() != "for") {
@@ -3529,15 +3530,12 @@ ParserStatus Parser::parseNewDeclAttribute(DeclAttributes &Attributes,
35293530
return makeParserSuccess();
35303531
}
35313532
consumeToken(tok::colon);
3532-
{
3533-
DeclNameLoc loc;
3534-
replacedFunction = parseDeclNameRef(
3535-
loc, diag::attr_dynamic_replacement_expected_function,
3536-
DeclNameFlag::AllowZeroArgCompoundNames |
3537-
DeclNameFlag::AllowKeywordsUsingSpecialNames |
3538-
DeclNameFlag::AllowOperators |
3539-
DeclNameFlag::AllowLowercaseAndUppercaseSelf);
3540-
}
3533+
replacedFunction = parseDeclNameRef(
3534+
replacedFunctionLoc, diag::attr_dynamic_replacement_expected_function,
3535+
DeclNameFlag::AllowZeroArgCompoundNames |
3536+
DeclNameFlag::AllowKeywordsUsingSpecialNames |
3537+
DeclNameFlag::AllowOperators |
3538+
DeclNameFlag::AllowLowercaseAndUppercaseSelf);
35413539
}
35423540

35433541
// Parse the matching ')'.
@@ -3551,7 +3549,8 @@ ParserStatus Parser::parseNewDeclAttribute(DeclAttributes &Attributes,
35513549

35523550

35533551
DynamicReplacementAttr *attr = DynamicReplacementAttr::create(
3554-
Context, AtLoc, Loc, LParenLoc, replacedFunction, RParenLoc);
3552+
Context, AtLoc, Loc, LParenLoc, replacedFunction, replacedFunctionLoc,
3553+
RParenLoc);
35553554
Attributes.add(attr);
35563555
break;
35573556
}

0 commit comments

Comments
 (0)