Skip to content

[llvm][mustache][NFC] Use type alias for escape symbols #138050

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 21 additions & 24 deletions llvm/lib/Support/Mustache.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,8 @@ class Token {
size_t Indentation;
};

using EscapeMap = DenseMap<char, std::string>;

class ASTNode {
public:
enum Type {
Expand All @@ -123,25 +125,22 @@ class ASTNode {
};

ASTNode(llvm::StringMap<AstPtr> &Partials, llvm::StringMap<Lambda> &Lambdas,
llvm::StringMap<SectionLambda> &SectionLambdas,
llvm::DenseMap<char, std::string> &Escapes)
llvm::StringMap<SectionLambda> &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<AstPtr> &Partials,
llvm::StringMap<Lambda> &Lambdas,
llvm::StringMap<SectionLambda> &SectionLambdas,
llvm::DenseMap<char, std::string> &Escapes)
llvm::StringMap<SectionLambda> &SectionLambdas, EscapeMap &Escapes)
: Partials(Partials), Lambdas(Lambdas), SectionLambdas(SectionLambdas),
Escapes(Escapes), Ty(Type::Text), Body(std::move(Body)), Parent(Parent),
ParentContext(nullptr) {}

// Constructor for Section/InvertSection/Variable/UnescapeVariable Nodes
ASTNode(Type Ty, Accessor Accessor, ASTNode *Parent,
llvm::StringMap<AstPtr> &Partials, llvm::StringMap<Lambda> &Lambdas,
llvm::StringMap<SectionLambda> &SectionLambdas,
llvm::DenseMap<char, std::string> &Escapes)
llvm::StringMap<SectionLambda> &SectionLambdas, EscapeMap &Escapes)
: Partials(Partials), Lambdas(Lambdas), SectionLambdas(SectionLambdas),
Escapes(Escapes), Ty(Ty), Parent(Parent),
AccessorValue(std::move(Accessor)), ParentContext(nullptr) {}
Expand Down Expand Up @@ -171,7 +170,7 @@ class ASTNode {
StringMap<AstPtr> &Partials;
StringMap<Lambda> &Lambdas;
StringMap<SectionLambda> &SectionLambdas;
DenseMap<char, std::string> &Escapes;
EscapeMap &Escapes;
Type Ty;
size_t Indentation = 0;
std::string RawBody;
Expand All @@ -187,15 +186,15 @@ class ASTNode {
AstPtr createRootNode(llvm::StringMap<AstPtr> &Partials,
llvm::StringMap<Lambda> &Lambdas,
llvm::StringMap<SectionLambda> &SectionLambdas,
llvm::DenseMap<char, std::string> &Escapes) {
EscapeMap &Escapes) {
return std::make_unique<ASTNode>(Partials, Lambdas, SectionLambdas, Escapes);
}

AstPtr createNode(ASTNode::Type T, Accessor A, ASTNode *Parent,
llvm::StringMap<AstPtr> &Partials,
llvm::StringMap<Lambda> &Lambdas,
llvm::StringMap<SectionLambda> &SectionLambdas,
llvm::DenseMap<char, std::string> &Escapes) {
EscapeMap &Escapes) {
return std::make_unique<ASTNode>(T, std::move(A), Parent, Partials, Lambdas,
SectionLambdas, Escapes);
}
Expand All @@ -204,7 +203,7 @@ AstPtr createTextNode(std::string Body, ASTNode *Parent,
llvm::StringMap<AstPtr> &Partials,
llvm::StringMap<Lambda> &Lambdas,
llvm::StringMap<SectionLambda> &SectionLambdas,
llvm::DenseMap<char, std::string> &Escapes) {
EscapeMap &Escapes) {
return std::make_unique<ASTNode>(std::move(Body), Parent, Partials, Lambdas,
SectionLambdas, Escapes);
}
Expand Down Expand Up @@ -374,7 +373,7 @@ SmallVector<Token> tokenize(StringRef Template) {
class EscapeStringStream : public raw_ostream {
public:
explicit EscapeStringStream(llvm::raw_ostream &WrappedStream,
DenseMap<char, std::string> &Escape)
EscapeMap &Escape)
: Escape(Escape), WrappedStream(WrappedStream) {
SetUnbuffered();
}
Expand All @@ -394,7 +393,7 @@ class EscapeStringStream : public raw_ostream {
uint64_t current_pos() const override { return WrappedStream.tell(); }

private:
DenseMap<char, std::string> &Escape;
EscapeMap &Escape;
llvm::raw_ostream &WrappedStream;
};

Expand Down Expand Up @@ -433,13 +432,13 @@ class Parser {
AstPtr parse(llvm::StringMap<AstPtr> &Partials,
llvm::StringMap<Lambda> &Lambdas,
llvm::StringMap<SectionLambda> &SectionLambdas,
llvm::DenseMap<char, std::string> &Escapes);
EscapeMap &Escapes);

private:
void parseMustache(ASTNode *Parent, llvm::StringMap<AstPtr> &Partials,
llvm::StringMap<Lambda> &Lambdas,
llvm::StringMap<SectionLambda> &SectionLambdas,
llvm::DenseMap<char, std::string> &Escapes);
EscapeMap &Escapes);

SmallVector<Token> Tokens;
size_t CurrentPtr;
Expand All @@ -449,7 +448,7 @@ class Parser {
AstPtr Parser::parse(llvm::StringMap<AstPtr> &Partials,
llvm::StringMap<Lambda> &Lambdas,
llvm::StringMap<SectionLambda> &SectionLambdas,
llvm::DenseMap<char, std::string> &Escapes) {
EscapeMap &Escapes) {
Tokens = tokenize(TemplateStr);
CurrentPtr = 0;
AstPtr RootNode = createRootNode(Partials, Lambdas, SectionLambdas, Escapes);
Expand All @@ -460,7 +459,7 @@ AstPtr Parser::parse(llvm::StringMap<AstPtr> &Partials,
void Parser::parseMustache(ASTNode *Parent, llvm::StringMap<AstPtr> &Partials,
llvm::StringMap<Lambda> &Lambdas,
llvm::StringMap<SectionLambda> &SectionLambdas,
llvm::DenseMap<char, std::string> &Escapes) {
EscapeMap &Escapes) {

while (CurrentPtr < Tokens.size()) {
Token CurrentToken = Tokens[CurrentPtr];
Expand Down Expand Up @@ -726,19 +725,17 @@ void Template::registerLambda(std::string Name, SectionLambda L) {
SectionLambdas[Name] = L;
}

void Template::overrideEscapeCharacters(DenseMap<char, std::string> 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<char, std::string> HtmlEntities = {{'&', "&amp;"},
{'<', "&lt;"},
{'>', "&gt;"},
{'"', "&quot;"},
{'\'', "&#39;"}};
const EscapeMap HtmlEntities = {{'&', "&amp;"},
{'<', "&lt;"},
{'>', "&gt;"},
{'"', "&quot;"},
{'\'', "&#39;"}};
overrideEscapeCharacters(HtmlEntities);
}

Expand Down