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