mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
[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:
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user