mirror of
https://github.com/pantor/inja.git
synced 2026-02-17 09:03:58 +00:00
add INJA_NOEXCEPTION
This commit is contained in:
@@ -321,6 +321,11 @@ Comments can be written with the `{# ... #}` syntax.
|
||||
render("Hello{# Todo #}!", data); // "Hello!"
|
||||
```
|
||||
|
||||
### Exceptions
|
||||
|
||||
Inja uses exceptions to handle ill-formed template input. However, exceptions can be switched off with either using the compiler flag `-fno-exceptions` or by defining the symbol `INJA_NOEXCEPTION`. In this case, exceptions are replaced by `abort()` calls.
|
||||
|
||||
|
||||
## Supported compilers
|
||||
|
||||
Inja uses `string_view` from C++17, but includes the [polyfill](https://github.com/martinmoene/string-view-lite) from martinmoene. This way, the minimum version is C++11. Currently, the following compilers are tested:
|
||||
|
||||
@@ -5,6 +5,13 @@
|
||||
|
||||
#include <nlohmann/json.hpp>
|
||||
|
||||
#if (defined(__cpp_exceptions) || defined(__EXCEPTIONS) || defined(_CPPUNWIND)) && !defined(INJA_NOEXCEPTION)
|
||||
#define INJA_THROW(exception) throw exception
|
||||
#else
|
||||
#include <cstdlib>
|
||||
#define INJA_THROW(exception) std::abort()
|
||||
#endif
|
||||
|
||||
#include "environment.hpp"
|
||||
#include "exceptions.hpp"
|
||||
#include "parser.hpp"
|
||||
|
||||
@@ -51,7 +51,7 @@ class Parser {
|
||||
std::stack<ForStatementNode*> for_statement_stack;
|
||||
|
||||
void throw_parser_error(const std::string &message) {
|
||||
throw ParserError(message, lexer.current_position());
|
||||
INJA_THROW(ParserError(message, lexer.current_position()));
|
||||
}
|
||||
|
||||
void get_next_token() {
|
||||
|
||||
@@ -91,7 +91,7 @@ class Renderer : public NodeVisitor {
|
||||
|
||||
void throw_renderer_error(const std::string &message, const AstNode& node) {
|
||||
SourceLocation loc = get_source_location(current_template->content, node.pos);
|
||||
throw RenderError(message, loc);
|
||||
INJA_THROW(RenderError(message, loc));
|
||||
}
|
||||
|
||||
template<size_t N, bool throw_not_found=true>
|
||||
|
||||
@@ -18,7 +18,7 @@ inline void open_file_or_throw(const std::string &path, std::ifstream &file) {
|
||||
try {
|
||||
file.open(path);
|
||||
} catch (const std::ios_base::failure & /*e*/) {
|
||||
throw FileError("failed accessing file at '" + path + "'");
|
||||
INJA_THROW(FileError("failed accessing file at '" + path + "'"));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -5,6 +5,13 @@
|
||||
|
||||
#include <nlohmann/json.hpp>
|
||||
|
||||
#if (defined(__cpp_exceptions) || defined(__EXCEPTIONS) || defined(_CPPUNWIND)) && !defined(INJA_NOEXCEPTION)
|
||||
#define INJA_THROW(exception) throw exception
|
||||
#else
|
||||
#include <cstdlib>
|
||||
#define INJA_THROW(exception) std::abort()
|
||||
#endif
|
||||
|
||||
// #include "environment.hpp"
|
||||
// Copyright (c) 2019 Pantor. All rights reserved.
|
||||
|
||||
@@ -1838,7 +1845,7 @@ inline void open_file_or_throw(const std::string &path, std::ifstream &file) {
|
||||
try {
|
||||
file.open(path);
|
||||
} catch (const std::ios_base::failure & /*e*/) {
|
||||
throw FileError("failed accessing file at '" + path + "'");
|
||||
INJA_THROW(FileError("failed accessing file at '" + path + "'"));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2780,7 +2787,7 @@ class Parser {
|
||||
std::stack<ForStatementNode*> for_statement_stack;
|
||||
|
||||
void throw_parser_error(const std::string &message) {
|
||||
throw ParserError(message, lexer.current_position());
|
||||
INJA_THROW(ParserError(message, lexer.current_position()));
|
||||
}
|
||||
|
||||
void get_next_token() {
|
||||
@@ -3409,7 +3416,7 @@ class Renderer : public NodeVisitor {
|
||||
|
||||
void throw_renderer_error(const std::string &message, const AstNode& node) {
|
||||
SourceLocation loc = get_source_location(current_template->content, node.pos);
|
||||
throw RenderError(message, loc);
|
||||
INJA_THROW(RenderError(message, loc));
|
||||
}
|
||||
|
||||
template<size_t N, bool throw_not_found=true>
|
||||
|
||||
@@ -1,9 +1,5 @@
|
||||
// Copyright (c) 2020 Pantor. All rights reserved.
|
||||
|
||||
#include "doctest/doctest.h"
|
||||
#include "inja/inja.hpp"
|
||||
|
||||
|
||||
TEST_CASE("loading") {
|
||||
inja::Environment env;
|
||||
json data;
|
||||
|
||||
@@ -1,9 +1,5 @@
|
||||
// Copyright (c) 2020 Pantor. All rights reserved.
|
||||
|
||||
#include "doctest/doctest.h"
|
||||
#include "inja/inja.hpp"
|
||||
|
||||
|
||||
TEST_CASE("functions") {
|
||||
inja::Environment env;
|
||||
|
||||
|
||||
@@ -1,9 +1,5 @@
|
||||
// Copyright (c) 2020 Pantor. All rights reserved.
|
||||
|
||||
#include "doctest/doctest.h"
|
||||
#include "inja/inja.hpp"
|
||||
|
||||
|
||||
TEST_CASE("types") {
|
||||
inja::Environment env;
|
||||
json data;
|
||||
|
||||
@@ -1,9 +1,5 @@
|
||||
// Copyright (c) 2020 Pantor. All rights reserved.
|
||||
|
||||
#include "doctest/doctest.h"
|
||||
#include "inja/inja.hpp"
|
||||
|
||||
|
||||
TEST_CASE("source location") {
|
||||
std::string content = R""""(Lorem Ipsum
|
||||
Dolor
|
||||
|
||||
Reference in New Issue
Block a user