mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
[libSyntax] Create deferred nodes in the ParsedRawSyntaxRecorder
This is a multi-commit effort to push the responsibility of deferred node handling to the SyntaxParseActions which have more detailed knowledge of their requirements on deferred nodes and might perform additional optimisations. For example, the SyntaxTreeCreator can always create RawSyntax nodes (even for deferred nodes) and decide to simply not use them, should the deferred nodes not get recorded.
This commit is contained in:
@@ -67,8 +67,8 @@ Parsed${node.name}Builder::record() {
|
||||
Parsed${node.name}
|
||||
Parsed${node.name}Builder::makeDeferred() {
|
||||
finishLayout(/*deferred=*/true);
|
||||
auto raw = ParsedRawSyntaxNode::makeDeferred(SyntaxKind::${node.syntax_kind},
|
||||
Layout, SPCtx);
|
||||
auto raw = SPCtx.getRecorder().makeDeferred(SyntaxKind::${node.syntax_kind},
|
||||
Layout, SPCtx);
|
||||
return Parsed${node.name}(std::move(raw));
|
||||
}
|
||||
|
||||
@@ -91,7 +91,7 @@ void Parsed${node.name}Builder::finishLayout(bool deferred) {
|
||||
% if child_elt:
|
||||
if (!${child_elt_name}s.empty()) {
|
||||
if (deferred) {
|
||||
Layout[${idx}] = ParsedRawSyntaxNode::makeDeferred(SyntaxKind::${child_node.syntax_kind},
|
||||
Layout[${idx}] = Rec.makeDeferred(SyntaxKind::${child_node.syntax_kind},
|
||||
${child_elt_name}s, SPCtx);
|
||||
} else {
|
||||
Layout[${idx}] = Rec.recordRawSyntax(SyntaxKind::${child_node.syntax_kind}, ${child_elt_name}s);
|
||||
@@ -104,13 +104,13 @@ void Parsed${node.name}Builder::finishLayout(bool deferred) {
|
||||
% token = child.main_token()
|
||||
% tok_kind = token.kind if token else "unknown"
|
||||
if (deferred) {
|
||||
Layout[${idx}] = ParsedRawSyntaxNode::makeDeferredMissing(tok::${tok_kind}, SourceLoc());
|
||||
Layout[${idx}] = Rec.makeDeferredMissing(tok::${tok_kind}, SourceLoc());
|
||||
} else {
|
||||
Layout[${idx}] = Rec.recordMissingToken(tok::${tok_kind}, SourceLoc());
|
||||
}
|
||||
% elif child_elt:
|
||||
if (deferred) {
|
||||
Layout[${idx}] = ParsedRawSyntaxNode::makeDeferred(SyntaxKind::${child_node.syntax_kind}, {}, SPCtx);
|
||||
Layout[${idx}] = Rec.makeDeferred(SyntaxKind::${child_node.syntax_kind}, {}, SPCtx);
|
||||
} else {
|
||||
Layout[${idx}] = Rec.recordRawSyntax(SyntaxKind::${child_node.syntax_kind}, {});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user