@@ -30,11 +30,11 @@ static Syntax makeUnknownSyntax(SyntaxKind Kind, ArrayRef<Syntax> SubExpr) {
30
30
return make<Syntax>(RawSyntax::make (Kind, Layout, SourcePresence::Present));
31
31
}
32
32
33
- static std::vector <Syntax> getSyntaxNodes (ArrayRef<RawSyntaxInfo> RawNodes) {
34
- std::vector<Syntax> SyntaxParts;
35
- std::transform (RawNodes.begin (), RawNodes.end (), std::back_inserter (SyntaxParts ),
33
+ static ArrayRef <Syntax> getSyntaxNodes (ArrayRef<RawSyntaxInfo> RawNodes,
34
+ std::vector<Syntax> &Scratch) {
35
+ std::transform (RawNodes.begin (), RawNodes.end (), std::back_inserter (Scratch ),
36
36
[](const RawSyntaxInfo &Info) { return Info.makeSyntax <Syntax>(); });
37
- return SyntaxParts ;
37
+ return Scratch ;
38
38
}
39
39
40
40
static unsigned countTokens (ArrayRef<RawSyntaxInfo> AllNodes) {
@@ -157,11 +157,12 @@ SyntaxParsingContext::ContextInfo::collectAllSyntax() {
157
157
void
158
158
SyntaxParsingContext::ContextInfo::createFromBack (SyntaxKind Kind, unsigned N) {
159
159
auto Size = PendingSyntax.size ();
160
- assert (Size >= N);
161
160
if (!N)
162
161
N = Size;
162
+ assert (Size >= N);
163
163
auto Parts = llvm::makeArrayRef (PendingSyntax).slice (Size - N);
164
- std::vector<Syntax> SyntaxParts = getSyntaxNodes (Parts);
164
+ std::vector<Syntax> Scratch;
165
+ auto SyntaxParts = getSyntaxNodes (Parts, Scratch);
165
166
166
167
// Try to create the node of the given syntax.
167
168
Optional<Syntax> Result = SyntaxFactory::createSyntax (Kind, SyntaxParts);
@@ -299,7 +300,8 @@ SyntaxParsingContextChild::~SyntaxParsingContextChild() {
299
300
return ;
300
301
}
301
302
302
- std::vector<Syntax> SyntaxNodes = getSyntaxNodes (AllNodes);
303
+ std::vector<Syntax> Scratch;
304
+ auto SyntaxNodes = getSyntaxNodes (AllNodes, Scratch);
303
305
SourceLoc Start = AllNodes.front ().StartLoc ;
304
306
unsigned TokCount = countTokens (AllNodes);
305
307
SyntaxKind UnknownKind;
0 commit comments