Revert "Revert "[Parser] Decouple the parser from AST creation (part 2)""

This reverts commit 8ad3cc8a82.
This commit is contained in:
Rintaro Ishizaki
2019-08-27 14:36:41 -07:00
parent 8da33a9010
commit cb308b7e53
29 changed files with 1966 additions and 774 deletions

View File

@@ -55,14 +55,14 @@ size_t SyntaxParsingContext::lookupNode(size_t LexerOffset, SourceLoc Loc) {
}
Mode = AccumulationMode::SkippedForIncrementalUpdate;
getStorage().push_back(foundNode);
return foundNode.getRange().getByteLength();
return foundNode.getRecordedRange().getByteLength();
}
ParsedRawSyntaxNode
SyntaxParsingContext::makeUnknownSyntax(SyntaxKind Kind,
ArrayRef<ParsedRawSyntaxNode> Parts) {
assert(isUnknownKind(Kind));
if (IsBacktracking)
if (shouldDefer())
return ParsedRawSyntaxNode::makeDeferred(Kind, Parts, *this);
else
return getRecorder().recordRawSyntax(Kind, Parts);
@@ -76,7 +76,7 @@ SyntaxParsingContext::createSyntaxAs(SyntaxKind Kind,
ParsedRawSyntaxNode rawNode;
auto &rec = getRecorder();
auto formNode = [&](SyntaxKind kind, ArrayRef<ParsedRawSyntaxNode> layout) {
if (nodeCreateK == SyntaxNodeCreationKind::Deferred || IsBacktracking) {
if (nodeCreateK == SyntaxNodeCreationKind::Deferred || shouldDefer()) {
rawNode = ParsedRawSyntaxNode::makeDeferred(kind, layout, *this);
} else {
rawNode = rec.recordRawSyntax(kind, layout);
@@ -171,7 +171,7 @@ void SyntaxParsingContext::addToken(Token &Tok,
const ParsedTrivia &LeadingTrivia,
const ParsedTrivia &TrailingTrivia) {
ParsedRawSyntaxNode raw;
if (IsBacktracking)
if (shouldDefer())
raw = ParsedRawSyntaxNode::makeDeferred(Tok, LeadingTrivia, TrailingTrivia,
*this);
else
@@ -294,7 +294,7 @@ ParsedRawSyntaxNode SyntaxParsingContext::finalizeSourceFile() {
void SyntaxParsingContext::synthesize(tok Kind, SourceLoc Loc) {
ParsedRawSyntaxNode raw;
if (IsBacktracking)
if (shouldDefer())
raw = ParsedRawSyntaxNode::makeDeferredMissing(Kind, Loc);
else
raw = getRecorder().recordMissingToken(Kind, Loc);