[libSyntax] Eliminate loop and memory allocation translating ParsedRawSyntaxNode to RecordedOrDeferredNode

This commit is contained in:
Alex Hoppen
2021-03-11 21:32:10 +01:00
parent a7703566e9
commit b20683252b
6 changed files with 42 additions and 40 deletions

View File

@@ -245,12 +245,21 @@ private:
OpaqueSyntaxNode makeDeferredLayout(
syntax::SyntaxKind k, bool isMissing,
const ArrayRef<RecordedOrDeferredNode> &children) override {
const MutableArrayRef<ParsedRawSyntaxNode> &parsedChildren) override {
assert(!isMissing && "Missing layout nodes not implemented yet");
auto childrenMem = DeferredNodeAllocator.Allocate<RecordedOrDeferredNode>(
parsedChildren.size());
auto children =
llvm::makeMutableArrayRef(childrenMem, parsedChildren.size());
// Compute the length of this node.
unsigned length = 0;
for (auto &child : children) {
size_t index = 0;
for (auto &parsedChild : parsedChildren) {
auto child = parsedChild.takeRecordedOrDeferredNode();
children[index++] = child;
switch (child.getKind()) {
case RecordedOrDeferredNode::Kind::Null:
break;