Skip to content

Commit 8be25f4

Browse files
committed
[llvm][mustache] Refactor tokenizer for clarity
This patch refactors the Mustache tokenizer by breaking the logic up with helper functions to improve clarity and simplify the code.
1 parent 794217c commit 8be25f4

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
@@ -549,11 +549,34 @@ class Parser {
549549
llvm::StringMap<SectionLambda> &SectionLambdas,
550550
EscapeMap &Escapes);
551551

552+
void parseSection(ASTNode *Parent, ASTNode::Type Ty, const Accessor &A,
553+
llvm::StringMap<AstPtr> &Partials,
554+
llvm::StringMap<Lambda> &Lambdas,
555+
llvm::StringMap<SectionLambda> &SectionLambdas,
556+
EscapeMap &Escapes);
557+
552558
SmallVector<Token> Tokens;
553559
size_t CurrentPtr;
554560
StringRef TemplateStr;
555561
};
556562

563+
void Parser::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+
AstPtr CurrentNode =
569+
createNode(Ty, A, Parent, Partials, Lambdas, SectionLambdas, Escapes);
570+
size_t Start = CurrentPtr;
571+
parseMustache(CurrentNode.get(), Partials, Lambdas, SectionLambdas, Escapes);
572+
const size_t End = CurrentPtr - 1;
573+
std::string RawBody;
574+
for (std::size_t I = Start; I < End; I++)
575+
RawBody += Tokens[I].RawBody;
576+
CurrentNode->setRawBody(std::move(RawBody));
577+
Parent->addChild(std::move(CurrentNode));
578+
}
579+
557580
AstPtr Parser::parse(llvm::StringMap<AstPtr> &Partials,
558581
llvm::StringMap<Lambda> &Lambdas,
559582
llvm::StringMap<SectionLambda> &SectionLambdas,
@@ -603,31 +626,13 @@ void Parser::parseMustache(ASTNode *Parent, llvm::StringMap<AstPtr> &Partials,
603626
break;
604627
}
605628
case Token::Type::SectionOpen: {
606-
CurrentNode = createNode(ASTNode::Section, A, Parent, Partials, Lambdas,
607-
SectionLambdas, Escapes);
608-
size_t Start = CurrentPtr;
609-
parseMustache(CurrentNode.get(), Partials, Lambdas, SectionLambdas,
610-
Escapes);
611-
const size_t End = CurrentPtr - 1;
612-
std::string RawBody;
613-
for (std::size_t I = Start; I < End; I++)
614-
RawBody += Tokens[I].RawBody;
615-
CurrentNode->setRawBody(std::move(RawBody));
616-
Parent->addChild(std::move(CurrentNode));
629+
parseSection(Parent, ASTNode::Section, A, Partials, Lambdas,
630+
SectionLambdas, Escapes);
617631
break;
618632
}
619633
case Token::Type::InvertSectionOpen: {
620-
CurrentNode = createNode(ASTNode::InvertSection, A, Parent, Partials,
621-
Lambdas, SectionLambdas, Escapes);
622-
size_t Start = CurrentPtr;
623-
parseMustache(CurrentNode.get(), Partials, Lambdas, SectionLambdas,
624-
Escapes);
625-
const size_t End = CurrentPtr - 1;
626-
std::string RawBody;
627-
for (size_t Idx = Start; Idx < End; Idx++)
628-
RawBody += Tokens[Idx].RawBody;
629-
CurrentNode->setRawBody(std::move(RawBody));
630-
Parent->addChild(std::move(CurrentNode));
634+
parseSection(Parent, ASTNode::InvertSection, A, Partials, Lambdas,
635+
SectionLambdas, Escapes);
631636
break;
632637
}
633638
case Token::Type::Comment:

0 commit comments

Comments
 (0)