@@ -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+
557580AstPtr 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