mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
[libSyntax] Store Range of ParsedRawSyntaxNode in dedicated field
Essentially all ParsedRawSyntaxNode types have a range associated with them, so let's just store it in a dedicated field with a common getter. Additionally, this cleans up the recorded storage to just contain an OpaqueSyntaxNode. When deferred nodes are being handled by SyntaxParseActions, we can use this OpaqueNode storage to store either recorded or deferred node data, which is left to be interpreted by the SyntaxParseAction.
This commit is contained in:
@@ -85,11 +85,11 @@ ParsedRawSyntaxRecorder::recordRawSyntax(SyntaxKind kind,
|
||||
if (subnode.isNull()) {
|
||||
subnodes.push_back(nullptr);
|
||||
} else if (subnode.isRecorded()) {
|
||||
localRange = subnode.getRecordedRange();
|
||||
localRange = subnode.getRange();
|
||||
subnodes.push_back(subnode.takeOpaqueNode());
|
||||
} else {
|
||||
auto recorded = getRecordedNode(subnode.copyDeferred(), *this);
|
||||
localRange = recorded.getRecordedRange();
|
||||
localRange = recorded.getRange();
|
||||
subnodes.push_back(recorded.takeOpaqueNode());
|
||||
}
|
||||
|
||||
@@ -131,7 +131,7 @@ ParsedRawSyntaxNode ParsedRawSyntaxRecorder::makeDeferred(
|
||||
for (auto &node : deferredNodes) {
|
||||
// Cached range.
|
||||
if (!node.isNull() && !node.isMissing()) {
|
||||
auto nodeRange = node.getDeferredRange();
|
||||
auto nodeRange = node.getRange();
|
||||
if (nodeRange.isValid()) {
|
||||
if (range.isInvalid())
|
||||
range = nodeRange;
|
||||
@@ -185,9 +185,7 @@ void ParsedRawSyntaxRecorder::verifyElementRanges(ArrayRef<ParsedRawSyntaxNode>
|
||||
for (const auto &elem: elements) {
|
||||
if (elem.isMissing() || elem.isNull())
|
||||
continue;
|
||||
CharSourceRange range = elem.isRecorded()
|
||||
? elem.getRecordedRange()
|
||||
: elem.getDeferredRange();
|
||||
CharSourceRange range = elem.getRange();
|
||||
if (range.isValid()) {
|
||||
assert((prevEndLoc.isInvalid() || range.getStart() == prevEndLoc)
|
||||
&& "Non-contiguous child ranges?");
|
||||
|
||||
Reference in New Issue
Block a user