Remove templating from finish() method

This commit is contained in:
John Keiser 2020-06-05 11:48:22 -07:00
parent 9dd6972d26
commit 6f90f5dc5f
2 changed files with 18 additions and 13 deletions

View File

@ -30,6 +30,12 @@ namespace logger {
} }
} }
static really_inline void log_string(const char *message) {
if (LOG_ENABLED) {
printf("%s\n", message);
}
}
// Logs a single line of // Logs a single line of
template<typename S> template<typename S>
static really_inline void log_line(S &structurals, const char *title_prefix, const char *title, const char *detail) { static really_inline void log_line(S &structurals, const char *title_prefix, const char *title, const char *detail) {

View File

@ -269,19 +269,9 @@ struct structural_parser {
} }
} }
template<bool STREAMING>
WARN_UNUSED really_inline error_code finish() { WARN_UNUSED really_inline error_code finish() {
end_document(); end_document();
if (STREAMING) {
parser.next_structural_index = uint32_t(structurals.next_structural_index()); parser.next_structural_index = uint32_t(structurals.next_structural_index());
} else {
// Check if we're at the end or if there is stuff left still
if ( !structurals.at_end(parser.n_structural_indexes) ) {
log_error("More than one JSON value at the root of the document, or extra characters at the end of the JSON!");
return parser.error = TAPE_ERROR;
}
}
if (depth != 0) { if (depth != 0) {
log_error("Unclosed objects or arrays!"); log_error("Unclosed objects or arrays!");
@ -505,7 +495,7 @@ array_continue:
} }
finish: finish:
return parser.finish<STREAMING>(); return parser.finish();
error: error:
return parser.error(); return parser.error();
@ -519,7 +509,16 @@ error:
* for documentation. * for documentation.
***********/ ***********/
WARN_UNUSED error_code dom_parser_implementation::stage2(dom::document &_doc) noexcept { WARN_UNUSED error_code dom_parser_implementation::stage2(dom::document &_doc) noexcept {
return stage2::parse_structurals<false>(*this, _doc); error_code result = stage2::parse_structurals<false>(*this, _doc);
if (result) { return result; }
// If we didn't make it to the end, it's an error
if ( next_structural_index != n_structural_indexes ) {
logger::log_string("More than one JSON value at the root of the document, or extra characters at the end of the JSON!");
return error = TAPE_ERROR;
}
return SUCCESS;
} }
/************ /************