remove try/catch from truthy
diff --git a/include/inja/renderer.hpp b/include/inja/renderer.hpp
index cd7f117..9c34025 100644
--- a/include/inja/renderer.hpp
+++ b/include/inja/renderer.hpp
@@ -41,19 +41,14 @@
std::stack<const JsonNode*> not_found_stack;
bool truthy(const json* data) const {
- if (data->empty()) {
- return false;
+ if (data->is_boolean()) {
+ return data->get<bool>();
} else if (data->is_number()) {
return (*data != 0);
- } else if (data->is_string()) {
- return !data->empty();
+ } else if (data->is_null()) {
+ return false;
}
-
- try {
- return data->get<bool>();
- } catch (json::type_error &e) {
- throw JsonError(e.what());
- }
+ return !data->empty();
}
void print_json(const std::shared_ptr<json> value) {
@@ -71,7 +66,6 @@
if (json_eval_stack.empty()) {
throw_renderer_error("empty expression", expression_list);
-
} else if (json_eval_stack.size() != 1) {
throw_renderer_error("malformed expression", expression_list);
}
diff --git a/single_include/inja/inja.hpp b/single_include/inja/inja.hpp
index 9919003..30277b1 100644
--- a/single_include/inja/inja.hpp
+++ b/single_include/inja/inja.hpp
@@ -3345,19 +3345,14 @@
std::stack<const JsonNode*> not_found_stack;
bool truthy(const json* data) const {
- if (data->empty()) {
- return false;
+ if (data->is_boolean()) {
+ return data->get<bool>();
} else if (data->is_number()) {
return (*data != 0);
- } else if (data->is_string()) {
- return !data->empty();
+ } else if (data->is_null()) {
+ return false;
}
-
- try {
- return data->get<bool>();
- } catch (json::type_error &e) {
- throw JsonError(e.what());
- }
+ return !data->empty();
}
void print_json(const std::shared_ptr<json> value) {
@@ -3375,7 +3370,6 @@
if (json_eval_stack.empty()) {
throw_renderer_error("empty expression", expression_list);
-
} else if (json_eval_stack.size() != 1) {
throw_renderer_error("malformed expression", expression_list);
}