Ticket #9893: boost.dref-as-inttype.warnings.patch.1

File boost.dref-as-inttype.warnings.patch.1, 2.7 KB (added by anonymous, 9 years ago)
Line 
1diff -ur boost.org/boost/property_tree/detail/json_parser_write.hpp boost/boost/property_tree/detail/json_parser_write.hpp
2--- boost.org/boost/property_tree/detail/json_parser_write.hpp 2014-04-20 13:27:59.126224368 +0300
3+++ boost/boost/property_tree/detail/json_parser_write.hpp 2014-04-20 13:32:35.206229552 +0300
4@@ -29,25 +29,26 @@
5 typename std::basic_string<Ch>::const_iterator e = s.end();
6 while (b != e)
7 {
8+ typename std::basic_string<Ch>::traits_type::int_type bDref = *b;
9 // This assumes an ASCII superset. But so does everything in PTree.
10 // We escape everything outside ASCII, because this code can't
11 // handle high unicode characters.
12- if (*b == 0x20 || *b == 0x21 || (*b >= 0x23 && *b <= 0x2E) ||
13- (*b >= 0x30 && *b <= 0x5B) || (*b >= 0x5D && *b <= 0xFF))
14- result += *b;
15- else if (*b == Ch('\b')) result += Ch('\\'), result += Ch('b');
16- else if (*b == Ch('\f')) result += Ch('\\'), result += Ch('f');
17- else if (*b == Ch('\n')) result += Ch('\\'), result += Ch('n');
18- else if (*b == Ch('\r')) result += Ch('\\'), result += Ch('r');
19- else if (*b == Ch('/')) result += Ch('\\'), result += Ch('/');
20- else if (*b == Ch('"')) result += Ch('\\'), result += Ch('"');
21- else if (*b == Ch('\\')) result += Ch('\\'), result += Ch('\\');
22+ if (bDref == 0x20 || bDref == 0x21 || (bDref >= 0x23 && bDref <= 0x2E) ||
23+ (bDref >= 0x30 && bDref <= 0x5B) || (bDref >= 0x5D && bDref <= 0xFF))
24+ result += bDref;
25+ else if (bDref == Ch('\b')) result += Ch('\\'), result += Ch('b');
26+ else if (bDref == Ch('\f')) result += Ch('\\'), result += Ch('f');
27+ else if (bDref == Ch('\n')) result += Ch('\\'), result += Ch('n');
28+ else if (bDref == Ch('\r')) result += Ch('\\'), result += Ch('r');
29+ else if (bDref == Ch('/')) result += Ch('\\'), result += Ch('/');
30+ else if (bDref == Ch('"')) result += Ch('\\'), result += Ch('"');
31+ else if (bDref == Ch('\\')) result += Ch('\\'), result += Ch('\\');
32 else
33 {
34 const char *hexdigits = "0123456789ABCDEF";
35 typedef typename make_unsigned<Ch>::type UCh;
36 unsigned long u = (std::min)(static_cast<unsigned long>(
37- static_cast<UCh>(*b)),
38+ static_cast<UCh>(bDref)),
39 0xFFFFul);
40 int d1 = u / 4096; u -= d1 * 4096;
41 int d2 = u / 256; u -= d2 * 256;