[Parse] Optimize syntax parsing: Make ParsedRawSyntaxNode a POD type

This eliminates the overhead of ParsedRawSyntaxNode needing to do memory management.
If ParsedRawSyntaxNode needs to point to some data the memory is allocated from a bump allocator.

There are also some improvements on how the ParsedSyntaxBuilders work.
This commit is contained in:
Argyrios Kyrtzidis
2018-12-31 20:20:45 -08:00
parent c7ac859310
commit 57c1f72cc3
17 changed files with 242 additions and 194 deletions

View File

@@ -88,7 +88,7 @@ private:
}
static void makeCTrivia(SmallVectorImpl<CTriviaPiece> &c_trivia,
const ParsedTrivia &trivia) {
ArrayRef<ParsedTriviaPiece> trivia) {
for (const auto &piece : trivia) {
CTriviaPiece c_piece;
auto numValue =
@@ -131,15 +131,15 @@ private:
node.present = true;
}
OpaqueSyntaxNode recordToken(const Token &tok,
const ParsedTrivia &leadingTrivia,
const ParsedTrivia &trailingTrivia,
OpaqueSyntaxNode recordToken(tok tokenKind,
ArrayRef<ParsedTriviaPiece> leadingTrivia,
ArrayRef<ParsedTriviaPiece> trailingTrivia,
CharSourceRange range) override {
SmallVector<CTriviaPiece, 8> c_leadingTrivia, c_trailingTrivia;
makeCTrivia(c_leadingTrivia, leadingTrivia);
makeCTrivia(c_trailingTrivia, trailingTrivia);
CRawSyntaxNode node;
makeCRawToken(node, tok.getKind(), c_leadingTrivia, c_trailingTrivia,
makeCRawToken(node, tokenKind, c_leadingTrivia, c_trailingTrivia,
range);
return getNodeHandler()(&node);
}