diff --git a/llvm/lib/Support/Mustache.cpp b/llvm/lib/Support/Mustache.cpp index 2560619538f9a..da6b6cdcdc023 100644 --- a/llvm/lib/Support/Mustache.cpp +++ b/llvm/lib/Support/Mustache.cpp @@ -110,6 +110,8 @@ class Token { size_t Indentation; }; +using EscapeMap = DenseMap; + class ASTNode { public: enum Type { @@ -123,16 +125,14 @@ class ASTNode { }; ASTNode(llvm::StringMap &Partials, llvm::StringMap &Lambdas, - llvm::StringMap &SectionLambdas, - llvm::DenseMap &Escapes) + llvm::StringMap &SectionLambdas, EscapeMap &Escapes) : Partials(Partials), Lambdas(Lambdas), SectionLambdas(SectionLambdas), Escapes(Escapes), Ty(Type::Root), Parent(nullptr), ParentContext(nullptr) {} ASTNode(std::string Body, ASTNode *Parent, llvm::StringMap &Partials, llvm::StringMap &Lambdas, - llvm::StringMap &SectionLambdas, - llvm::DenseMap &Escapes) + llvm::StringMap &SectionLambdas, EscapeMap &Escapes) : Partials(Partials), Lambdas(Lambdas), SectionLambdas(SectionLambdas), Escapes(Escapes), Ty(Type::Text), Body(std::move(Body)), Parent(Parent), ParentContext(nullptr) {} @@ -140,8 +140,7 @@ class ASTNode { // Constructor for Section/InvertSection/Variable/UnescapeVariable Nodes ASTNode(Type Ty, Accessor Accessor, ASTNode *Parent, llvm::StringMap &Partials, llvm::StringMap &Lambdas, - llvm::StringMap &SectionLambdas, - llvm::DenseMap &Escapes) + llvm::StringMap &SectionLambdas, EscapeMap &Escapes) : Partials(Partials), Lambdas(Lambdas), SectionLambdas(SectionLambdas), Escapes(Escapes), Ty(Ty), Parent(Parent), AccessorValue(std::move(Accessor)), ParentContext(nullptr) {} @@ -171,7 +170,7 @@ class ASTNode { StringMap &Partials; StringMap &Lambdas; StringMap &SectionLambdas; - DenseMap &Escapes; + EscapeMap &Escapes; Type Ty; size_t Indentation = 0; std::string RawBody; @@ -187,7 +186,7 @@ class ASTNode { AstPtr createRootNode(llvm::StringMap &Partials, llvm::StringMap &Lambdas, llvm::StringMap &SectionLambdas, - llvm::DenseMap &Escapes) { + EscapeMap &Escapes) { return std::make_unique(Partials, Lambdas, SectionLambdas, Escapes); } @@ -195,7 +194,7 @@ AstPtr createNode(ASTNode::Type T, Accessor A, ASTNode *Parent, llvm::StringMap &Partials, llvm::StringMap &Lambdas, llvm::StringMap &SectionLambdas, - llvm::DenseMap &Escapes) { + EscapeMap &Escapes) { return std::make_unique(T, std::move(A), Parent, Partials, Lambdas, SectionLambdas, Escapes); } @@ -204,7 +203,7 @@ AstPtr createTextNode(std::string Body, ASTNode *Parent, llvm::StringMap &Partials, llvm::StringMap &Lambdas, llvm::StringMap &SectionLambdas, - llvm::DenseMap &Escapes) { + EscapeMap &Escapes) { return std::make_unique(std::move(Body), Parent, Partials, Lambdas, SectionLambdas, Escapes); } @@ -374,7 +373,7 @@ SmallVector tokenize(StringRef Template) { class EscapeStringStream : public raw_ostream { public: explicit EscapeStringStream(llvm::raw_ostream &WrappedStream, - DenseMap &Escape) + EscapeMap &Escape) : Escape(Escape), WrappedStream(WrappedStream) { SetUnbuffered(); } @@ -394,7 +393,7 @@ class EscapeStringStream : public raw_ostream { uint64_t current_pos() const override { return WrappedStream.tell(); } private: - DenseMap &Escape; + EscapeMap &Escape; llvm::raw_ostream &WrappedStream; }; @@ -433,13 +432,13 @@ class Parser { AstPtr parse(llvm::StringMap &Partials, llvm::StringMap &Lambdas, llvm::StringMap &SectionLambdas, - llvm::DenseMap &Escapes); + EscapeMap &Escapes); private: void parseMustache(ASTNode *Parent, llvm::StringMap &Partials, llvm::StringMap &Lambdas, llvm::StringMap &SectionLambdas, - llvm::DenseMap &Escapes); + EscapeMap &Escapes); SmallVector Tokens; size_t CurrentPtr; @@ -449,7 +448,7 @@ class Parser { AstPtr Parser::parse(llvm::StringMap &Partials, llvm::StringMap &Lambdas, llvm::StringMap &SectionLambdas, - llvm::DenseMap &Escapes) { + EscapeMap &Escapes) { Tokens = tokenize(TemplateStr); CurrentPtr = 0; AstPtr RootNode = createRootNode(Partials, Lambdas, SectionLambdas, Escapes); @@ -460,7 +459,7 @@ AstPtr Parser::parse(llvm::StringMap &Partials, void Parser::parseMustache(ASTNode *Parent, llvm::StringMap &Partials, llvm::StringMap &Lambdas, llvm::StringMap &SectionLambdas, - llvm::DenseMap &Escapes) { + EscapeMap &Escapes) { while (CurrentPtr < Tokens.size()) { Token CurrentToken = Tokens[CurrentPtr]; @@ -726,19 +725,17 @@ void Template::registerLambda(std::string Name, SectionLambda L) { SectionLambdas[Name] = L; } -void Template::overrideEscapeCharacters(DenseMap E) { - Escapes = std::move(E); -} +void Template::overrideEscapeCharacters(EscapeMap E) { Escapes = std::move(E); } Template::Template(StringRef TemplateStr) { Parser P = Parser(TemplateStr); Tree = P.parse(Partials, Lambdas, SectionLambdas, Escapes); // The default behavior is to escape html entities. - DenseMap HtmlEntities = {{'&', "&"}, - {'<', "<"}, - {'>', ">"}, - {'"', """}, - {'\'', "'"}}; + const EscapeMap HtmlEntities = {{'&', "&"}, + {'<', "<"}, + {'>', ">"}, + {'"', """}, + {'\'', "'"}}; overrideEscapeCharacters(HtmlEntities); }