Skip to content

Commit 6ffacae

Browse files
authored
[llvm][mustache] Refactor tokenizer for clarity (#159188)
This patch refactors the Mustache tokenizer by breaking the logic up with helper functions to improve clarity and simplify the code.
1 parent 39f292f commit 6ffacae

File tree

1 file changed

+27
-22
lines changed

1 file changed

+27
-22
lines changed

llvm/lib/Support/Mustache.cpp

Lines changed: 27 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -560,11 +560,34 @@ class Parser {
560560
llvm::StringMap<SectionLambda> &SectionLambdas,
561561
EscapeMap &Escapes);
562562

563+
void parseSection(ASTNode *Parent, ASTNode::Type Ty, const Accessor &A,
564+
llvm::StringMap<AstPtr> &Partials,
565+
llvm::StringMap<Lambda> &Lambdas,
566+
llvm::StringMap<SectionLambda> &SectionLambdas,
567+
EscapeMap &Escapes);
568+
563569
SmallVector<Token> Tokens;
564570
size_t CurrentPtr;
565571
StringRef TemplateStr;
566572
};
567573

574+
void Parser::parseSection(ASTNode *Parent, ASTNode::Type Ty, const Accessor &A,
575+
llvm::StringMap<AstPtr> &Partials,
576+
llvm::StringMap<Lambda> &Lambdas,
577+
llvm::StringMap<SectionLambda> &SectionLambdas,
578+
EscapeMap &Escapes) {
579+
AstPtr CurrentNode =
580+
createNode(Ty, A, Parent, Partials, Lambdas, SectionLambdas, Escapes);
581+
size_t Start = CurrentPtr;
582+
parseMustache(CurrentNode.get(), Partials, Lambdas, SectionLambdas, Escapes);
583+
const size_t End = CurrentPtr - 1;
584+
std::string RawBody;
585+
for (std::size_t I = Start; I < End; I++)
586+
RawBody += Tokens[I].RawBody;
587+
CurrentNode->setRawBody(std::move(RawBody));
588+
Parent->addChild(std::move(CurrentNode));
589+
}
590+
568591
AstPtr Parser::parse(llvm::StringMap<AstPtr> &Partials,
569592
llvm::StringMap<Lambda> &Lambdas,
570593
llvm::StringMap<SectionLambda> &SectionLambdas,
@@ -614,31 +637,13 @@ void Parser::parseMustache(ASTNode *Parent, llvm::StringMap<AstPtr> &Partials,
614637
break;
615638
}
616639
case Token::Type::SectionOpen: {
617-
CurrentNode = createNode(ASTNode::Section, A, Parent, Partials, Lambdas,
618-
SectionLambdas, Escapes);
619-
size_t Start = CurrentPtr;
620-
parseMustache(CurrentNode.get(), Partials, Lambdas, SectionLambdas,
621-
Escapes);
622-
const size_t End = CurrentPtr - 1;
623-
std::string RawBody;
624-
for (std::size_t I = Start; I < End; I++)
625-
RawBody += Tokens[I].RawBody;
626-
CurrentNode->setRawBody(std::move(RawBody));
627-
Parent->addChild(std::move(CurrentNode));
640+
parseSection(Parent, ASTNode::Section, A, Partials, Lambdas,
641+
SectionLambdas, Escapes);
628642
break;
629643
}
630644
case Token::Type::InvertSectionOpen: {
631-
CurrentNode = createNode(ASTNode::InvertSection, A, Parent, Partials,
632-
Lambdas, SectionLambdas, Escapes);
633-
size_t Start = CurrentPtr;
634-
parseMustache(CurrentNode.get(), Partials, Lambdas, SectionLambdas,
635-
Escapes);
636-
const size_t End = CurrentPtr - 1;
637-
std::string RawBody;
638-
for (size_t Idx = Start; Idx < End; Idx++)
639-
RawBody += Tokens[Idx].RawBody;
640-
CurrentNode->setRawBody(std::move(RawBody));
641-
Parent->addChild(std::move(CurrentNode));
645+
parseSection(Parent, ASTNode::InvertSection, A, Partials, Lambdas,
646+
SectionLambdas, Escapes);
642647
break;
643648
}
644649
case Token::Type::Comment:

0 commit comments

Comments
 (0)