Skip to content

Commit c8b70b1

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 97fa89f commit c8b70b1

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

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

564+
void Parser::parseSection(ASTNode *Parent, ASTNode::Type Ty, const Accessor &A,
565+
llvm::StringMap<AstPtr> &Partials,
566+
llvm::StringMap<Lambda> &Lambdas,
567+
llvm::StringMap<SectionLambda> &SectionLambdas,
568+
EscapeMap &Escapes) {
569+
AstPtr CurrentNode =
570+
createNode(Ty, A, Parent, Partials, Lambdas, SectionLambdas, Escapes);
571+
size_t Start = CurrentPtr;
572+
parseMustache(CurrentNode.get(), Partials, Lambdas, SectionLambdas, Escapes);
573+
const size_t End = CurrentPtr - 1;
574+
std::string RawBody;
575+
for (std::size_t I = Start; I < End; I++)
576+
RawBody += Tokens[I].RawBody;
577+
CurrentNode->setRawBody(std::move(RawBody));
578+
Parent->addChild(std::move(CurrentNode));
579+
}
580+
558581
AstPtr Parser::parse(llvm::StringMap<AstPtr> &Partials,
559582
llvm::StringMap<Lambda> &Lambdas,
560583
llvm::StringMap<SectionLambda> &SectionLambdas,
@@ -604,31 +627,13 @@ void Parser::parseMustache(ASTNode *Parent, llvm::StringMap<AstPtr> &Partials,
604627
break;
605628
}
606629
case Token::Type::SectionOpen: {
607-
CurrentNode = createNode(ASTNode::Section, A, Parent, Partials, Lambdas,
608-
SectionLambdas, Escapes);
609-
size_t Start = CurrentPtr;
610-
parseMustache(CurrentNode.get(), Partials, Lambdas, SectionLambdas,
611-
Escapes);
612-
const size_t End = CurrentPtr - 1;
613-
std::string RawBody;
614-
for (std::size_t I = Start; I < End; I++)
615-
RawBody += Tokens[I].RawBody;
616-
CurrentNode->setRawBody(std::move(RawBody));
617-
Parent->addChild(std::move(CurrentNode));
630+
parseSection(Parent, ASTNode::Section, A, Partials, Lambdas,
631+
SectionLambdas, Escapes);
618632
break;
619633
}
620634
case Token::Type::InvertSectionOpen: {
621-
CurrentNode = createNode(ASTNode::InvertSection, A, Parent, Partials,
622-
Lambdas, SectionLambdas, Escapes);
623-
size_t Start = CurrentPtr;
624-
parseMustache(CurrentNode.get(), Partials, Lambdas, SectionLambdas,
625-
Escapes);
626-
const size_t End = CurrentPtr - 1;
627-
std::string RawBody;
628-
for (size_t Idx = Start; Idx < End; Idx++)
629-
RawBody += Tokens[Idx].RawBody;
630-
CurrentNode->setRawBody(std::move(RawBody));
631-
Parent->addChild(std::move(CurrentNode));
635+
parseSection(Parent, ASTNode::InvertSection, A, Partials, Lambdas,
636+
SectionLambdas, Escapes);
632637
break;
633638
}
634639
case Token::Type::Comment:

0 commit comments

Comments
 (0)