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