Merge remote-tracking branch 'ianloic/fuchsia' into fuchsia
* ianloic/fuchsia:
Ignore comments in JSON. Not spec compliant but useful.
Add BUILD.gn for Fuchsia
diff --git a/BUILD.gn b/BUILD.gn
new file mode 100644
index 0000000..d299d84
--- /dev/null
+++ b/BUILD.gn
@@ -0,0 +1,9 @@
+# Copyright 2016 The Fuchsia Authors. All Rights Reserved.
+# Use of this source code is governed by a BSD-style
+# license that can be found in the LICENSE file.
+
+static_library("json") {
+ sources = [
+ "src/json.hpp"
+ ]
+}
diff --git a/src/json.hpp b/src/json.hpp
index a8289a4..bd9ffed 100644
--- a/src/json.hpp
+++ b/src/json.hpp
@@ -7693,771 +7693,420 @@
m_start = m_cursor;
assert(m_start != nullptr);
-
- {
- lexer_char_t yych;
- unsigned int yyaccept = 0;
- static const unsigned char yybm[] =
- {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 32, 32, 0, 0, 32, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 160, 128, 0, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 192, 192, 192, 192, 192, 192, 192, 192,
- 192, 192, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 0, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128,
- };
- if ((m_limit - m_cursor) < 5)
- {
- yyfill(); // LCOV_EXCL_LINE;
- }
- yych = *m_cursor;
- if (yybm[0 + yych] & 32)
- {
- goto basic_json_parser_6;
- }
- if (yych <= '\\')
- {
- if (yych <= '-')
- {
- if (yych <= '"')
- {
- if (yych <= 0x00)
- {
- goto basic_json_parser_2;
- }
- if (yych <= '!')
- {
- goto basic_json_parser_4;
- }
- goto basic_json_parser_9;
- }
- else
- {
- if (yych <= '+')
- {
- goto basic_json_parser_4;
- }
- if (yych <= ',')
- {
- goto basic_json_parser_10;
- }
- goto basic_json_parser_12;
- }
- }
- else
- {
- if (yych <= '9')
- {
- if (yych <= '/')
- {
- goto basic_json_parser_4;
- }
- if (yych <= '0')
- {
- goto basic_json_parser_13;
- }
- goto basic_json_parser_15;
- }
- else
- {
- if (yych <= ':')
- {
- goto basic_json_parser_17;
- }
- if (yych == '[')
- {
- goto basic_json_parser_19;
- }
- goto basic_json_parser_4;
- }
- }
- }
- else
- {
- if (yych <= 't')
- {
- if (yych <= 'f')
- {
- if (yych <= ']')
- {
- goto basic_json_parser_21;
- }
- if (yych <= 'e')
- {
- goto basic_json_parser_4;
- }
- goto basic_json_parser_23;
- }
- else
- {
- if (yych == 'n')
- {
- goto basic_json_parser_24;
- }
- if (yych <= 's')
- {
- goto basic_json_parser_4;
- }
- goto basic_json_parser_25;
- }
- }
- else
- {
- if (yych <= '|')
- {
- if (yych == '{')
- {
- goto basic_json_parser_26;
- }
- goto basic_json_parser_4;
- }
- else
- {
- if (yych <= '}')
- {
- goto basic_json_parser_28;
- }
- if (yych == 0xEF)
- {
- goto basic_json_parser_30;
- }
- goto basic_json_parser_4;
- }
- }
- }
-basic_json_parser_2:
- ++m_cursor;
- {
- last_token_type = token_type::end_of_input;
- break;
- }
-basic_json_parser_4:
- ++m_cursor;
-basic_json_parser_5:
- {
- last_token_type = token_type::parse_error;
- break;
- }
-basic_json_parser_6:
- ++m_cursor;
- if (m_limit <= m_cursor)
- {
- yyfill(); // LCOV_EXCL_LINE;
- }
- yych = *m_cursor;
- if (yybm[0 + yych] & 32)
- {
- goto basic_json_parser_6;
- }
- {
- continue;
- }
-basic_json_parser_9:
- yyaccept = 0;
- yych = *(m_marker = ++m_cursor);
- if (yych <= 0x1F)
- {
- goto basic_json_parser_5;
- }
- goto basic_json_parser_32;
-basic_json_parser_10:
- ++m_cursor;
- {
- last_token_type = token_type::value_separator;
- break;
- }
-basic_json_parser_12:
- yych = *++m_cursor;
- if (yych <= '/')
- {
- goto basic_json_parser_5;
- }
- if (yych <= '0')
- {
- goto basic_json_parser_13;
- }
- if (yych <= '9')
- {
- goto basic_json_parser_15;
- }
- goto basic_json_parser_5;
-basic_json_parser_13:
- yyaccept = 1;
- yych = *(m_marker = ++m_cursor);
- if (yych <= 'D')
- {
- if (yych == '.')
- {
- goto basic_json_parser_37;
- }
- }
- else
- {
- if (yych <= 'E')
- {
- goto basic_json_parser_38;
- }
- if (yych == 'e')
- {
- goto basic_json_parser_38;
- }
- }
-basic_json_parser_14:
- {
- last_token_type = token_type::value_number;
- break;
- }
-basic_json_parser_15:
- yyaccept = 1;
- m_marker = ++m_cursor;
- if ((m_limit - m_cursor) < 3)
- {
- yyfill(); // LCOV_EXCL_LINE;
- }
- yych = *m_cursor;
- if (yybm[0 + yych] & 64)
- {
- goto basic_json_parser_15;
- }
- if (yych <= 'D')
- {
- if (yych == '.')
- {
- goto basic_json_parser_37;
- }
- goto basic_json_parser_14;
- }
- else
- {
- if (yych <= 'E')
- {
- goto basic_json_parser_38;
- }
- if (yych == 'e')
- {
- goto basic_json_parser_38;
- }
- goto basic_json_parser_14;
- }
-basic_json_parser_17:
- ++m_cursor;
- {
- last_token_type = token_type::name_separator;
- break;
- }
-basic_json_parser_19:
- ++m_cursor;
- {
- last_token_type = token_type::begin_array;
- break;
- }
-basic_json_parser_21:
- ++m_cursor;
- {
- last_token_type = token_type::end_array;
- break;
- }
-basic_json_parser_23:
- yyaccept = 0;
- yych = *(m_marker = ++m_cursor);
- if (yych == 'a')
- {
- goto basic_json_parser_39;
- }
- goto basic_json_parser_5;
-basic_json_parser_24:
- yyaccept = 0;
- yych = *(m_marker = ++m_cursor);
- if (yych == 'u')
- {
- goto basic_json_parser_40;
- }
- goto basic_json_parser_5;
-basic_json_parser_25:
- yyaccept = 0;
- yych = *(m_marker = ++m_cursor);
- if (yych == 'r')
- {
- goto basic_json_parser_41;
- }
- goto basic_json_parser_5;
-basic_json_parser_26:
- ++m_cursor;
- {
- last_token_type = token_type::begin_object;
- break;
- }
-basic_json_parser_28:
- ++m_cursor;
- {
- last_token_type = token_type::end_object;
- break;
- }
-basic_json_parser_30:
- yyaccept = 0;
- yych = *(m_marker = ++m_cursor);
- if (yych == 0xBB)
- {
- goto basic_json_parser_42;
- }
- goto basic_json_parser_5;
-basic_json_parser_31:
- ++m_cursor;
- if (m_limit <= m_cursor)
- {
- yyfill(); // LCOV_EXCL_LINE;
- }
- yych = *m_cursor;
-basic_json_parser_32:
- if (yybm[0 + yych] & 128)
- {
+
+ {
+ lexer_char_t yych;
+ unsigned int yyaccept = 0;
+ static const unsigned char yybm[] = {
+ 192, 192, 192, 192, 192, 192, 192, 192,
+ 192, 200, 136, 192, 192, 200, 192, 192,
+ 192, 192, 192, 192, 192, 192, 192, 192,
+ 192, 192, 192, 192, 192, 192, 192, 192,
+ 216, 208, 192, 208, 208, 208, 208, 208,
+ 208, 208, 80, 208, 208, 208, 208, 208,
+ 240, 240, 240, 240, 240, 240, 240, 240,
+ 240, 240, 208, 208, 208, 208, 208, 208,
+ 208, 208, 208, 208, 208, 208, 208, 208,
+ 208, 208, 208, 208, 208, 208, 208, 208,
+ 208, 208, 208, 208, 208, 208, 208, 208,
+ 208, 208, 208, 208, 192, 208, 208, 208,
+ 208, 208, 208, 208, 208, 208, 208, 208,
+ 208, 208, 208, 208, 208, 208, 208, 208,
+ 208, 208, 208, 208, 208, 208, 208, 208,
+ 208, 208, 208, 208, 208, 208, 208, 208,
+ 208, 208, 208, 208, 208, 208, 208, 208,
+ 208, 208, 208, 208, 208, 208, 208, 208,
+ 208, 208, 208, 208, 208, 208, 208, 208,
+ 208, 208, 208, 208, 208, 208, 208, 208,
+ 208, 208, 208, 208, 208, 208, 208, 208,
+ 208, 208, 208, 208, 208, 208, 208, 208,
+ 208, 208, 208, 208, 208, 208, 208, 208,
+ 208, 208, 208, 208, 208, 208, 208, 208,
+ 208, 208, 208, 208, 208, 208, 208, 208,
+ 208, 208, 208, 208, 208, 208, 208, 208,
+ 208, 208, 208, 208, 208, 208, 208, 208,
+ 208, 208, 208, 208, 208, 208, 208, 208,
+ 208, 208, 208, 208, 208, 208, 208, 208,
+ 208, 208, 208, 208, 208, 208, 208, 208,
+ 208, 208, 208, 208, 208, 208, 208, 208,
+ 208, 208, 208, 208, 208, 208, 208, 208,
+ };
+ if ((m_limit - m_cursor) < 5) yyfill(); // LCOV_EXCL_LINE;
+ yych = *m_cursor;
+ if (yych <= '9') {
+ if (yych <= ' ') {
+ if (yych <= '\n') {
+ if (yych <= 0x00) goto basic_json_parser_29;
+ if (yych <= 0x08) goto basic_json_parser_31;
+ if (yych >= '\n') goto basic_json_parser_4;
+ } else {
+ if (yych == '\r') goto basic_json_parser_2;
+ if (yych <= 0x1F) goto basic_json_parser_31;
+ }
+ } else {
+ if (yych <= ',') {
+ if (yych == '"') goto basic_json_parser_28;
+ if (yych <= '+') goto basic_json_parser_31;
+ goto basic_json_parser_17;
+ } else {
+ if (yych <= '.') {
+ if (yych <= '-') goto basic_json_parser_24;
goto basic_json_parser_31;
- }
- if (yych <= 0x1F)
- {
- goto basic_json_parser_33;
- }
- if (yych <= '"')
- {
- goto basic_json_parser_34;
- }
- goto basic_json_parser_36;
-basic_json_parser_33:
- m_cursor = m_marker;
- if (yyaccept == 0)
- {
- goto basic_json_parser_5;
- }
- else
- {
- goto basic_json_parser_14;
- }
-basic_json_parser_34:
- ++m_cursor;
- {
- last_token_type = token_type::value_string;
- break;
- }
-basic_json_parser_36:
- ++m_cursor;
- if (m_limit <= m_cursor)
- {
- yyfill(); // LCOV_EXCL_LINE;
- }
- yych = *m_cursor;
- if (yych <= 'e')
- {
- if (yych <= '/')
- {
- if (yych == '"')
- {
- goto basic_json_parser_31;
- }
- if (yych <= '.')
- {
- goto basic_json_parser_33;
- }
- goto basic_json_parser_31;
- }
- else
- {
- if (yych <= '\\')
- {
- if (yych <= '[')
- {
- goto basic_json_parser_33;
- }
- goto basic_json_parser_31;
- }
- else
- {
- if (yych == 'b')
- {
- goto basic_json_parser_31;
- }
- goto basic_json_parser_33;
- }
- }
- }
- 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;
- }
- else
- {
- 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_43;
- }
- goto basic_json_parser_33;
- }
- }
- }
-basic_json_parser_37:
- yych = *++m_cursor;
- if (yych <= '/')
- {
- goto basic_json_parser_33;
- }
- if (yych <= '9')
- {
- goto basic_json_parser_44;
- }
- goto basic_json_parser_33;
-basic_json_parser_38:
- yych = *++m_cursor;
- if (yych <= ',')
- {
- if (yych == '+')
- {
- goto basic_json_parser_46;
- }
- goto basic_json_parser_33;
- }
- else
- {
- if (yych <= '-')
- {
- goto basic_json_parser_46;
- }
- if (yych <= '/')
- {
- goto basic_json_parser_33;
- }
- if (yych <= '9')
- {
- goto basic_json_parser_47;
- }
- goto basic_json_parser_33;
- }
-basic_json_parser_39:
- yych = *++m_cursor;
- if (yych == 'l')
- {
- goto basic_json_parser_49;
- }
- goto basic_json_parser_33;
-basic_json_parser_40:
- yych = *++m_cursor;
- if (yych == 'l')
- {
- goto basic_json_parser_50;
- }
- goto basic_json_parser_33;
-basic_json_parser_41:
- yych = *++m_cursor;
- if (yych == 'u')
- {
- goto basic_json_parser_51;
- }
- goto basic_json_parser_33;
-basic_json_parser_42:
- yych = *++m_cursor;
- if (yych == 0xBF)
- {
- goto basic_json_parser_52;
- }
- goto basic_json_parser_33;
-basic_json_parser_43:
- ++m_cursor;
- if (m_limit <= m_cursor)
- {
- yyfill(); // LCOV_EXCL_LINE;
- }
- yych = *m_cursor;
- if (yych <= '@')
- {
- if (yych <= '/')
- {
- goto basic_json_parser_33;
- }
- if (yych <= '9')
- {
- goto basic_json_parser_54;
- }
- goto basic_json_parser_33;
- }
- else
- {
- if (yych <= 'F')
- {
- goto basic_json_parser_54;
- }
- if (yych <= '`')
- {
- goto basic_json_parser_33;
- }
- if (yych <= 'f')
- {
- goto basic_json_parser_54;
- }
- goto basic_json_parser_33;
- }
-basic_json_parser_44:
- yyaccept = 1;
- m_marker = ++m_cursor;
- if ((m_limit - m_cursor) < 3)
- {
- yyfill(); // LCOV_EXCL_LINE;
- }
- yych = *m_cursor;
- if (yych <= 'D')
- {
- if (yych <= '/')
- {
- goto basic_json_parser_14;
- }
- if (yych <= '9')
- {
- goto basic_json_parser_44;
- }
- goto basic_json_parser_14;
- }
- else
- {
- if (yych <= 'E')
- {
- goto basic_json_parser_38;
- }
- if (yych == 'e')
- {
- goto basic_json_parser_38;
- }
- goto basic_json_parser_14;
- }
-basic_json_parser_46:
- yych = *++m_cursor;
- if (yych <= '/')
- {
- goto basic_json_parser_33;
- }
- if (yych >= ':')
- {
- goto basic_json_parser_33;
- }
-basic_json_parser_47:
- ++m_cursor;
- if (m_limit <= m_cursor)
- {
- yyfill(); // LCOV_EXCL_LINE;
- }
- yych = *m_cursor;
- if (yych <= '/')
- {
- goto basic_json_parser_14;
- }
- if (yych <= '9')
- {
- goto basic_json_parser_47;
- }
- goto basic_json_parser_14;
-basic_json_parser_49:
- yych = *++m_cursor;
- if (yych == 's')
- {
- goto basic_json_parser_55;
- }
- goto basic_json_parser_33;
-basic_json_parser_50:
- yych = *++m_cursor;
- if (yych == 'l')
- {
- goto basic_json_parser_56;
- }
- goto basic_json_parser_33;
-basic_json_parser_51:
- yych = *++m_cursor;
- if (yych == 'e')
- {
- goto basic_json_parser_58;
- }
- goto basic_json_parser_33;
-basic_json_parser_52:
- ++m_cursor;
- {
- continue;
- }
-basic_json_parser_54:
- ++m_cursor;
- if (m_limit <= m_cursor)
- {
- yyfill(); // LCOV_EXCL_LINE;
- }
- yych = *m_cursor;
- if (yych <= '@')
- {
- if (yych <= '/')
- {
- goto basic_json_parser_33;
- }
- if (yych <= '9')
- {
- goto basic_json_parser_60;
- }
- goto basic_json_parser_33;
- }
- else
- {
- if (yych <= 'F')
- {
- goto basic_json_parser_60;
- }
- if (yych <= '`')
- {
- goto basic_json_parser_33;
- }
- if (yych <= 'f')
- {
- goto basic_json_parser_60;
- }
- goto basic_json_parser_33;
- }
-basic_json_parser_55:
- yych = *++m_cursor;
- if (yych == 'e')
- {
- goto basic_json_parser_61;
- }
- goto basic_json_parser_33;
-basic_json_parser_56:
- ++m_cursor;
- {
- last_token_type = token_type::literal_null;
- break;
- }
-basic_json_parser_58:
- ++m_cursor;
- {
- last_token_type = token_type::literal_true;
- break;
- }
-basic_json_parser_60:
- ++m_cursor;
- if (m_limit <= m_cursor)
- {
- yyfill(); // LCOV_EXCL_LINE;
- }
- yych = *m_cursor;
- if (yych <= '@')
- {
- if (yych <= '/')
- {
- goto basic_json_parser_33;
- }
- if (yych <= '9')
- {
- goto basic_json_parser_63;
- }
- goto basic_json_parser_33;
- }
- else
- {
- if (yych <= 'F')
- {
- goto basic_json_parser_63;
- }
- if (yych <= '`')
- {
- goto basic_json_parser_33;
- }
- if (yych <= 'f')
- {
- goto basic_json_parser_63;
- }
- goto basic_json_parser_33;
- }
-basic_json_parser_61:
- ++m_cursor;
- {
- last_token_type = token_type::literal_false;
- break;
- }
-basic_json_parser_63:
- ++m_cursor;
- if (m_limit <= m_cursor)
- {
- yyfill(); // LCOV_EXCL_LINE;
- }
- yych = *m_cursor;
- if (yych <= '@')
- {
- if (yych <= '/')
- {
- 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;
- }
- if (yych <= 'f')
- {
- goto basic_json_parser_31;
- }
- goto basic_json_parser_33;
+ } else {
+ if (yych <= '/') goto basic_json_parser_6;
+ if (yych <= '0') goto basic_json_parser_25;
+ goto basic_json_parser_27;
}
}
+ }
+ } else {
+ if (yych <= 'n') {
+ if (yych <= '\\') {
+ if (yych <= ':') goto basic_json_parser_19;
+ if (yych == '[') goto basic_json_parser_9;
+ goto basic_json_parser_31;
+ } else {
+ if (yych <= 'e') {
+ if (yych <= ']') goto basic_json_parser_11;
+ goto basic_json_parser_31;
+ } else {
+ if (yych <= 'f') goto basic_json_parser_23;
+ if (yych <= 'm') goto basic_json_parser_31;
+ goto basic_json_parser_21;
+ }
+ }
+ } else {
+ if (yych <= '{') {
+ if (yych == 't') goto basic_json_parser_22;
+ if (yych <= 'z') goto basic_json_parser_31;
+ goto basic_json_parser_13;
+ } else {
+ if (yych <= '}') {
+ if (yych <= '|') goto basic_json_parser_31;
+ goto basic_json_parser_15;
+ } else {
+ if (yych == 0xEF) goto basic_json_parser_8;
+ goto basic_json_parser_31;
+ }
+ }
+ }
+ }
+basic_json_parser_2:
+ ++m_cursor;
+ yych = *m_cursor;
+ goto basic_json_parser_5;
+basic_json_parser_3:
+ { continue; }
+basic_json_parser_4:
+ ++m_cursor;
+ if (m_limit <= m_cursor) yyfill(); // LCOV_EXCL_LINE;
+ yych = *m_cursor;
+basic_json_parser_5:
+ if (yybm[0+yych] & 8) {
+ goto basic_json_parser_4;
+ }
+ goto basic_json_parser_3;
+basic_json_parser_6:
+ yyaccept = 0;
+ yych = *(m_marker = ++m_cursor);
+ if (yych == '*') goto basic_json_parser_70;
+ if (yych == '/') goto basic_json_parser_68;
+basic_json_parser_7:
+ { last_token_type = token_type::parse_error; break; }
+basic_json_parser_8:
+ yyaccept = 0;
+ yych = *(m_marker = ++m_cursor);
+ if (yych == 0xBB) goto basic_json_parser_65;
+ goto basic_json_parser_7;
+basic_json_parser_9:
+ ++m_cursor;
+ { last_token_type = token_type::begin_array; break; }
+basic_json_parser_11:
+ ++m_cursor;
+ { last_token_type = token_type::end_array; break; }
+basic_json_parser_13:
+ ++m_cursor;
+ { last_token_type = token_type::begin_object; break; }
+basic_json_parser_15:
+ ++m_cursor;
+ { last_token_type = token_type::end_object; break; }
+basic_json_parser_17:
+ ++m_cursor;
+ { last_token_type = token_type::value_separator; break; }
+basic_json_parser_19:
+ ++m_cursor;
+ { last_token_type = token_type::name_separator; break; }
+basic_json_parser_21:
+ yyaccept = 0;
+ yych = *(m_marker = ++m_cursor);
+ if (yych == 'u') goto basic_json_parser_61;
+ goto basic_json_parser_7;
+basic_json_parser_22:
+ yyaccept = 0;
+ yych = *(m_marker = ++m_cursor);
+ if (yych == 'r') goto basic_json_parser_57;
+ goto basic_json_parser_7;
+basic_json_parser_23:
+ yyaccept = 0;
+ yych = *(m_marker = ++m_cursor);
+ if (yych == 'a') goto basic_json_parser_52;
+ goto basic_json_parser_7;
+basic_json_parser_24:
+ yych = *++m_cursor;
+ if (yych <= '/') goto basic_json_parser_7;
+ if (yych <= '0') goto basic_json_parser_51;
+ if (yych <= '9') goto basic_json_parser_42;
+ goto basic_json_parser_7;
+basic_json_parser_25:
+ yyaccept = 1;
+ yych = *(m_marker = ++m_cursor);
+ if (yych <= 'D') {
+ if (yych == '.') goto basic_json_parser_44;
+ } else {
+ if (yych <= 'E') goto basic_json_parser_45;
+ if (yych == 'e') goto basic_json_parser_45;
+ }
+basic_json_parser_26:
+ { last_token_type = token_type::value_number; break; }
+basic_json_parser_27:
+ yyaccept = 1;
+ yych = *(m_marker = ++m_cursor);
+ goto basic_json_parser_43;
+basic_json_parser_28:
+ yyaccept = 0;
+ yych = *(m_marker = ++m_cursor);
+ if (yych <= 0x1F) goto basic_json_parser_7;
+ goto basic_json_parser_33;
+basic_json_parser_29:
+ ++m_cursor;
+ { last_token_type = token_type::end_of_input; break; }
+basic_json_parser_31:
+ yych = *++m_cursor;
+ goto basic_json_parser_7;
+basic_json_parser_32:
+ ++m_cursor;
+ if (m_limit <= m_cursor) yyfill(); // LCOV_EXCL_LINE;
+ yych = *m_cursor;
+basic_json_parser_33:
+ if (yybm[0+yych] & 16) {
+ goto basic_json_parser_32;
+ }
+ if (yych <= 0x1F) goto basic_json_parser_34;
+ if (yych <= '"') goto basic_json_parser_36;
+ goto basic_json_parser_35;
+basic_json_parser_34:
+ m_cursor = m_marker;
+ if (yyaccept == 0) {
+ goto basic_json_parser_7;
+ } else {
+ goto basic_json_parser_26;
+ }
+basic_json_parser_35:
+ ++m_cursor;
+ if (m_limit <= m_cursor) yyfill(); // LCOV_EXCL_LINE;
+ yych = *m_cursor;
+ if (yych <= 'e') {
+ if (yych <= '/') {
+ if (yych == '"') goto basic_json_parser_32;
+ if (yych <= '.') goto basic_json_parser_34;
+ goto basic_json_parser_32;
+ } else {
+ if (yych <= '\\') {
+ if (yych <= '[') goto basic_json_parser_34;
+ goto basic_json_parser_32;
+ } else {
+ if (yych == 'b') goto basic_json_parser_32;
+ goto basic_json_parser_34;
+ }
+ }
+ } else {
+ if (yych <= 'q') {
+ if (yych <= 'f') goto basic_json_parser_32;
+ if (yych == 'n') goto basic_json_parser_32;
+ goto basic_json_parser_34;
+ } else {
+ if (yych <= 's') {
+ if (yych <= 'r') goto basic_json_parser_32;
+ goto basic_json_parser_34;
+ } else {
+ if (yych <= 't') goto basic_json_parser_32;
+ if (yych <= 'u') goto basic_json_parser_38;
+ goto basic_json_parser_34;
+ }
+ }
+ }
+basic_json_parser_36:
+ ++m_cursor;
+ { last_token_type = token_type::value_string; break; }
+basic_json_parser_38:
+ ++m_cursor;
+ if (m_limit <= m_cursor) yyfill(); // LCOV_EXCL_LINE;
+ yych = *m_cursor;
+ if (yych <= '@') {
+ if (yych <= '/') goto basic_json_parser_34;
+ if (yych >= ':') goto basic_json_parser_34;
+ } else {
+ if (yych <= 'F') goto basic_json_parser_39;
+ if (yych <= '`') goto basic_json_parser_34;
+ if (yych >= 'g') goto basic_json_parser_34;
+ }
+basic_json_parser_39:
+ ++m_cursor;
+ if (m_limit <= m_cursor) yyfill(); // LCOV_EXCL_LINE;
+ yych = *m_cursor;
+ if (yych <= '@') {
+ if (yych <= '/') goto basic_json_parser_34;
+ if (yych >= ':') goto basic_json_parser_34;
+ } else {
+ if (yych <= 'F') goto basic_json_parser_40;
+ if (yych <= '`') goto basic_json_parser_34;
+ if (yych >= 'g') goto basic_json_parser_34;
+ }
+basic_json_parser_40:
+ ++m_cursor;
+ if (m_limit <= m_cursor) yyfill(); // LCOV_EXCL_LINE;
+ yych = *m_cursor;
+ if (yych <= '@') {
+ if (yych <= '/') goto basic_json_parser_34;
+ if (yych >= ':') goto basic_json_parser_34;
+ } else {
+ if (yych <= 'F') goto basic_json_parser_41;
+ if (yych <= '`') goto basic_json_parser_34;
+ if (yych >= 'g') goto basic_json_parser_34;
+ }
+basic_json_parser_41:
+ ++m_cursor;
+ if (m_limit <= m_cursor) yyfill(); // LCOV_EXCL_LINE;
+ yych = *m_cursor;
+ if (yych <= '@') {
+ if (yych <= '/') goto basic_json_parser_34;
+ if (yych <= '9') goto basic_json_parser_32;
+ goto basic_json_parser_34;
+ } else {
+ if (yych <= 'F') goto basic_json_parser_32;
+ if (yych <= '`') goto basic_json_parser_34;
+ if (yych <= 'f') goto basic_json_parser_32;
+ goto basic_json_parser_34;
+ }
+basic_json_parser_42:
+ yyaccept = 1;
+ m_marker = ++m_cursor;
+ if ((m_limit - m_cursor) < 3) yyfill(); // LCOV_EXCL_LINE;
+ yych = *m_cursor;
+basic_json_parser_43:
+ if (yybm[0+yych] & 32) {
+ goto basic_json_parser_42;
+ }
+ if (yych <= 'D') {
+ if (yych != '.') goto basic_json_parser_26;
+ } else {
+ if (yych <= 'E') goto basic_json_parser_45;
+ if (yych == 'e') goto basic_json_parser_45;
+ goto basic_json_parser_26;
+ }
+basic_json_parser_44:
+ yych = *++m_cursor;
+ if (yych <= '/') goto basic_json_parser_34;
+ if (yych <= '9') goto basic_json_parser_49;
+ goto basic_json_parser_34;
+basic_json_parser_45:
+ yych = *++m_cursor;
+ if (yych <= ',') {
+ if (yych != '+') goto basic_json_parser_34;
+ } else {
+ if (yych <= '-') goto basic_json_parser_46;
+ if (yych <= '/') goto basic_json_parser_34;
+ if (yych <= '9') goto basic_json_parser_47;
+ goto basic_json_parser_34;
+ }
+basic_json_parser_46:
+ yych = *++m_cursor;
+ if (yych <= '/') goto basic_json_parser_34;
+ if (yych >= ':') goto basic_json_parser_34;
+basic_json_parser_47:
+ ++m_cursor;
+ if (m_limit <= m_cursor) yyfill(); // LCOV_EXCL_LINE;
+ yych = *m_cursor;
+ if (yych <= '/') goto basic_json_parser_26;
+ if (yych <= '9') goto basic_json_parser_47;
+ goto basic_json_parser_26;
+basic_json_parser_49:
+ yyaccept = 1;
+ m_marker = ++m_cursor;
+ if ((m_limit - m_cursor) < 3) yyfill(); // LCOV_EXCL_LINE;
+ yych = *m_cursor;
+ if (yych <= 'D') {
+ if (yych <= '/') goto basic_json_parser_26;
+ if (yych <= '9') goto basic_json_parser_49;
+ goto basic_json_parser_26;
+ } else {
+ if (yych <= 'E') goto basic_json_parser_45;
+ if (yych == 'e') goto basic_json_parser_45;
+ goto basic_json_parser_26;
+ }
+basic_json_parser_51:
+ yyaccept = 1;
+ yych = *(m_marker = ++m_cursor);
+ if (yych <= 'D') {
+ if (yych == '.') goto basic_json_parser_44;
+ goto basic_json_parser_26;
+ } else {
+ if (yych <= 'E') goto basic_json_parser_45;
+ if (yych == 'e') goto basic_json_parser_45;
+ goto basic_json_parser_26;
+ }
+basic_json_parser_52:
+ yych = *++m_cursor;
+ if (yych != 'l') goto basic_json_parser_34;
+ yych = *++m_cursor;
+ if (yych != 's') goto basic_json_parser_34;
+ yych = *++m_cursor;
+ if (yych != 'e') goto basic_json_parser_34;
+ ++m_cursor;
+ { last_token_type = token_type::literal_false; break; }
+basic_json_parser_57:
+ yych = *++m_cursor;
+ if (yych != 'u') goto basic_json_parser_34;
+ yych = *++m_cursor;
+ if (yych != 'e') goto basic_json_parser_34;
+ ++m_cursor;
+ { last_token_type = token_type::literal_true; break; }
+basic_json_parser_61:
+ yych = *++m_cursor;
+ if (yych != 'l') goto basic_json_parser_34;
+ yych = *++m_cursor;
+ if (yych != 'l') goto basic_json_parser_34;
+ ++m_cursor;
+ { last_token_type = token_type::literal_null; break; }
+basic_json_parser_65:
+ yych = *++m_cursor;
+ if (yych != 0xBF) goto basic_json_parser_34;
+ ++m_cursor;
+ { continue; }
+basic_json_parser_68:
+ ++m_cursor;
+ if (m_limit <= m_cursor) yyfill(); // LCOV_EXCL_LINE;
+ yych = *m_cursor;
+ if (yybm[0+yych] & 64) {
+ goto basic_json_parser_68;
+ }
+ goto basic_json_parser_73;
+basic_json_parser_70:
+ ++m_cursor;
+ if (m_limit <= m_cursor) yyfill(); // LCOV_EXCL_LINE;
+ yych = *m_cursor;
+ if (yybm[0+yych] & 128) {
+ goto basic_json_parser_70;
+ }
+ ++m_cursor;
+ if (m_limit <= m_cursor) yyfill(); // LCOV_EXCL_LINE;
+ yych = *m_cursor;
+ if (yych != '/') goto basic_json_parser_70;
+basic_json_parser_73:
+ ++m_cursor;
+ yych = *m_cursor;
+ goto basic_json_parser_3;
+ }
}
diff --git a/src/json.hpp.re2c b/src/json.hpp.re2c
index ffa20f3..f5347d6 100644
--- a/src/json.hpp.re2c
+++ b/src/json.hpp.re2c
@@ -7703,9 +7703,13 @@
re2c:indent:string = " ";
re2c:indent:top = 1;
re2c:labelprefix = "basic_json_parser_";
+
+ // ignore js comments as whitespace
+ c_comment = "/*" ([^*] | ("*" [^/]))* "*""/";
+ cxx_comment = "//" [^\n]* "\n";
// ignore whitespace
- ws = [ \t\n\r]+;
+ ws = [ \t\n\r]+ | c_comment | cxx_comment;
ws { continue; }
// ignore byte-order-mark
diff --git a/test/Makefile b/test/Makefile
index ead1f07..d4cdb74 100644
--- a/test/Makefile
+++ b/test/Makefile
@@ -14,6 +14,7 @@
src/unit-class_iterator.cpp \
src/unit-class_lexer.cpp \
src/unit-class_parser.cpp \
+ src/unit-comments.cpp \
src/unit-comparison.cpp \
src/unit-concepts.cpp \
src/unit-constructor1.cpp \
diff --git a/test/src/unit-comments.cpp b/test/src/unit-comments.cpp
new file mode 100644
index 0000000..990caf7
--- /dev/null
+++ b/test/src/unit-comments.cpp
@@ -0,0 +1,25 @@
+// Copyright 2016 The Fuchsia Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "catch.hpp"
+
+#define private public
+#include "json.hpp"
+
+using nlohmann::json;
+
+TEST_CASE("JS comments in JSON files")
+{
+ SECTION("single-line")
+ {
+ CHECK("{} // foo\n"_json == json({}));
+ CHECK("[1, 2, // 3, \n 4]"_json == json({1,2,4}));
+ }
+
+ SECTION("multi-line")
+ {
+ CHECK("{} /* foo */"_json == json({}));
+ CHECK("[1, 2, /* 3, */ 4]"_json == json({1,2,4}));
+ }
+}