Commit cd44e434 by Niels

Merge pull request #200 from twelsby/issue199

Fixed issue #199 - Small bugs in json.hpp (get_number) and unit.cpp (non-standard integer type test)
parents ff6f7231 561accb0
...@@ -7110,8 +7110,7 @@ class basic_json ...@@ -7110,8 +7110,7 @@ class basic_json
{ {
lexer_char_t yych; lexer_char_t yych;
unsigned int yyaccept = 0; unsigned int yyaccept = 0;
static const unsigned char yybm[] = static const unsigned char yybm[] = {
{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 32, 32, 0, 0, 32, 0, 0, 0, 32, 32, 0, 0, 32, 0, 0,
64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
...@@ -7145,140 +7144,56 @@ class basic_json ...@@ -7145,140 +7144,56 @@ class basic_json
64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
}; };
if ((m_limit - m_cursor) < 5) if ((m_limit - m_cursor) < 5) yyfill(); // LCOV_EXCL_LINE;
{
yyfill(); // LCOV_EXCL_LINE;
}
yych = *m_cursor; yych = *m_cursor;
if (yych <= ':') if (yych <= ':') {
{ if (yych <= ' ') {
if (yych <= ' ') if (yych <= '\n') {
{ if (yych <= 0x00) goto basic_json_parser_28;
if (yych <= '\n') if (yych <= 0x08) goto basic_json_parser_30;
{ if (yych >= '\n') goto basic_json_parser_4;
if (yych <= 0x00) } else {
{ if (yych == '\r') goto basic_json_parser_2;
goto basic_json_parser_28; if (yych <= 0x1F) goto basic_json_parser_30;
} }
if (yych <= 0x08) } else {
{ if (yych <= ',') {
goto basic_json_parser_30; if (yych == '"') goto basic_json_parser_27;
} if (yych <= '+') goto basic_json_parser_30;
if (yych >= '\n')
{
goto basic_json_parser_4;
}
}
else
{
if (yych == '\r')
{
goto basic_json_parser_2;
}
if (yych <= 0x1F)
{
goto basic_json_parser_30;
}
}
}
else
{
if (yych <= ',')
{
if (yych == '"')
{
goto basic_json_parser_27;
}
if (yych <= '+')
{
goto basic_json_parser_30;
}
goto basic_json_parser_16; goto basic_json_parser_16;
} } else {
else if (yych <= '/') {
{ if (yych <= '-') goto basic_json_parser_23;
if (yych <= '/')
{
if (yych <= '-')
{
goto basic_json_parser_23;
}
goto basic_json_parser_30; goto basic_json_parser_30;
} } else {
else if (yych <= '0') goto basic_json_parser_24;
{ if (yych <= '9') goto basic_json_parser_26;
if (yych <= '0')
{
goto basic_json_parser_24;
}
if (yych <= '9')
{
goto basic_json_parser_26;
}
goto basic_json_parser_18; goto basic_json_parser_18;
} }
} }
} }
} } else {
else if (yych <= 'n') {
{ if (yych <= ']') {
if (yych <= 'n') if (yych == '[') goto basic_json_parser_8;
{ if (yych <= '\\') goto basic_json_parser_30;
if (yych <= ']')
{
if (yych == '[')
{
goto basic_json_parser_8;
}
if (yych <= '\\')
{
goto basic_json_parser_30;
}
goto basic_json_parser_10; goto basic_json_parser_10;
} } else {
else if (yych == 'f') goto basic_json_parser_22;
{ if (yych <= 'm') goto basic_json_parser_30;
if (yych == 'f')
{
goto basic_json_parser_22;
}
if (yych <= 'm')
{
goto basic_json_parser_30;
}
goto basic_json_parser_20; goto basic_json_parser_20;
} }
} } else {
else if (yych <= '{') {
{ if (yych == 't') goto basic_json_parser_21;
if (yych <= '{') if (yych <= 'z') goto basic_json_parser_30;
{
if (yych == 't')
{
goto basic_json_parser_21;
}
if (yych <= 'z')
{
goto basic_json_parser_30;
}
goto basic_json_parser_12; goto basic_json_parser_12;
} } else {
else if (yych <= '}') {
{ if (yych <= '|') goto basic_json_parser_30;
if (yych <= '}')
{
if (yych <= '|')
{
goto basic_json_parser_30;
}
goto basic_json_parser_14; goto basic_json_parser_14;
} } else {
else if (yych == 0xEF) goto basic_json_parser_6;
{
if (yych == 0xEF)
{
goto basic_json_parser_6;
}
goto basic_json_parser_30; goto basic_json_parser_30;
} }
} }
...@@ -7289,127 +7204,72 @@ basic_json_parser_2: ...@@ -7289,127 +7204,72 @@ basic_json_parser_2:
yych = *m_cursor; yych = *m_cursor;
goto basic_json_parser_5; goto basic_json_parser_5;
basic_json_parser_3: basic_json_parser_3:
{ { return scan(); }
return scan();
}
basic_json_parser_4: basic_json_parser_4:
++m_cursor; ++m_cursor;
if (m_limit <= m_cursor) if (m_limit <= m_cursor) yyfill(); // LCOV_EXCL_LINE;
{
yyfill(); // LCOV_EXCL_LINE;
}
yych = *m_cursor; yych = *m_cursor;
basic_json_parser_5: basic_json_parser_5:
if (yybm[0 + yych] & 32) if (yybm[0+yych] & 32) {
{
goto basic_json_parser_4; goto basic_json_parser_4;
} }
goto basic_json_parser_3; goto basic_json_parser_3;
basic_json_parser_6: basic_json_parser_6:
yyaccept = 0; yyaccept = 0;
yych = *(m_marker = ++m_cursor); yych = *(m_marker = ++m_cursor);
if (yych == 0xBB) if (yych == 0xBB) goto basic_json_parser_64;
{
goto basic_json_parser_64;
}
basic_json_parser_7: basic_json_parser_7:
{ { return token_type::parse_error; }
return token_type::parse_error;
}
basic_json_parser_8: basic_json_parser_8:
++m_cursor; ++m_cursor;
{ { return token_type::begin_array; }
return token_type::begin_array;
}
basic_json_parser_10: basic_json_parser_10:
++m_cursor; ++m_cursor;
{ { return token_type::end_array; }
return token_type::end_array;
}
basic_json_parser_12: basic_json_parser_12:
++m_cursor; ++m_cursor;
{ { return token_type::begin_object; }
return token_type::begin_object;
}
basic_json_parser_14: basic_json_parser_14:
++m_cursor; ++m_cursor;
{ { return token_type::end_object; }
return token_type::end_object;
}
basic_json_parser_16: basic_json_parser_16:
++m_cursor; ++m_cursor;
{ { return token_type::value_separator; }
return token_type::value_separator;
}
basic_json_parser_18: basic_json_parser_18:
++m_cursor; ++m_cursor;
{ { return token_type::name_separator; }
return token_type::name_separator;
}
basic_json_parser_20: basic_json_parser_20:
yyaccept = 0; yyaccept = 0;
yych = *(m_marker = ++m_cursor); yych = *(m_marker = ++m_cursor);
if (yych == 'u') if (yych == 'u') goto basic_json_parser_60;
{
goto basic_json_parser_60;
}
goto basic_json_parser_7; goto basic_json_parser_7;
basic_json_parser_21: basic_json_parser_21:
yyaccept = 0; yyaccept = 0;
yych = *(m_marker = ++m_cursor); yych = *(m_marker = ++m_cursor);
if (yych == 'r') if (yych == 'r') goto basic_json_parser_56;
{
goto basic_json_parser_56;
}
goto basic_json_parser_7; goto basic_json_parser_7;
basic_json_parser_22: basic_json_parser_22:
yyaccept = 0; yyaccept = 0;
yych = *(m_marker = ++m_cursor); yych = *(m_marker = ++m_cursor);
if (yych == 'a') if (yych == 'a') goto basic_json_parser_51;
{
goto basic_json_parser_51;
}
goto basic_json_parser_7; goto basic_json_parser_7;
basic_json_parser_23: basic_json_parser_23:
yych = *++m_cursor; yych = *++m_cursor;
if (yych <= '/') if (yych <= '/') goto basic_json_parser_7;
{ if (yych <= '0') goto basic_json_parser_50;
goto basic_json_parser_7; if (yych <= '9') goto basic_json_parser_41;
}
if (yych <= '0')
{
goto basic_json_parser_50;
}
if (yych <= '9')
{
goto basic_json_parser_41;
}
goto basic_json_parser_7; goto basic_json_parser_7;
basic_json_parser_24: basic_json_parser_24:
yyaccept = 1; yyaccept = 1;
yych = *(m_marker = ++m_cursor); yych = *(m_marker = ++m_cursor);
if (yych <= 'D') if (yych <= 'D') {
{ if (yych == '.') goto basic_json_parser_43;
if (yych == '.') } else {
{ if (yych <= 'E') goto basic_json_parser_44;
goto basic_json_parser_43; if (yych == 'e') goto basic_json_parser_44;
}
}
else
{
if (yych <= 'E')
{
goto basic_json_parser_44;
}
if (yych == 'e')
{
goto basic_json_parser_44;
}
} }
basic_json_parser_25: basic_json_parser_25:
{ { return token_type::value_number; }
return token_type::value_number;
}
basic_json_parser_26: basic_json_parser_26:
yyaccept = 1; yyaccept = 1;
yych = *(m_marker = ++m_cursor); yych = *(m_marker = ++m_cursor);
...@@ -7417,477 +7277,214 @@ basic_json_parser_26: ...@@ -7417,477 +7277,214 @@ basic_json_parser_26:
basic_json_parser_27: basic_json_parser_27:
yyaccept = 0; yyaccept = 0;
yych = *(m_marker = ++m_cursor); yych = *(m_marker = ++m_cursor);
if (yych <= 0x0F) if (yych <= 0x0F) goto basic_json_parser_7;
{
goto basic_json_parser_7;
}
goto basic_json_parser_32; goto basic_json_parser_32;
basic_json_parser_28: basic_json_parser_28:
++m_cursor; ++m_cursor;
{ { return token_type::end_of_input; }
return token_type::end_of_input;
}
basic_json_parser_30: basic_json_parser_30:
yych = *++m_cursor; yych = *++m_cursor;
goto basic_json_parser_7; goto basic_json_parser_7;
basic_json_parser_31: basic_json_parser_31:
++m_cursor; ++m_cursor;
if (m_limit <= m_cursor) if (m_limit <= m_cursor) yyfill(); // LCOV_EXCL_LINE;
{
yyfill(); // LCOV_EXCL_LINE;
}
yych = *m_cursor; yych = *m_cursor;
basic_json_parser_32: basic_json_parser_32:
if (yybm[0 + yych] & 64) if (yybm[0+yych] & 64) {
{
goto basic_json_parser_31; goto basic_json_parser_31;
} }
if (yych <= 0x0F) if (yych <= 0x0F) goto basic_json_parser_33;
{ if (yych <= '"') goto basic_json_parser_35;
goto basic_json_parser_33;
}
if (yych <= '"')
{
goto basic_json_parser_35;
}
goto basic_json_parser_34; goto basic_json_parser_34;
basic_json_parser_33: basic_json_parser_33:
m_cursor = m_marker; m_cursor = m_marker;
if (yyaccept == 0) if (yyaccept == 0) {
{
goto basic_json_parser_7; goto basic_json_parser_7;
} } else {
else
{
goto basic_json_parser_25; goto basic_json_parser_25;
} }
basic_json_parser_34: basic_json_parser_34:
++m_cursor; ++m_cursor;
if (m_limit <= m_cursor) if (m_limit <= m_cursor) yyfill(); // LCOV_EXCL_LINE;
{
yyfill(); // LCOV_EXCL_LINE;
}
yych = *m_cursor; yych = *m_cursor;
if (yych <= 'e') if (yych <= 'e') {
{ if (yych <= '/') {
if (yych <= '/') if (yych == '"') goto basic_json_parser_31;
{ if (yych <= '.') goto basic_json_parser_33;
if (yych == '"')
{
goto basic_json_parser_31; goto basic_json_parser_31;
} } else {
if (yych <= '.') if (yych <= '\\') {
{ if (yych <= '[') goto basic_json_parser_33;
goto basic_json_parser_33;
}
goto basic_json_parser_31; goto basic_json_parser_31;
} } else {
else if (yych == 'b') goto basic_json_parser_31;
{
if (yych <= '\\')
{
if (yych <= '[')
{
goto basic_json_parser_33; goto basic_json_parser_33;
} }
goto basic_json_parser_31;
}
else
{
if (yych == 'b')
{
goto basic_json_parser_31;
} }
} else {
if (yych <= 'q') {
if (yych <= 'f') goto basic_json_parser_31;
if (yych == 'n') goto basic_json_parser_31;
goto basic_json_parser_33; goto basic_json_parser_33;
} } else {
} if (yych <= 's') {
} if (yych <= 'r') goto basic_json_parser_31;
else
{
if (yych <= 'q')
{
if (yych <= 'f')
{
goto basic_json_parser_31;
}
if (yych == 'n')
{
goto basic_json_parser_31;
}
goto basic_json_parser_33; goto basic_json_parser_33;
} } else {
else if (yych <= 't') goto basic_json_parser_31;
{ if (yych <= 'u') goto basic_json_parser_37;
if (yych <= 's')
{
if (yych <= 'r')
{
goto basic_json_parser_31;
}
goto basic_json_parser_33;
}
else
{
if (yych <= 't')
{
goto basic_json_parser_31;
}
if (yych <= 'u')
{
goto basic_json_parser_37;
}
goto basic_json_parser_33; goto basic_json_parser_33;
} }
} }
} }
basic_json_parser_35: basic_json_parser_35:
++m_cursor; ++m_cursor;
{ { return token_type::value_string; }
return token_type::value_string;
}
basic_json_parser_37: basic_json_parser_37:
++m_cursor; ++m_cursor;
if (m_limit <= m_cursor) if (m_limit <= m_cursor) yyfill(); // LCOV_EXCL_LINE;
{
yyfill(); // LCOV_EXCL_LINE;
}
yych = *m_cursor; yych = *m_cursor;
if (yych <= '@') if (yych <= '@') {
{ if (yych <= '/') goto basic_json_parser_33;
if (yych <= '/') if (yych >= ':') goto basic_json_parser_33;
{ } else {
goto basic_json_parser_33; if (yych <= 'F') goto basic_json_parser_38;
} if (yych <= '`') goto basic_json_parser_33;
if (yych >= ':') if (yych >= 'g') goto basic_json_parser_33;
{
goto basic_json_parser_33;
}
}
else
{
if (yych <= 'F')
{
goto basic_json_parser_38;
}
if (yych <= '`')
{
goto basic_json_parser_33;
}
if (yych >= 'g')
{
goto basic_json_parser_33;
}
} }
basic_json_parser_38: basic_json_parser_38:
++m_cursor; ++m_cursor;
if (m_limit <= m_cursor) if (m_limit <= m_cursor) yyfill(); // LCOV_EXCL_LINE;
{
yyfill(); // LCOV_EXCL_LINE;
}
yych = *m_cursor; yych = *m_cursor;
if (yych <= '@') if (yych <= '@') {
{ if (yych <= '/') goto basic_json_parser_33;
if (yych <= '/') if (yych >= ':') goto basic_json_parser_33;
{ } else {
goto basic_json_parser_33; if (yych <= 'F') goto basic_json_parser_39;
} if (yych <= '`') goto basic_json_parser_33;
if (yych >= ':') if (yych >= 'g') goto basic_json_parser_33;
{
goto basic_json_parser_33;
}
}
else
{
if (yych <= 'F')
{
goto basic_json_parser_39;
}
if (yych <= '`')
{
goto basic_json_parser_33;
}
if (yych >= 'g')
{
goto basic_json_parser_33;
}
} }
basic_json_parser_39: basic_json_parser_39:
++m_cursor; ++m_cursor;
if (m_limit <= m_cursor) if (m_limit <= m_cursor) yyfill(); // LCOV_EXCL_LINE;
{
yyfill(); // LCOV_EXCL_LINE;
}
yych = *m_cursor; yych = *m_cursor;
if (yych <= '@') if (yych <= '@') {
{ if (yych <= '/') goto basic_json_parser_33;
if (yych <= '/') if (yych >= ':') goto basic_json_parser_33;
{ } else {
goto basic_json_parser_33; if (yych <= 'F') goto basic_json_parser_40;
} if (yych <= '`') goto basic_json_parser_33;
if (yych >= ':') if (yych >= 'g') goto basic_json_parser_33;
{
goto basic_json_parser_33;
}
}
else
{
if (yych <= 'F')
{
goto basic_json_parser_40;
}
if (yych <= '`')
{
goto basic_json_parser_33;
}
if (yych >= 'g')
{
goto basic_json_parser_33;
}
} }
basic_json_parser_40: basic_json_parser_40:
++m_cursor; ++m_cursor;
if (m_limit <= m_cursor) if (m_limit <= m_cursor) yyfill(); // LCOV_EXCL_LINE;
{
yyfill(); // LCOV_EXCL_LINE;
}
yych = *m_cursor; yych = *m_cursor;
if (yych <= '@') if (yych <= '@') {
{ if (yych <= '/') goto basic_json_parser_33;
if (yych <= '/') if (yych <= '9') goto basic_json_parser_31;
{
goto basic_json_parser_33;
}
if (yych <= '9')
{
goto basic_json_parser_31;
}
goto basic_json_parser_33;
}
else
{
if (yych <= 'F')
{
goto basic_json_parser_31;
}
if (yych <= '`')
{
goto basic_json_parser_33; goto basic_json_parser_33;
} } else {
if (yych <= 'f') if (yych <= 'F') goto basic_json_parser_31;
{ if (yych <= '`') goto basic_json_parser_33;
goto basic_json_parser_31; if (yych <= 'f') goto basic_json_parser_31;
}
goto basic_json_parser_33; goto basic_json_parser_33;
} }
basic_json_parser_41: basic_json_parser_41:
yyaccept = 1; yyaccept = 1;
m_marker = ++m_cursor; m_marker = ++m_cursor;
if ((m_limit - m_cursor) < 3) if ((m_limit - m_cursor) < 3) yyfill(); // LCOV_EXCL_LINE;
{
yyfill(); // LCOV_EXCL_LINE;
}
yych = *m_cursor; yych = *m_cursor;
basic_json_parser_42: basic_json_parser_42:
if (yybm[0 + yych] & 128) if (yybm[0+yych] & 128) {
{
goto basic_json_parser_41; goto basic_json_parser_41;
} }
if (yych <= 'D') if (yych <= 'D') {
{ if (yych != '.') goto basic_json_parser_25;
if (yych != '.') } else {
{ if (yych <= 'E') goto basic_json_parser_44;
goto basic_json_parser_25; if (yych == 'e') goto basic_json_parser_44;
}
}
else
{
if (yych <= 'E')
{
goto basic_json_parser_44;
}
if (yych == 'e')
{
goto basic_json_parser_44;
}
goto basic_json_parser_25; goto basic_json_parser_25;
} }
basic_json_parser_43: basic_json_parser_43:
yych = *++m_cursor; yych = *++m_cursor;
if (yych <= '/') if (yych <= '/') goto basic_json_parser_33;
{ if (yych <= '9') goto basic_json_parser_48;
goto basic_json_parser_33;
}
if (yych <= '9')
{
goto basic_json_parser_48;
}
goto basic_json_parser_33; goto basic_json_parser_33;
basic_json_parser_44: basic_json_parser_44:
yych = *++m_cursor; yych = *++m_cursor;
if (yych <= ',') if (yych <= ',') {
{ if (yych != '+') goto basic_json_parser_33;
if (yych != '+') } else {
{ if (yych <= '-') goto basic_json_parser_45;
goto basic_json_parser_33; if (yych <= '/') goto basic_json_parser_33;
} if (yych <= '9') goto basic_json_parser_46;
}
else
{
if (yych <= '-')
{
goto basic_json_parser_45;
}
if (yych <= '/')
{
goto basic_json_parser_33;
}
if (yych <= '9')
{
goto basic_json_parser_46;
}
goto basic_json_parser_33; goto basic_json_parser_33;
} }
basic_json_parser_45: basic_json_parser_45:
yych = *++m_cursor; yych = *++m_cursor;
if (yych <= '/') if (yych <= '/') goto basic_json_parser_33;
{ if (yych >= ':') goto basic_json_parser_33;
goto basic_json_parser_33;
}
if (yych >= ':')
{
goto basic_json_parser_33;
}
basic_json_parser_46: basic_json_parser_46:
++m_cursor; ++m_cursor;
if (m_limit <= m_cursor) if (m_limit <= m_cursor) yyfill(); // LCOV_EXCL_LINE;
{
yyfill(); // LCOV_EXCL_LINE;
}
yych = *m_cursor; yych = *m_cursor;
if (yych <= '/') if (yych <= '/') goto basic_json_parser_25;
{ if (yych <= '9') goto basic_json_parser_46;
goto basic_json_parser_25;
}
if (yych <= '9')
{
goto basic_json_parser_46;
}
goto basic_json_parser_25; goto basic_json_parser_25;
basic_json_parser_48: basic_json_parser_48:
yyaccept = 1; yyaccept = 1;
m_marker = ++m_cursor; m_marker = ++m_cursor;
if ((m_limit - m_cursor) < 3) if ((m_limit - m_cursor) < 3) yyfill(); // LCOV_EXCL_LINE;
{
yyfill(); // LCOV_EXCL_LINE;
}
yych = *m_cursor; yych = *m_cursor;
if (yych <= 'D') if (yych <= 'D') {
{ if (yych <= '/') goto basic_json_parser_25;
if (yych <= '/') if (yych <= '9') goto basic_json_parser_48;
{
goto basic_json_parser_25; goto basic_json_parser_25;
} } else {
if (yych <= '9') if (yych <= 'E') goto basic_json_parser_44;
{ if (yych == 'e') goto basic_json_parser_44;
goto basic_json_parser_48;
}
goto basic_json_parser_25;
}
else
{
if (yych <= 'E')
{
goto basic_json_parser_44;
}
if (yych == 'e')
{
goto basic_json_parser_44;
}
goto basic_json_parser_25; goto basic_json_parser_25;
} }
basic_json_parser_50: basic_json_parser_50:
yyaccept = 1; yyaccept = 1;
yych = *(m_marker = ++m_cursor); yych = *(m_marker = ++m_cursor);
if (yych <= 'D') if (yych <= 'D') {
{ if (yych == '.') goto basic_json_parser_43;
if (yych == '.')
{
goto basic_json_parser_43;
}
goto basic_json_parser_25; goto basic_json_parser_25;
} } else {
else if (yych <= 'E') goto basic_json_parser_44;
{ if (yych == 'e') goto basic_json_parser_44;
if (yych <= 'E')
{
goto basic_json_parser_44;
}
if (yych == 'e')
{
goto basic_json_parser_44;
}
goto basic_json_parser_25; goto basic_json_parser_25;
} }
basic_json_parser_51: basic_json_parser_51:
yych = *++m_cursor; yych = *++m_cursor;
if (yych != 'l') if (yych != 'l') goto basic_json_parser_33;
{
goto basic_json_parser_33;
}
yych = *++m_cursor; yych = *++m_cursor;
if (yych != 's') if (yych != 's') goto basic_json_parser_33;
{
goto basic_json_parser_33;
}
yych = *++m_cursor; yych = *++m_cursor;
if (yych != 'e') if (yych != 'e') goto basic_json_parser_33;
{
goto basic_json_parser_33;
}
++m_cursor; ++m_cursor;
{ { return token_type::literal_false; }
return token_type::literal_false;
}
basic_json_parser_56: basic_json_parser_56:
yych = *++m_cursor; yych = *++m_cursor;
if (yych != 'u') if (yych != 'u') goto basic_json_parser_33;
{
goto basic_json_parser_33;
}
yych = *++m_cursor; yych = *++m_cursor;
if (yych != 'e') if (yych != 'e') goto basic_json_parser_33;
{
goto basic_json_parser_33;
}
++m_cursor; ++m_cursor;
{ { return token_type::literal_true; }
return token_type::literal_true;
}
basic_json_parser_60: basic_json_parser_60:
yych = *++m_cursor; yych = *++m_cursor;
if (yych != 'l') if (yych != 'l') goto basic_json_parser_33;
{
goto basic_json_parser_33;
}
yych = *++m_cursor; yych = *++m_cursor;
if (yych != 'l') if (yych != 'l') goto basic_json_parser_33;
{
goto basic_json_parser_33;
}
++m_cursor; ++m_cursor;
{ { return token_type::literal_null; }
return token_type::literal_null;
}
basic_json_parser_64: basic_json_parser_64:
yych = *++m_cursor; yych = *++m_cursor;
if (yych != 0xBF) if (yych != 0xBF) goto basic_json_parser_33;
{
goto basic_json_parser_33;
}
++m_cursor; ++m_cursor;
{ { return scan(); }
return scan();
}
} }
...@@ -8199,7 +7796,7 @@ basic_json_parser_64: ...@@ -8199,7 +7796,7 @@ basic_json_parser_64:
// Negative, parse with strtoll and attempt cast to // Negative, parse with strtoll and attempt cast to
// number_integer_t // number_integer_t
if (attempt_cast(std::strtoll(reinterpret_cast<typename string_t::const_pointer>(m_start), &endptr, if (attempt_cast(std::strtoll(reinterpret_cast<typename string_t::const_pointer>(m_start), &endptr,
10), result.m_value.number_unsigned)) 10), result.m_value.number_integer))
{ {
result.m_type = value_t::number_integer; result.m_type = value_t::number_integer;
} }
......
...@@ -7478,7 +7478,7 @@ class basic_json ...@@ -7478,7 +7478,7 @@ class basic_json
// Negative, parse with strtoll and attempt cast to // Negative, parse with strtoll and attempt cast to
// number_integer_t // number_integer_t
if (attempt_cast(std::strtoll(reinterpret_cast<typename string_t::const_pointer>(m_start), &endptr, if (attempt_cast(std::strtoll(reinterpret_cast<typename string_t::const_pointer>(m_start), &endptr,
10), result.m_value.number_unsigned)) 10), result.m_value.number_integer))
{ {
result.m_type = value_t::number_integer; result.m_type = value_t::number_integer;
} }
......
...@@ -12097,17 +12097,17 @@ TEST_CASE("regression tests") ...@@ -12097,17 +12097,17 @@ TEST_CASE("regression tests")
// unsigned integer parsing - expected to overflow and be stored as a float // unsigned integer parsing - expected to overflow and be stored as a float
j = custom_json::parse("4294967296"); // 2^32 j = custom_json::parse("4294967296"); // 2^32
CHECK(static_cast<int>(j.type()) == static_cast<int>(custom_json::value_t::number_float)); CHECK(static_cast<int>(j.type()) == static_cast<int>(custom_json::value_t::number_float));
CHECK(j.get<float>() == 4294967296.0); CHECK(j.get<float>() == 4294967296.0f);
// integer object creation - expected to wrap and still be stored as an integer // integer object creation - expected to wrap and still be stored as an integer
j = -2147483649LL; // -2^31-1 j = -2147483649LL; // -2^31-1
CHECK(static_cast<int>(j.type()) == static_cast<int>(custom_json::value_t::number_integer)); CHECK(static_cast<int>(j.type()) == static_cast<int>(custom_json::value_t::number_integer));
CHECK(j.get<int32_t>() == 2147483647.0); // Wrap CHECK(j.get<int32_t>() == 2147483647); // Wrap
// integer parsing - expected to overflow and be stored as a float // integer parsing - expected to overflow and be stored as a float with rounding
j = custom_json::parse("-2147483648"); // -2^31 j = custom_json::parse("-2147483649"); // -2^31
CHECK(static_cast<int>(j.type()) == static_cast<int>(custom_json::value_t::number_float)); CHECK(static_cast<int>(j.type()) == static_cast<int>(custom_json::value_t::number_float));
CHECK(j.get<float>() == -2147483648.0); CHECK(j.get<float>() == -2147483650.0f);
} }
SECTION("issue #93 reverse_iterator operator inheritance problem") SECTION("issue #93 reverse_iterator operator inheritance problem")
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment