@@ -955,7 +955,7 @@ class GenericReader {
955
955
if (c == ' \0 ' )
956
956
RAPIDJSON_PARSE_ERROR (kParseErrorStringMissQuotationMark , is.Tell ());
957
957
else
958
- RAPIDJSON_PARSE_ERROR (kParseErrorStringEscapeInvalid , is.Tell ());
958
+ RAPIDJSON_PARSE_ERROR (kParseErrorStringInvalidEncoding , is.Tell ());
959
959
}
960
960
else {
961
961
size_t offset = is.Tell ();
@@ -990,7 +990,7 @@ class GenericReader {
990
990
// The rest of string using SIMD
991
991
static const char dquote[16 ] = { ' \" ' , ' \" ' , ' \" ' , ' \" ' , ' \" ' , ' \" ' , ' \" ' , ' \" ' , ' \" ' , ' \" ' , ' \" ' , ' \" ' , ' \" ' , ' \" ' , ' \" ' , ' \" ' };
992
992
static const char bslash[16 ] = { ' \\ ' , ' \\ ' , ' \\ ' , ' \\ ' , ' \\ ' , ' \\ ' , ' \\ ' , ' \\ ' , ' \\ ' , ' \\ ' , ' \\ ' , ' \\ ' , ' \\ ' , ' \\ ' , ' \\ ' , ' \\ ' };
993
- static const char space[16 ] = { 0x19 , 0x19 , 0x19 , 0x19 , 0x19 , 0x19 , 0x19 , 0x19 , 0x19 , 0x19 , 0x19 , 0x19 , 0x19 , 0x19 , 0x19 , 0x19 };
993
+ static const char space[16 ] = { 0x1F , 0x1F , 0x1F , 0x1F , 0x1F , 0x1F , 0x1F , 0x1F , 0x1F , 0x1F , 0x1F , 0x1F , 0x1F , 0x1F , 0x1F , 0x1F };
994
994
const __m128i dq = _mm_loadu_si128 (reinterpret_cast <const __m128i *>(&dquote[0 ]));
995
995
const __m128i bs = _mm_loadu_si128 (reinterpret_cast <const __m128i *>(&bslash[0 ]));
996
996
const __m128i sp = _mm_loadu_si128 (reinterpret_cast <const __m128i *>(&space[0 ]));
@@ -999,7 +999,7 @@ class GenericReader {
999
999
const __m128i s = _mm_load_si128 (reinterpret_cast <const __m128i *>(p));
1000
1000
const __m128i t1 = _mm_cmpeq_epi8 (s, dq);
1001
1001
const __m128i t2 = _mm_cmpeq_epi8 (s, bs);
1002
- const __m128i t3 = _mm_cmpeq_epi8 (_mm_max_epu8 (s, sp), sp); // s < 0x20 <=> max(s, 0x19 ) == 0x19
1002
+ const __m128i t3 = _mm_cmpeq_epi8 (_mm_max_epu8 (s, sp), sp); // s < 0x20 <=> max(s, 0x1F ) == 0x1F
1003
1003
const __m128i x = _mm_or_si128 (_mm_or_si128 (t1, t2), t3);
1004
1004
unsigned short r = static_cast <unsigned short >(_mm_movemask_epi8 (x));
1005
1005
if (RAPIDJSON_UNLIKELY (r != 0 )) { // some of characters is escaped
@@ -1053,7 +1053,7 @@ class GenericReader {
1053
1053
// The rest of string using SIMD
1054
1054
static const char dquote[16 ] = { ' \" ' , ' \" ' , ' \" ' , ' \" ' , ' \" ' , ' \" ' , ' \" ' , ' \" ' , ' \" ' , ' \" ' , ' \" ' , ' \" ' , ' \" ' , ' \" ' , ' \" ' , ' \" ' };
1055
1055
static const char bslash[16 ] = { ' \\ ' , ' \\ ' , ' \\ ' , ' \\ ' , ' \\ ' , ' \\ ' , ' \\ ' , ' \\ ' , ' \\ ' , ' \\ ' , ' \\ ' , ' \\ ' , ' \\ ' , ' \\ ' , ' \\ ' , ' \\ ' };
1056
- static const char space[16 ] = { 0x19 , 0x19 , 0x19 , 0x19 , 0x19 , 0x19 , 0x19 , 0x19 , 0x19 , 0x19 , 0x19 , 0x19 , 0x19 , 0x19 , 0x19 , 0x19 };
1056
+ static const char space[16 ] = { 0x1F , 0x1F , 0x1F , 0x1F , 0x1F , 0x1F , 0x1F , 0x1F , 0x1F , 0x1F , 0x1F , 0x1F , 0x1F , 0x1F , 0x1F , 0x1F };
1057
1057
const __m128i dq = _mm_loadu_si128 (reinterpret_cast <const __m128i *>(&dquote[0 ]));
1058
1058
const __m128i bs = _mm_loadu_si128 (reinterpret_cast <const __m128i *>(&bslash[0 ]));
1059
1059
const __m128i sp = _mm_loadu_si128 (reinterpret_cast <const __m128i *>(&space[0 ]));
@@ -1062,7 +1062,7 @@ class GenericReader {
1062
1062
const __m128i s = _mm_load_si128 (reinterpret_cast <const __m128i *>(p));
1063
1063
const __m128i t1 = _mm_cmpeq_epi8 (s, dq);
1064
1064
const __m128i t2 = _mm_cmpeq_epi8 (s, bs);
1065
- const __m128i t3 = _mm_cmpeq_epi8 (_mm_max_epu8 (s, sp), sp); // s < 0x20 <=> max(s, 0x19 ) == 0x19
1065
+ const __m128i t3 = _mm_cmpeq_epi8 (_mm_max_epu8 (s, sp), sp); // s < 0x20 <=> max(s, 0x1F ) == 0x1F
1066
1066
const __m128i x = _mm_or_si128 (_mm_or_si128 (t1, t2), t3);
1067
1067
unsigned short r = static_cast <unsigned short >(_mm_movemask_epi8 (x));
1068
1068
if (RAPIDJSON_UNLIKELY (r != 0 )) { // some of characters is escaped
@@ -1101,7 +1101,7 @@ class GenericReader {
1101
1101
// The rest of string using SIMD
1102
1102
static const char dquote[16 ] = { ' \" ' , ' \" ' , ' \" ' , ' \" ' , ' \" ' , ' \" ' , ' \" ' , ' \" ' , ' \" ' , ' \" ' , ' \" ' , ' \" ' , ' \" ' , ' \" ' , ' \" ' , ' \" ' };
1103
1103
static const char bslash[16 ] = { ' \\ ' , ' \\ ' , ' \\ ' , ' \\ ' , ' \\ ' , ' \\ ' , ' \\ ' , ' \\ ' , ' \\ ' , ' \\ ' , ' \\ ' , ' \\ ' , ' \\ ' , ' \\ ' , ' \\ ' , ' \\ ' };
1104
- static const char space[16 ] = { 0x19 , 0x19 , 0x19 , 0x19 , 0x19 , 0x19 , 0x19 , 0x19 , 0x19 , 0x19 , 0x19 , 0x19 , 0x19 , 0x19 , 0x19 , 0x19 };
1104
+ static const char space[16 ] = { 0x1F , 0x1F , 0x1F , 0x1F , 0x1F , 0x1F , 0x1F , 0x1F , 0x1F , 0x1F , 0x1F , 0x1F , 0x1F , 0x1F , 0x1F , 0x1F };
1105
1105
const __m128i dq = _mm_loadu_si128 (reinterpret_cast <const __m128i *>(&dquote[0 ]));
1106
1106
const __m128i bs = _mm_loadu_si128 (reinterpret_cast <const __m128i *>(&bslash[0 ]));
1107
1107
const __m128i sp = _mm_loadu_si128 (reinterpret_cast <const __m128i *>(&space[0 ]));
@@ -1110,7 +1110,7 @@ class GenericReader {
1110
1110
const __m128i s = _mm_load_si128 (reinterpret_cast <const __m128i *>(p));
1111
1111
const __m128i t1 = _mm_cmpeq_epi8 (s, dq);
1112
1112
const __m128i t2 = _mm_cmpeq_epi8 (s, bs);
1113
- const __m128i t3 = _mm_cmpeq_epi8 (_mm_max_epu8 (s, sp), sp); // s < 0x20 <=> max(s, 0x19 ) == 0x19
1113
+ const __m128i t3 = _mm_cmpeq_epi8 (_mm_max_epu8 (s, sp), sp); // s < 0x20 <=> max(s, 0x1F ) == 0x1F
1114
1114
const __m128i x = _mm_or_si128 (_mm_or_si128 (t1, t2), t3);
1115
1115
unsigned short r = static_cast <unsigned short >(_mm_movemask_epi8 (x));
1116
1116
if (RAPIDJSON_UNLIKELY (r != 0 )) { // some of characters is escaped
0 commit comments