mirror of
https://github.com/pantor/inja.git
synced 2026-02-17 09:03:58 +00:00
fix some clang-tidy warnings
This commit is contained in:
@@ -164,7 +164,7 @@ public:
|
||||
}
|
||||
|
||||
std::string load_file(const std::string& filename) {
|
||||
Parser parser(parser_config, lexer_config, template_storage, function_storage);
|
||||
const Parser parser(parser_config, lexer_config, template_storage, function_storage);
|
||||
return Parser::load_file(input_path / filename);
|
||||
}
|
||||
|
||||
|
||||
@@ -63,7 +63,7 @@ public:
|
||||
|
||||
size_t pos;
|
||||
|
||||
AstNode(size_t pos): pos(pos) {}
|
||||
explicit AstNode(size_t pos): pos(pos) {}
|
||||
virtual ~AstNode() {}
|
||||
};
|
||||
|
||||
@@ -73,7 +73,7 @@ public:
|
||||
|
||||
explicit BlockNode(): AstNode(0) {}
|
||||
|
||||
void accept(NodeVisitor& v) const {
|
||||
void accept(NodeVisitor& v) const override {
|
||||
v.visit(*this);
|
||||
}
|
||||
};
|
||||
@@ -84,7 +84,7 @@ public:
|
||||
|
||||
explicit TextNode(size_t pos, size_t length): AstNode(pos), length(length) {}
|
||||
|
||||
void accept(NodeVisitor& v) const {
|
||||
void accept(NodeVisitor& v) const override {
|
||||
v.visit(*this);
|
||||
}
|
||||
};
|
||||
@@ -93,7 +93,7 @@ class ExpressionNode : public AstNode {
|
||||
public:
|
||||
explicit ExpressionNode(size_t pos): AstNode(pos) {}
|
||||
|
||||
void accept(NodeVisitor& v) const {
|
||||
void accept(NodeVisitor& v) const override {
|
||||
v.visit(*this);
|
||||
}
|
||||
};
|
||||
@@ -104,7 +104,7 @@ public:
|
||||
|
||||
explicit LiteralNode(std::string_view data_text, size_t pos): ExpressionNode(pos), value(json::parse(data_text)) {}
|
||||
|
||||
void accept(NodeVisitor& v) const {
|
||||
void accept(NodeVisitor& v) const override {
|
||||
v.visit(*this);
|
||||
}
|
||||
};
|
||||
@@ -127,7 +127,7 @@ public:
|
||||
|
||||
explicit DataNode(std::string_view ptr_name, size_t pos): ExpressionNode(pos), name(ptr_name), ptr(json::json_pointer(convert_dot_to_ptr(ptr_name))) {}
|
||||
|
||||
void accept(NodeVisitor& v) const {
|
||||
void accept(NodeVisitor& v) const override {
|
||||
v.visit(*this);
|
||||
}
|
||||
};
|
||||
@@ -247,7 +247,7 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
void accept(NodeVisitor& v) const {
|
||||
void accept(NodeVisitor& v) const override {
|
||||
v.visit(*this);
|
||||
}
|
||||
};
|
||||
@@ -259,14 +259,14 @@ public:
|
||||
explicit ExpressionListNode(): AstNode(0) {}
|
||||
explicit ExpressionListNode(size_t pos): AstNode(pos) {}
|
||||
|
||||
void accept(NodeVisitor& v) const {
|
||||
void accept(NodeVisitor& v) const override {
|
||||
v.visit(*this);
|
||||
}
|
||||
};
|
||||
|
||||
class StatementNode : public AstNode {
|
||||
public:
|
||||
StatementNode(size_t pos): AstNode(pos) {}
|
||||
explicit StatementNode(size_t pos): AstNode(pos) {}
|
||||
|
||||
virtual void accept(NodeVisitor& v) const = 0;
|
||||
};
|
||||
@@ -277,7 +277,7 @@ public:
|
||||
BlockNode body;
|
||||
BlockNode* const parent;
|
||||
|
||||
ForStatementNode(BlockNode* const parent, size_t pos): StatementNode(pos), parent(parent) {}
|
||||
explicit ForStatementNode(BlockNode* const parent, size_t pos): StatementNode(pos), parent(parent) {}
|
||||
|
||||
virtual void accept(NodeVisitor& v) const = 0;
|
||||
};
|
||||
@@ -288,7 +288,7 @@ public:
|
||||
|
||||
explicit ForArrayStatementNode(const std::string& value, BlockNode* const parent, size_t pos): ForStatementNode(parent, pos), value(value) {}
|
||||
|
||||
void accept(NodeVisitor& v) const {
|
||||
void accept(NodeVisitor& v) const override {
|
||||
v.visit(*this);
|
||||
}
|
||||
};
|
||||
@@ -301,7 +301,7 @@ public:
|
||||
explicit ForObjectStatementNode(const std::string& key, const std::string& value, BlockNode* const parent, size_t pos)
|
||||
: ForStatementNode(parent, pos), key(key), value(value) {}
|
||||
|
||||
void accept(NodeVisitor& v) const {
|
||||
void accept(NodeVisitor& v) const override {
|
||||
v.visit(*this);
|
||||
}
|
||||
};
|
||||
@@ -319,7 +319,7 @@ public:
|
||||
explicit IfStatementNode(BlockNode* const parent, size_t pos): StatementNode(pos), parent(parent), is_nested(false) {}
|
||||
explicit IfStatementNode(bool is_nested, BlockNode* const parent, size_t pos): StatementNode(pos), parent(parent), is_nested(is_nested) {}
|
||||
|
||||
void accept(NodeVisitor& v) const {
|
||||
void accept(NodeVisitor& v) const override {
|
||||
v.visit(*this);
|
||||
}
|
||||
};
|
||||
@@ -330,7 +330,7 @@ public:
|
||||
|
||||
explicit IncludeStatementNode(const std::string& file, size_t pos): StatementNode(pos), file(file) {}
|
||||
|
||||
void accept(NodeVisitor& v) const {
|
||||
void accept(NodeVisitor& v) const override {
|
||||
v.visit(*this);
|
||||
}
|
||||
};
|
||||
@@ -341,7 +341,7 @@ public:
|
||||
|
||||
explicit ExtendsStatementNode(const std::string& file, size_t pos): StatementNode(pos), file(file) {}
|
||||
|
||||
void accept(NodeVisitor& v) const {
|
||||
void accept(NodeVisitor& v) const override {
|
||||
v.visit(*this);
|
||||
}
|
||||
};
|
||||
@@ -354,7 +354,7 @@ public:
|
||||
|
||||
explicit BlockStatementNode(BlockNode* const parent, const std::string& name, size_t pos): StatementNode(pos), name(name), parent(parent) {}
|
||||
|
||||
void accept(NodeVisitor& v) const {
|
||||
void accept(NodeVisitor& v) const override {
|
||||
v.visit(*this);
|
||||
}
|
||||
};
|
||||
@@ -366,7 +366,7 @@ public:
|
||||
|
||||
explicit SetStatementNode(const std::string& key, size_t pos): StatementNode(pos), key(key) {}
|
||||
|
||||
void accept(NodeVisitor& v) const {
|
||||
void accept(NodeVisitor& v) const override {
|
||||
v.visit(*this);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -48,11 +48,11 @@ class Parser {
|
||||
std::stack<ForStatementNode*> for_statement_stack;
|
||||
std::stack<BlockStatementNode*> block_statement_stack;
|
||||
|
||||
inline void throw_parser_error(const std::string& message) const {
|
||||
void throw_parser_error(const std::string& message) const {
|
||||
INJA_THROW(ParserError(message, lexer.current_position()));
|
||||
}
|
||||
|
||||
inline void get_next_token() {
|
||||
void get_next_token() {
|
||||
if (have_peek_tok) {
|
||||
tok = peek_tok;
|
||||
have_peek_tok = false;
|
||||
@@ -61,19 +61,19 @@ class Parser {
|
||||
}
|
||||
}
|
||||
|
||||
inline void get_peek_token() {
|
||||
void get_peek_token() {
|
||||
if (!have_peek_tok) {
|
||||
peek_tok = lexer.scan();
|
||||
have_peek_tok = true;
|
||||
}
|
||||
}
|
||||
|
||||
inline void add_literal(Arguments &arguments, const char* content_ptr) {
|
||||
void add_literal(Arguments &arguments, const char* content_ptr) {
|
||||
const std::string_view data_text(literal_start.data(), tok.text.data() - literal_start.data() + tok.text.size());
|
||||
arguments.emplace_back(std::make_shared<LiteralNode>(data_text, data_text.data() - content_ptr));
|
||||
}
|
||||
|
||||
inline void add_operator(Arguments &arguments, OperatorStack &operator_stack) {
|
||||
void add_operator(Arguments &arguments, OperatorStack &operator_stack) {
|
||||
auto function = operator_stack.top();
|
||||
operator_stack.pop();
|
||||
|
||||
|
||||
@@ -196,7 +196,7 @@ class Renderer : public NodeVisitor {
|
||||
return result;
|
||||
}
|
||||
|
||||
void visit(const BlockNode& node) {
|
||||
void visit(const BlockNode& node) override {
|
||||
for (const auto& n : node.nodes) {
|
||||
n->accept(*this);
|
||||
|
||||
@@ -206,17 +206,17 @@ class Renderer : public NodeVisitor {
|
||||
}
|
||||
}
|
||||
|
||||
void visit(const TextNode& node) {
|
||||
void visit(const TextNode& node) override {
|
||||
output_stream->write(current_template->content.c_str() + node.pos, node.length);
|
||||
}
|
||||
|
||||
void visit(const ExpressionNode&) {}
|
||||
void visit(const ExpressionNode&) override {}
|
||||
|
||||
void visit(const LiteralNode& node) {
|
||||
void visit(const LiteralNode& node) override {
|
||||
data_eval_stack.push(&node.value);
|
||||
}
|
||||
|
||||
void visit(const DataNode& node) {
|
||||
void visit(const DataNode& node) override {
|
||||
if (additional_data.contains(node.ptr)) {
|
||||
data_eval_stack.push(&(additional_data[node.ptr]));
|
||||
} else if (data_input->contains(node.ptr)) {
|
||||
@@ -236,7 +236,7 @@ class Renderer : public NodeVisitor {
|
||||
}
|
||||
}
|
||||
|
||||
void visit(const FunctionNode& node) {
|
||||
void visit(const FunctionNode& node) override {
|
||||
switch (node.operation) {
|
||||
case Op::Not: {
|
||||
const auto args = get_arguments<1>(node);
|
||||
@@ -516,15 +516,15 @@ class Renderer : public NodeVisitor {
|
||||
}
|
||||
}
|
||||
|
||||
void visit(const ExpressionListNode& node) {
|
||||
void visit(const ExpressionListNode& node) override {
|
||||
print_data(eval_expression_list(node));
|
||||
}
|
||||
|
||||
void visit(const StatementNode&) {}
|
||||
void visit(const StatementNode&) override {}
|
||||
|
||||
void visit(const ForStatementNode&) {}
|
||||
void visit(const ForStatementNode&) override {}
|
||||
|
||||
void visit(const ForArrayStatementNode& node) {
|
||||
void visit(const ForArrayStatementNode& node) override {
|
||||
const auto result = eval_expression_list(node.condition);
|
||||
if (!result->is_array()) {
|
||||
throw_renderer_error("object must be an array", node);
|
||||
@@ -563,7 +563,7 @@ class Renderer : public NodeVisitor {
|
||||
}
|
||||
}
|
||||
|
||||
void visit(const ForObjectStatementNode& node) {
|
||||
void visit(const ForObjectStatementNode& node) override {
|
||||
const auto result = eval_expression_list(node.condition);
|
||||
if (!result->is_object()) {
|
||||
throw_renderer_error("object must be an object", node);
|
||||
@@ -602,7 +602,7 @@ class Renderer : public NodeVisitor {
|
||||
}
|
||||
}
|
||||
|
||||
void visit(const IfStatementNode& node) {
|
||||
void visit(const IfStatementNode& node) override {
|
||||
const auto result = eval_expression_list(node.condition);
|
||||
if (truthy(result.get())) {
|
||||
node.true_statement.accept(*this);
|
||||
@@ -611,7 +611,7 @@ class Renderer : public NodeVisitor {
|
||||
}
|
||||
}
|
||||
|
||||
void visit(const IncludeStatementNode& node) {
|
||||
void visit(const IncludeStatementNode& node) override {
|
||||
auto sub_renderer = Renderer(config, template_storage, function_storage);
|
||||
const auto included_template_it = template_storage.find(node.file);
|
||||
if (included_template_it != template_storage.end()) {
|
||||
@@ -621,7 +621,7 @@ class Renderer : public NodeVisitor {
|
||||
}
|
||||
}
|
||||
|
||||
void visit(const ExtendsStatementNode& node) {
|
||||
void visit(const ExtendsStatementNode& node) override {
|
||||
const auto included_template_it = template_storage.find(node.file);
|
||||
if (included_template_it != template_storage.end()) {
|
||||
const Template* parent_template = &included_template_it->second;
|
||||
@@ -632,7 +632,7 @@ class Renderer : public NodeVisitor {
|
||||
}
|
||||
}
|
||||
|
||||
void visit(const BlockStatementNode& node) {
|
||||
void visit(const BlockStatementNode& node) override {
|
||||
const size_t old_level = current_level;
|
||||
current_level = 0;
|
||||
current_template = template_stack.front();
|
||||
@@ -646,7 +646,7 @@ class Renderer : public NodeVisitor {
|
||||
current_template = template_stack.back();
|
||||
}
|
||||
|
||||
void visit(const SetStatementNode& node) {
|
||||
void visit(const SetStatementNode& node) override {
|
||||
std::string ptr = node.key;
|
||||
replace_substring(ptr, ".", "/");
|
||||
ptr = "/" + ptr;
|
||||
@@ -654,7 +654,7 @@ class Renderer : public NodeVisitor {
|
||||
}
|
||||
|
||||
public:
|
||||
Renderer(const RenderConfig& config, const TemplateStorage& template_storage, const FunctionStorage& function_storage)
|
||||
explicit Renderer(const RenderConfig& config, const TemplateStorage& template_storage, const FunctionStorage& function_storage)
|
||||
: config(config), template_storage(template_storage), function_storage(function_storage) {}
|
||||
|
||||
void render_to(std::ostream& os, const Template& tmpl, const json& data, json* loop_data = nullptr) {
|
||||
|
||||
@@ -9,58 +9,58 @@ namespace inja {
|
||||
* \brief A class for counting statistics on a Template.
|
||||
*/
|
||||
class StatisticsVisitor : public NodeVisitor {
|
||||
void visit(const BlockNode& node) {
|
||||
void visit(const BlockNode& node) override {
|
||||
for (const auto& n : node.nodes) {
|
||||
n->accept(*this);
|
||||
}
|
||||
}
|
||||
|
||||
void visit(const TextNode&) {}
|
||||
void visit(const ExpressionNode&) {}
|
||||
void visit(const LiteralNode&) {}
|
||||
void visit(const TextNode&) override {}
|
||||
void visit(const ExpressionNode&) override {}
|
||||
void visit(const LiteralNode&) override {}
|
||||
|
||||
void visit(const DataNode&) {
|
||||
void visit(const DataNode&) override {
|
||||
variable_counter += 1;
|
||||
}
|
||||
|
||||
void visit(const FunctionNode& node) {
|
||||
void visit(const FunctionNode& node) override {
|
||||
for (const auto& n : node.arguments) {
|
||||
n->accept(*this);
|
||||
}
|
||||
}
|
||||
|
||||
void visit(const ExpressionListNode& node) {
|
||||
void visit(const ExpressionListNode& node) override {
|
||||
node.root->accept(*this);
|
||||
}
|
||||
|
||||
void visit(const StatementNode&) {}
|
||||
void visit(const ForStatementNode&) {}
|
||||
void visit(const StatementNode&) override {}
|
||||
void visit(const ForStatementNode&) override {}
|
||||
|
||||
void visit(const ForArrayStatementNode& node) {
|
||||
void visit(const ForArrayStatementNode& node) override {
|
||||
node.condition.accept(*this);
|
||||
node.body.accept(*this);
|
||||
}
|
||||
|
||||
void visit(const ForObjectStatementNode& node) {
|
||||
void visit(const ForObjectStatementNode& node) override {
|
||||
node.condition.accept(*this);
|
||||
node.body.accept(*this);
|
||||
}
|
||||
|
||||
void visit(const IfStatementNode& node) {
|
||||
void visit(const IfStatementNode& node) override {
|
||||
node.condition.accept(*this);
|
||||
node.true_statement.accept(*this);
|
||||
node.false_statement.accept(*this);
|
||||
}
|
||||
|
||||
void visit(const IncludeStatementNode&) {}
|
||||
void visit(const IncludeStatementNode&) override {}
|
||||
|
||||
void visit(const ExtendsStatementNode&) {}
|
||||
void visit(const ExtendsStatementNode&) override {}
|
||||
|
||||
void visit(const BlockStatementNode& node) {
|
||||
void visit(const BlockStatementNode& node) override {
|
||||
node.block.accept(*this);
|
||||
}
|
||||
|
||||
void visit(const SetStatementNode&) {}
|
||||
void visit(const SetStatementNode&) override {}
|
||||
|
||||
public:
|
||||
size_t variable_counter;
|
||||
|
||||
@@ -428,7 +428,7 @@ public:
|
||||
|
||||
size_t pos;
|
||||
|
||||
AstNode(size_t pos): pos(pos) {}
|
||||
explicit AstNode(size_t pos): pos(pos) {}
|
||||
virtual ~AstNode() {}
|
||||
};
|
||||
|
||||
@@ -438,7 +438,7 @@ public:
|
||||
|
||||
explicit BlockNode(): AstNode(0) {}
|
||||
|
||||
void accept(NodeVisitor& v) const {
|
||||
void accept(NodeVisitor& v) const override {
|
||||
v.visit(*this);
|
||||
}
|
||||
};
|
||||
@@ -449,7 +449,7 @@ public:
|
||||
|
||||
explicit TextNode(size_t pos, size_t length): AstNode(pos), length(length) {}
|
||||
|
||||
void accept(NodeVisitor& v) const {
|
||||
void accept(NodeVisitor& v) const override {
|
||||
v.visit(*this);
|
||||
}
|
||||
};
|
||||
@@ -458,7 +458,7 @@ class ExpressionNode : public AstNode {
|
||||
public:
|
||||
explicit ExpressionNode(size_t pos): AstNode(pos) {}
|
||||
|
||||
void accept(NodeVisitor& v) const {
|
||||
void accept(NodeVisitor& v) const override {
|
||||
v.visit(*this);
|
||||
}
|
||||
};
|
||||
@@ -469,7 +469,7 @@ public:
|
||||
|
||||
explicit LiteralNode(std::string_view data_text, size_t pos): ExpressionNode(pos), value(json::parse(data_text)) {}
|
||||
|
||||
void accept(NodeVisitor& v) const {
|
||||
void accept(NodeVisitor& v) const override {
|
||||
v.visit(*this);
|
||||
}
|
||||
};
|
||||
@@ -492,7 +492,7 @@ public:
|
||||
|
||||
explicit DataNode(std::string_view ptr_name, size_t pos): ExpressionNode(pos), name(ptr_name), ptr(json::json_pointer(convert_dot_to_ptr(ptr_name))) {}
|
||||
|
||||
void accept(NodeVisitor& v) const {
|
||||
void accept(NodeVisitor& v) const override {
|
||||
v.visit(*this);
|
||||
}
|
||||
};
|
||||
@@ -612,7 +612,7 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
void accept(NodeVisitor& v) const {
|
||||
void accept(NodeVisitor& v) const override {
|
||||
v.visit(*this);
|
||||
}
|
||||
};
|
||||
@@ -624,14 +624,14 @@ public:
|
||||
explicit ExpressionListNode(): AstNode(0) {}
|
||||
explicit ExpressionListNode(size_t pos): AstNode(pos) {}
|
||||
|
||||
void accept(NodeVisitor& v) const {
|
||||
void accept(NodeVisitor& v) const override {
|
||||
v.visit(*this);
|
||||
}
|
||||
};
|
||||
|
||||
class StatementNode : public AstNode {
|
||||
public:
|
||||
StatementNode(size_t pos): AstNode(pos) {}
|
||||
explicit StatementNode(size_t pos): AstNode(pos) {}
|
||||
|
||||
virtual void accept(NodeVisitor& v) const = 0;
|
||||
};
|
||||
@@ -642,7 +642,7 @@ public:
|
||||
BlockNode body;
|
||||
BlockNode* const parent;
|
||||
|
||||
ForStatementNode(BlockNode* const parent, size_t pos): StatementNode(pos), parent(parent) {}
|
||||
explicit ForStatementNode(BlockNode* const parent, size_t pos): StatementNode(pos), parent(parent) {}
|
||||
|
||||
virtual void accept(NodeVisitor& v) const = 0;
|
||||
};
|
||||
@@ -653,7 +653,7 @@ public:
|
||||
|
||||
explicit ForArrayStatementNode(const std::string& value, BlockNode* const parent, size_t pos): ForStatementNode(parent, pos), value(value) {}
|
||||
|
||||
void accept(NodeVisitor& v) const {
|
||||
void accept(NodeVisitor& v) const override {
|
||||
v.visit(*this);
|
||||
}
|
||||
};
|
||||
@@ -666,7 +666,7 @@ public:
|
||||
explicit ForObjectStatementNode(const std::string& key, const std::string& value, BlockNode* const parent, size_t pos)
|
||||
: ForStatementNode(parent, pos), key(key), value(value) {}
|
||||
|
||||
void accept(NodeVisitor& v) const {
|
||||
void accept(NodeVisitor& v) const override {
|
||||
v.visit(*this);
|
||||
}
|
||||
};
|
||||
@@ -684,7 +684,7 @@ public:
|
||||
explicit IfStatementNode(BlockNode* const parent, size_t pos): StatementNode(pos), parent(parent), is_nested(false) {}
|
||||
explicit IfStatementNode(bool is_nested, BlockNode* const parent, size_t pos): StatementNode(pos), parent(parent), is_nested(is_nested) {}
|
||||
|
||||
void accept(NodeVisitor& v) const {
|
||||
void accept(NodeVisitor& v) const override {
|
||||
v.visit(*this);
|
||||
}
|
||||
};
|
||||
@@ -695,7 +695,7 @@ public:
|
||||
|
||||
explicit IncludeStatementNode(const std::string& file, size_t pos): StatementNode(pos), file(file) {}
|
||||
|
||||
void accept(NodeVisitor& v) const {
|
||||
void accept(NodeVisitor& v) const override {
|
||||
v.visit(*this);
|
||||
}
|
||||
};
|
||||
@@ -706,7 +706,7 @@ public:
|
||||
|
||||
explicit ExtendsStatementNode(const std::string& file, size_t pos): StatementNode(pos), file(file) {}
|
||||
|
||||
void accept(NodeVisitor& v) const {
|
||||
void accept(NodeVisitor& v) const override {
|
||||
v.visit(*this);
|
||||
}
|
||||
};
|
||||
@@ -719,7 +719,7 @@ public:
|
||||
|
||||
explicit BlockStatementNode(BlockNode* const parent, const std::string& name, size_t pos): StatementNode(pos), name(name), parent(parent) {}
|
||||
|
||||
void accept(NodeVisitor& v) const {
|
||||
void accept(NodeVisitor& v) const override {
|
||||
v.visit(*this);
|
||||
}
|
||||
};
|
||||
@@ -731,7 +731,7 @@ public:
|
||||
|
||||
explicit SetStatementNode(const std::string& key, size_t pos): StatementNode(pos), key(key) {}
|
||||
|
||||
void accept(NodeVisitor& v) const {
|
||||
void accept(NodeVisitor& v) const override {
|
||||
v.visit(*this);
|
||||
}
|
||||
};
|
||||
@@ -753,58 +753,58 @@ namespace inja {
|
||||
* \brief A class for counting statistics on a Template.
|
||||
*/
|
||||
class StatisticsVisitor : public NodeVisitor {
|
||||
void visit(const BlockNode& node) {
|
||||
void visit(const BlockNode& node) override {
|
||||
for (const auto& n : node.nodes) {
|
||||
n->accept(*this);
|
||||
}
|
||||
}
|
||||
|
||||
void visit(const TextNode&) {}
|
||||
void visit(const ExpressionNode&) {}
|
||||
void visit(const LiteralNode&) {}
|
||||
void visit(const TextNode&) override {}
|
||||
void visit(const ExpressionNode&) override {}
|
||||
void visit(const LiteralNode&) override {}
|
||||
|
||||
void visit(const DataNode&) {
|
||||
void visit(const DataNode&) override {
|
||||
variable_counter += 1;
|
||||
}
|
||||
|
||||
void visit(const FunctionNode& node) {
|
||||
void visit(const FunctionNode& node) override {
|
||||
for (const auto& n : node.arguments) {
|
||||
n->accept(*this);
|
||||
}
|
||||
}
|
||||
|
||||
void visit(const ExpressionListNode& node) {
|
||||
void visit(const ExpressionListNode& node) override {
|
||||
node.root->accept(*this);
|
||||
}
|
||||
|
||||
void visit(const StatementNode&) {}
|
||||
void visit(const ForStatementNode&) {}
|
||||
void visit(const StatementNode&) override {}
|
||||
void visit(const ForStatementNode&) override {}
|
||||
|
||||
void visit(const ForArrayStatementNode& node) {
|
||||
void visit(const ForArrayStatementNode& node) override {
|
||||
node.condition.accept(*this);
|
||||
node.body.accept(*this);
|
||||
}
|
||||
|
||||
void visit(const ForObjectStatementNode& node) {
|
||||
void visit(const ForObjectStatementNode& node) override {
|
||||
node.condition.accept(*this);
|
||||
node.body.accept(*this);
|
||||
}
|
||||
|
||||
void visit(const IfStatementNode& node) {
|
||||
void visit(const IfStatementNode& node) override {
|
||||
node.condition.accept(*this);
|
||||
node.true_statement.accept(*this);
|
||||
node.false_statement.accept(*this);
|
||||
}
|
||||
|
||||
void visit(const IncludeStatementNode&) {}
|
||||
void visit(const IncludeStatementNode&) override {}
|
||||
|
||||
void visit(const ExtendsStatementNode&) {}
|
||||
void visit(const ExtendsStatementNode&) override {}
|
||||
|
||||
void visit(const BlockStatementNode& node) {
|
||||
void visit(const BlockStatementNode& node) override {
|
||||
node.block.accept(*this);
|
||||
}
|
||||
|
||||
void visit(const SetStatementNode&) {}
|
||||
void visit(const SetStatementNode&) override {}
|
||||
|
||||
public:
|
||||
size_t variable_counter;
|
||||
@@ -1498,11 +1498,11 @@ class Parser {
|
||||
std::stack<ForStatementNode*> for_statement_stack;
|
||||
std::stack<BlockStatementNode*> block_statement_stack;
|
||||
|
||||
inline void throw_parser_error(const std::string& message) const {
|
||||
void throw_parser_error(const std::string& message) const {
|
||||
INJA_THROW(ParserError(message, lexer.current_position()));
|
||||
}
|
||||
|
||||
inline void get_next_token() {
|
||||
void get_next_token() {
|
||||
if (have_peek_tok) {
|
||||
tok = peek_tok;
|
||||
have_peek_tok = false;
|
||||
@@ -1511,19 +1511,19 @@ class Parser {
|
||||
}
|
||||
}
|
||||
|
||||
inline void get_peek_token() {
|
||||
void get_peek_token() {
|
||||
if (!have_peek_tok) {
|
||||
peek_tok = lexer.scan();
|
||||
have_peek_tok = true;
|
||||
}
|
||||
}
|
||||
|
||||
inline void add_literal(Arguments &arguments, const char* content_ptr) {
|
||||
void add_literal(Arguments &arguments, const char* content_ptr) {
|
||||
const std::string_view data_text(literal_start.data(), tok.text.data() - literal_start.data() + tok.text.size());
|
||||
arguments.emplace_back(std::make_shared<LiteralNode>(data_text, data_text.data() - content_ptr));
|
||||
}
|
||||
|
||||
inline void add_operator(Arguments &arguments, OperatorStack &operator_stack) {
|
||||
void add_operator(Arguments &arguments, OperatorStack &operator_stack) {
|
||||
auto function = operator_stack.top();
|
||||
operator_stack.pop();
|
||||
|
||||
@@ -2349,7 +2349,7 @@ class Renderer : public NodeVisitor {
|
||||
return result;
|
||||
}
|
||||
|
||||
void visit(const BlockNode& node) {
|
||||
void visit(const BlockNode& node) override {
|
||||
for (const auto& n : node.nodes) {
|
||||
n->accept(*this);
|
||||
|
||||
@@ -2359,17 +2359,17 @@ class Renderer : public NodeVisitor {
|
||||
}
|
||||
}
|
||||
|
||||
void visit(const TextNode& node) {
|
||||
void visit(const TextNode& node) override {
|
||||
output_stream->write(current_template->content.c_str() + node.pos, node.length);
|
||||
}
|
||||
|
||||
void visit(const ExpressionNode&) {}
|
||||
void visit(const ExpressionNode&) override {}
|
||||
|
||||
void visit(const LiteralNode& node) {
|
||||
void visit(const LiteralNode& node) override {
|
||||
data_eval_stack.push(&node.value);
|
||||
}
|
||||
|
||||
void visit(const DataNode& node) {
|
||||
void visit(const DataNode& node) override {
|
||||
if (additional_data.contains(node.ptr)) {
|
||||
data_eval_stack.push(&(additional_data[node.ptr]));
|
||||
} else if (data_input->contains(node.ptr)) {
|
||||
@@ -2389,7 +2389,7 @@ class Renderer : public NodeVisitor {
|
||||
}
|
||||
}
|
||||
|
||||
void visit(const FunctionNode& node) {
|
||||
void visit(const FunctionNode& node) override {
|
||||
switch (node.operation) {
|
||||
case Op::Not: {
|
||||
const auto args = get_arguments<1>(node);
|
||||
@@ -2669,15 +2669,15 @@ class Renderer : public NodeVisitor {
|
||||
}
|
||||
}
|
||||
|
||||
void visit(const ExpressionListNode& node) {
|
||||
void visit(const ExpressionListNode& node) override {
|
||||
print_data(eval_expression_list(node));
|
||||
}
|
||||
|
||||
void visit(const StatementNode&) {}
|
||||
void visit(const StatementNode&) override {}
|
||||
|
||||
void visit(const ForStatementNode&) {}
|
||||
void visit(const ForStatementNode&) override {}
|
||||
|
||||
void visit(const ForArrayStatementNode& node) {
|
||||
void visit(const ForArrayStatementNode& node) override {
|
||||
const auto result = eval_expression_list(node.condition);
|
||||
if (!result->is_array()) {
|
||||
throw_renderer_error("object must be an array", node);
|
||||
@@ -2716,7 +2716,7 @@ class Renderer : public NodeVisitor {
|
||||
}
|
||||
}
|
||||
|
||||
void visit(const ForObjectStatementNode& node) {
|
||||
void visit(const ForObjectStatementNode& node) override {
|
||||
const auto result = eval_expression_list(node.condition);
|
||||
if (!result->is_object()) {
|
||||
throw_renderer_error("object must be an object", node);
|
||||
@@ -2755,7 +2755,7 @@ class Renderer : public NodeVisitor {
|
||||
}
|
||||
}
|
||||
|
||||
void visit(const IfStatementNode& node) {
|
||||
void visit(const IfStatementNode& node) override {
|
||||
const auto result = eval_expression_list(node.condition);
|
||||
if (truthy(result.get())) {
|
||||
node.true_statement.accept(*this);
|
||||
@@ -2764,7 +2764,7 @@ class Renderer : public NodeVisitor {
|
||||
}
|
||||
}
|
||||
|
||||
void visit(const IncludeStatementNode& node) {
|
||||
void visit(const IncludeStatementNode& node) override {
|
||||
auto sub_renderer = Renderer(config, template_storage, function_storage);
|
||||
const auto included_template_it = template_storage.find(node.file);
|
||||
if (included_template_it != template_storage.end()) {
|
||||
@@ -2774,7 +2774,7 @@ class Renderer : public NodeVisitor {
|
||||
}
|
||||
}
|
||||
|
||||
void visit(const ExtendsStatementNode& node) {
|
||||
void visit(const ExtendsStatementNode& node) override {
|
||||
const auto included_template_it = template_storage.find(node.file);
|
||||
if (included_template_it != template_storage.end()) {
|
||||
const Template* parent_template = &included_template_it->second;
|
||||
@@ -2785,7 +2785,7 @@ class Renderer : public NodeVisitor {
|
||||
}
|
||||
}
|
||||
|
||||
void visit(const BlockStatementNode& node) {
|
||||
void visit(const BlockStatementNode& node) override {
|
||||
const size_t old_level = current_level;
|
||||
current_level = 0;
|
||||
current_template = template_stack.front();
|
||||
@@ -2799,7 +2799,7 @@ class Renderer : public NodeVisitor {
|
||||
current_template = template_stack.back();
|
||||
}
|
||||
|
||||
void visit(const SetStatementNode& node) {
|
||||
void visit(const SetStatementNode& node) override {
|
||||
std::string ptr = node.key;
|
||||
replace_substring(ptr, ".", "/");
|
||||
ptr = "/" + ptr;
|
||||
@@ -2807,7 +2807,7 @@ class Renderer : public NodeVisitor {
|
||||
}
|
||||
|
||||
public:
|
||||
Renderer(const RenderConfig& config, const TemplateStorage& template_storage, const FunctionStorage& function_storage)
|
||||
explicit Renderer(const RenderConfig& config, const TemplateStorage& template_storage, const FunctionStorage& function_storage)
|
||||
: config(config), template_storage(template_storage), function_storage(function_storage) {}
|
||||
|
||||
void render_to(std::ostream& os, const Template& tmpl, const json& data, json* loop_data = nullptr) {
|
||||
@@ -2983,7 +2983,7 @@ public:
|
||||
}
|
||||
|
||||
std::string load_file(const std::string& filename) {
|
||||
Parser parser(parser_config, lexer_config, template_storage, function_storage);
|
||||
const Parser parser(parser_config, lexer_config, template_storage, function_storage);
|
||||
return Parser::load_file(input_path / filename);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user