🐛 fixed a bug in the unget function
This commit is contained in:
parent
011b15dd08
commit
6d09cdec34
4 changed files with 21 additions and 16 deletions
|
@ -154,11 +154,6 @@ class parse_error : public exception
|
||||||
|
|
||||||
static std::string position_string(const position_t& pos)
|
static std::string position_string(const position_t& pos)
|
||||||
{
|
{
|
||||||
if (pos.chars_read_total == 0)
|
|
||||||
{
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
return " at line " + std::to_string(pos.lines_read + 1) +
|
return " at line " + std::to_string(pos.lines_read + 1) +
|
||||||
", column " + std::to_string(pos.chars_read_current_line);
|
", column " + std::to_string(pos.chars_read_current_line);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1278,12 +1278,18 @@ scan_number_done:
|
||||||
next_unget = true;
|
next_unget = true;
|
||||||
|
|
||||||
--position.chars_read_total;
|
--position.chars_read_total;
|
||||||
--position.chars_read_current_line;
|
|
||||||
|
|
||||||
// in case we "unget" a newline, we have to also decrement the lines_read
|
// in case we "unget" a newline, we have to also decrement the lines_read
|
||||||
if (position.lines_read != 0 and position.chars_read_current_line == 0)
|
if (position.chars_read_current_line == 0)
|
||||||
{
|
{
|
||||||
--position.lines_read;
|
if (position.lines_read > 0)
|
||||||
|
{
|
||||||
|
--position.lines_read;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
--position.chars_read_current_line;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (JSON_LIKELY(current != std::char_traits<char>::eof()))
|
if (JSON_LIKELY(current != std::char_traits<char>::eof()))
|
||||||
|
|
|
@ -795,11 +795,6 @@ class parse_error : public exception
|
||||||
|
|
||||||
static std::string position_string(const position_t& pos)
|
static std::string position_string(const position_t& pos)
|
||||||
{
|
{
|
||||||
if (pos.chars_read_total == 0)
|
|
||||||
{
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
return " at line " + std::to_string(pos.lines_read + 1) +
|
return " at line " + std::to_string(pos.lines_read + 1) +
|
||||||
", column " + std::to_string(pos.chars_read_current_line);
|
", column " + std::to_string(pos.chars_read_current_line);
|
||||||
}
|
}
|
||||||
|
@ -3595,12 +3590,18 @@ scan_number_done:
|
||||||
next_unget = true;
|
next_unget = true;
|
||||||
|
|
||||||
--position.chars_read_total;
|
--position.chars_read_total;
|
||||||
--position.chars_read_current_line;
|
|
||||||
|
|
||||||
// in case we "unget" a newline, we have to also decrement the lines_read
|
// in case we "unget" a newline, we have to also decrement the lines_read
|
||||||
if (position.lines_read != 0 and position.chars_read_current_line == 0)
|
if (position.chars_read_current_line == 0)
|
||||||
{
|
{
|
||||||
--position.lines_read;
|
if (position.lines_read > 0)
|
||||||
|
{
|
||||||
|
--position.lines_read;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
--position.chars_read_current_line;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (JSON_LIKELY(current != std::char_traits<char>::eof()))
|
if (JSON_LIKELY(current != std::char_traits<char>::eof()))
|
||||||
|
|
|
@ -1292,6 +1292,9 @@ TEST_CASE("parser class")
|
||||||
CHECK(accept_helper("\"\\u01") == false);
|
CHECK(accept_helper("\"\\u01") == false);
|
||||||
CHECK(accept_helper("\"\\u012") == false);
|
CHECK(accept_helper("\"\\u012") == false);
|
||||||
|
|
||||||
|
// unget of newline
|
||||||
|
CHECK(parser_helper("\n123\n") == 123);
|
||||||
|
|
||||||
// invalid escapes
|
// invalid escapes
|
||||||
for (int c = 1; c < 128; ++c)
|
for (int c = 1; c < 128; ++c)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue