wuffs gen -version=0.3.0-alpha.12
diff --git a/release/c/wuffs-v0.3.c b/release/c/wuffs-v0.3.c
index 07c5e1a..d103bae 100644
--- a/release/c/wuffs-v0.3.c
+++ b/release/c/wuffs-v0.3.c
@@ -65,15 +65,15 @@
 // each major.minor branch, the commit count should increase monotonically.
 //
 // WUFFS_VERSION was overridden by "wuffs gen -version" based on revision
-// ca1113620b228a7bc7ca86364d5fdfc848361e95 committed on 2020-08-17.
+// a06a89c080e46db183fb65268e5cbef247c2b85a committed on 2020-08-30.
 #define WUFFS_VERSION 0x000030000
 #define WUFFS_VERSION_MAJOR 0
 #define WUFFS_VERSION_MINOR 3
 #define WUFFS_VERSION_PATCH 0
-#define WUFFS_VERSION_PRE_RELEASE_LABEL "alpha.11"
-#define WUFFS_VERSION_BUILD_METADATA_COMMIT_COUNT 2663
-#define WUFFS_VERSION_BUILD_METADATA_COMMIT_DATE 20200817
-#define WUFFS_VERSION_STRING "0.3.0-alpha.11+2663.20200817"
+#define WUFFS_VERSION_PRE_RELEASE_LABEL "alpha.12"
+#define WUFFS_VERSION_BUILD_METADATA_COMMIT_COUNT 2695
+#define WUFFS_VERSION_BUILD_METADATA_COMMIT_DATE 20200830
+#define WUFFS_VERSION_STRING "0.3.0-alpha.12+2695.20200830"
 
 // Define WUFFS_CONFIG__STATIC_FUNCTIONS to make all of Wuffs' functions have
 // static storage. The motivation is discussed in the "ALLOW STATIC
@@ -1942,7 +1942,7 @@
 typedef struct {
   size_t wi;     // Write index. Invariant: wi <= len.
   size_t ri;     // Read  index. Invariant: ri <= wi.
-  uint64_t pos;  // Position of the buffer start relative to the stream start.
+  uint64_t pos;  // Buffer position (relative to the start of stream).
   bool closed;   // No further writes are expected.
 } wuffs_base__io_buffer_meta;
 
@@ -1957,14 +1957,19 @@
 #ifdef __cplusplus
   inline bool is_valid() const;
   inline void compact();
-  inline uint64_t reader_io_position() const;
   inline size_t reader_length() const;
   inline uint8_t* reader_pointer() const;
+  inline uint64_t reader_position() const;
   inline wuffs_base__slice_u8 reader_slice() const;
-  inline uint64_t writer_io_position() const;
   inline size_t writer_length() const;
   inline uint8_t* writer_pointer() const;
+  inline uint64_t writer_position() const;
   inline wuffs_base__slice_u8 writer_slice() const;
+
+  // Deprecated: use reader_position.
+  inline uint64_t reader_io_position() const;
+  // Deprecated: use writer_position.
+  inline uint64_t writer_io_position() const;
 #endif  // __cplusplus
 
 } wuffs_base__io_buffer;
@@ -2089,6 +2094,7 @@
   buf->meta.ri = 0;
 }
 
+// Deprecated. Use wuffs_base__io_buffer__reader_position.
 static inline uint64_t  //
 wuffs_base__io_buffer__reader_io_position(const wuffs_base__io_buffer* buf) {
   return buf ? wuffs_base__u64__sat_add(buf->meta.pos, buf->meta.ri) : 0;
@@ -2104,6 +2110,11 @@
   return buf ? (buf->data.ptr + buf->meta.ri) : NULL;
 }
 
+static inline uint64_t  //
+wuffs_base__io_buffer__reader_position(const wuffs_base__io_buffer* buf) {
+  return buf ? wuffs_base__u64__sat_add(buf->meta.pos, buf->meta.ri) : 0;
+}
+
 static inline wuffs_base__slice_u8  //
 wuffs_base__io_buffer__reader_slice(const wuffs_base__io_buffer* buf) {
   return buf ? wuffs_base__make_slice_u8(buf->data.ptr + buf->meta.ri,
@@ -2111,6 +2122,7 @@
              : wuffs_base__empty_slice_u8();
 }
 
+// Deprecated. Use wuffs_base__io_buffer__writer_position.
 static inline uint64_t  //
 wuffs_base__io_buffer__writer_io_position(const wuffs_base__io_buffer* buf) {
   return buf ? wuffs_base__u64__sat_add(buf->meta.pos, buf->meta.wi) : 0;
@@ -2126,6 +2138,11 @@
   return buf ? (buf->data.ptr + buf->meta.wi) : NULL;
 }
 
+static inline uint64_t  //
+wuffs_base__io_buffer__writer_position(const wuffs_base__io_buffer* buf) {
+  return buf ? wuffs_base__u64__sat_add(buf->meta.pos, buf->meta.wi) : 0;
+}
+
 static inline wuffs_base__slice_u8  //
 wuffs_base__io_buffer__writer_slice(const wuffs_base__io_buffer* buf) {
   return buf ? wuffs_base__make_slice_u8(buf->data.ptr + buf->meta.wi,
@@ -2160,6 +2177,11 @@
   return wuffs_base__io_buffer__reader_pointer(this);
 }
 
+inline uint64_t  //
+wuffs_base__io_buffer::reader_position() const {
+  return wuffs_base__io_buffer__reader_position(this);
+}
+
 inline wuffs_base__slice_u8  //
 wuffs_base__io_buffer::reader_slice() const {
   return wuffs_base__io_buffer__reader_slice(this);
@@ -2180,6 +2202,11 @@
   return wuffs_base__io_buffer__writer_pointer(this);
 }
 
+inline uint64_t  //
+wuffs_base__io_buffer::writer_position() const {
+  return wuffs_base__io_buffer__writer_position(this);
+}
+
 inline wuffs_base__slice_u8  //
 wuffs_base__io_buffer::writer_slice() const {
   return wuffs_base__io_buffer__writer_slice(this);
@@ -2244,8 +2271,12 @@
 
 // --------
 
-#define WUFFS_BASE__TOKEN__VBD__FILLER__COMMENT_LINE 0x00001
+#define WUFFS_BASE__TOKEN__VBD__FILLER__PUNCTUATION 0x00001
 #define WUFFS_BASE__TOKEN__VBD__FILLER__COMMENT_BLOCK 0x00002
+#define WUFFS_BASE__TOKEN__VBD__FILLER__COMMENT_LINE 0x00004
+
+// COMMENT_ANY is a bit-wise or of COMMENT_BLOCK AND COMMENT_LINE.
+#define WUFFS_BASE__TOKEN__VBD__FILLER__COMMENT_ANY 0x00006
 
 // --------
 
@@ -7576,6 +7607,7 @@
 extern const char wuffs_json__error__bad_utf_8[];
 extern const char wuffs_json__error__bad_backslash_escape[];
 extern const char wuffs_json__error__bad_input[];
+extern const char wuffs_json__error__bad_new_line_in_a_string[];
 extern const char wuffs_json__error__bad_quirk_combination[];
 extern const char wuffs_json__error__unsupported_number_length[];
 extern const char wuffs_json__error__unsupported_recursion_depth[];
@@ -7606,8 +7638,6 @@
 
 #define WUFFS_JSON__QUIRK_ALLOW_BACKSLASH_V 1225364487
 
-#define WUFFS_JSON__QUIRK_ALLOW_BACKSLASH_X_AS_BYTES 1225364488
-
 #define WUFFS_JSON__QUIRK_ALLOW_BACKSLASH_X_AS_CODE_POINTS 1225364489
 
 #define WUFFS_JSON__QUIRK_ALLOW_BACKSLASH_ZERO 1225364490
@@ -7722,7 +7752,6 @@
     bool f_allow_leading_ars;
     bool f_allow_leading_ubom;
     bool f_end_of_data;
-    uint32_t f_string_value_minor;
 
     uint32_t p_decode_tokens[1];
     uint32_t p_decode_leading[1];
@@ -8561,21 +8590,10 @@
   // strings, the Callbacks implementation is responsible for tracking map keys
   // versus other values.
 
-  // The JSON file format as specified deals only with (UTF-8) text strings,
-  // but an unofficial extension allows "ijk\x89m" escapes within those
-  // strings. DecodeJsonCallbacks' AppendByteString will not be called unless
-  // WUFFS_JSON__QUIRK_ALLOW_BACKSLASH_X_AS_BYTES is passed to DecodeJson. If
-  // it is passed, AppendTextString will not be called and all byte strings are
-  // potentially invalid UTF-8. It is up to the AppendByteString implementation
-  // whether to test the std::string for UTF-8 validity.
-  //
-  // The default AppendByteString implementation returns an error message.
-
   virtual std::string AppendNull() = 0;
   virtual std::string AppendBool(bool val) = 0;
   virtual std::string AppendF64(double val) = 0;
   virtual std::string AppendI64(int64_t val) = 0;
-  virtual std::string AppendByteString(std::string&& val);
   virtual std::string AppendTextString(std::string&& val) = 0;
 
   // Push and Pop are called for container nodes: JSON arrays (lists) and JSON
@@ -17007,12 +17025,13 @@
               goto label__goto_parsed_a_leaf_value__break;
             }
           } else if (v_c_major == 2) {
-            if (v_c_minor == 0) {
-              *iop_a_dst++ = wuffs_base__make_token(
-                  (((uint64_t)(4194560)) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
-                  (((uint64_t)(1)) << WUFFS_BASE__TOKEN__LENGTH__SHIFT));
-              goto label__goto_parsed_a_leaf_value__break;
-            } else if (v_c_minor < 28) {
+            if (v_c_minor < 28) {
+              if (v_string_length == 0) {
+                *iop_a_dst++ = wuffs_base__make_token(
+                    (((uint64_t)(4194560)) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
+                    (((uint64_t)(((uint32_t)(WUFFS_CBOR__TOKEN_LENGTHS[v_c_minor])))) << WUFFS_BASE__TOKEN__LENGTH__SHIFT));
+                goto label__goto_parsed_a_leaf_value__break;
+              }
               *iop_a_dst++ = wuffs_base__make_token(
                   (((uint64_t)(4194560)) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
                   (((uint64_t)(1)) << WUFFS_BASE__TOKEN__CONTINUED__SHIFT) |
@@ -17072,12 +17091,13 @@
               goto label__goto_parsed_a_leaf_value__break;
             }
           } else if (v_c_major == 3) {
-            if (v_c_minor == 0) {
-              *iop_a_dst++ = wuffs_base__make_token(
-                  (((uint64_t)(4194579)) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
-                  (((uint64_t)(1)) << WUFFS_BASE__TOKEN__LENGTH__SHIFT));
-              goto label__goto_parsed_a_leaf_value__break;
-            } else if (v_c_minor < 28) {
+            if (v_c_minor < 28) {
+              if (v_string_length == 0) {
+                *iop_a_dst++ = wuffs_base__make_token(
+                    (((uint64_t)(4194579)) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
+                    (((uint64_t)(((uint32_t)(WUFFS_CBOR__TOKEN_LENGTHS[v_c_minor])))) << WUFFS_BASE__TOKEN__LENGTH__SHIFT));
+                goto label__goto_parsed_a_leaf_value__break;
+              }
               *iop_a_dst++ = wuffs_base__make_token(
                   (((uint64_t)(4194579)) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
                   (((uint64_t)(1)) << WUFFS_BASE__TOKEN__CONTINUED__SHIFT) |
@@ -17140,6 +17160,11 @@
             if (WUFFS_CBOR__TOKEN_LENGTHS[v_c_minor] == 0) {
               goto label__goto_fail__break;
             } else if (v_depth >= 1024) {
+              v_token_length = ((uint32_t)(WUFFS_CBOR__TOKEN_LENGTHS[v_c_minor]));
+              while ((v_token_length > 0) && (iop_a_src > io1_a_src)) {
+                (iop_a_src--, wuffs_base__make_empty_struct());
+                v_token_length -= 1;
+              }
               status = wuffs_base__make_status(wuffs_cbor__error__unsupported_recursion_depth);
               goto exit;
             }
@@ -17176,6 +17201,11 @@
             if (WUFFS_CBOR__TOKEN_LENGTHS[v_c_minor] == 0) {
               goto label__goto_fail__break;
             } else if (v_depth >= 1024) {
+              v_token_length = ((uint32_t)(WUFFS_CBOR__TOKEN_LENGTHS[v_c_minor]));
+              while ((v_token_length > 0) && (iop_a_src > io1_a_src)) {
+                (iop_a_src--, wuffs_base__make_empty_struct());
+                v_token_length -= 1;
+              }
               status = wuffs_base__make_status(wuffs_cbor__error__unsupported_recursion_depth);
               goto exit;
             }
@@ -25471,6 +25501,7 @@
 const char wuffs_json__error__bad_utf_8[] = "#json: bad UTF-8";
 const char wuffs_json__error__bad_backslash_escape[] = "#json: bad backslash-escape";
 const char wuffs_json__error__bad_input[] = "#json: bad input";
+const char wuffs_json__error__bad_new_line_in_a_string[] = "#json: bad new-line in a string";
 const char wuffs_json__error__bad_quirk_combination[] = "#json: bad quirk combination";
 const char wuffs_json__error__unsupported_number_length[] = "#json: unsupported number length";
 const char wuffs_json__error__unsupported_recursion_depth[] = "#json: unsupported recursion depth";
@@ -25923,7 +25954,6 @@
   uint8_t v_char = 0;
   uint8_t v_class = 0;
   uint32_t v_multi_byte_utf8 = 0;
-  uint32_t v_backslash_x_length = 0;
   uint8_t v_backslash_x_ok = 0;
   uint8_t v_backslash_x_value = 0;
   uint32_t v_backslash_x_string = 0;
@@ -25993,15 +26023,6 @@
         goto suspend;
       }
     }
-    if (self->private_impl.f_quirks[8]) {
-      if (self->private_impl.f_quirks[9]) {
-        status = wuffs_base__make_status(wuffs_json__error__bad_quirk_combination);
-        goto exit;
-      }
-      self->private_impl.f_string_value_minor = 4194304;
-    } else {
-      self->private_impl.f_string_value_minor = 4194306;
-    }
     v_expect = 7858;
     label__outer__continue:;
     while (true) {
@@ -26062,10 +26083,7 @@
         }
         if (v_class == 1) {
           *iop_a_dst++ = wuffs_base__make_token(
-              (((uint64_t)((self->private_impl.f_string_value_minor |
-              1 |
-              16 |
-              256))) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
+              (((uint64_t)(4194579)) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
               (((uint64_t)(1)) << WUFFS_BASE__TOKEN__CONTINUED__SHIFT) |
               (((uint64_t)(1)) << WUFFS_BASE__TOKEN__LENGTH__SHIFT));
           (iop_a_src += 1, wuffs_base__make_empty_struct());
@@ -26082,7 +26100,7 @@
               if (((uint64_t)(io2_a_src - iop_a_src)) <= 0) {
                 if (v_string_length > 0) {
                   *iop_a_dst++ = wuffs_base__make_token(
-                      (((uint64_t)((self->private_impl.f_string_value_minor | 1 | 512))) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
+                      (((uint64_t)(4194819)) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
                       (((uint64_t)(1)) << WUFFS_BASE__TOKEN__CONTINUED__SHIFT) |
                       (((uint64_t)(v_string_length)) << WUFFS_BASE__TOKEN__LENGTH__SHIFT));
                   v_string_length = 0;
@@ -26107,7 +26125,7 @@
                 (iop_a_src += 4, wuffs_base__make_empty_struct());
                 if (v_string_length > 65527) {
                   *iop_a_dst++ = wuffs_base__make_token(
-                      (((uint64_t)((self->private_impl.f_string_value_minor | 1 | 512))) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
+                      (((uint64_t)(4194819)) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
                       (((uint64_t)(1)) << WUFFS_BASE__TOKEN__CONTINUED__SHIFT) |
                       (((uint64_t)((v_string_length + 4))) << WUFFS_BASE__TOKEN__LENGTH__SHIFT));
                   v_string_length = 0;
@@ -26122,7 +26140,7 @@
                 (iop_a_src += 1, wuffs_base__make_empty_struct());
                 if (v_string_length >= 65531) {
                   *iop_a_dst++ = wuffs_base__make_token(
-                      (((uint64_t)((self->private_impl.f_string_value_minor | 1 | 512))) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
+                      (((uint64_t)(4194819)) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
                       (((uint64_t)(1)) << WUFFS_BASE__TOKEN__CONTINUED__SHIFT) |
                       (((uint64_t)(65532)) << WUFFS_BASE__TOKEN__LENGTH__SHIFT));
                   v_string_length = 0;
@@ -26133,7 +26151,7 @@
               } else if (v_char == 1) {
                 if (v_string_length != 0) {
                   *iop_a_dst++ = wuffs_base__make_token(
-                      (((uint64_t)((self->private_impl.f_string_value_minor | 1 | 512))) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
+                      (((uint64_t)(4194819)) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
                       (((uint64_t)(1)) << WUFFS_BASE__TOKEN__CONTINUED__SHIFT) |
                       (((uint64_t)(v_string_length)) << WUFFS_BASE__TOKEN__LENGTH__SHIFT));
                   v_string_length = 0;
@@ -26142,7 +26160,7 @@
               } else if (v_char == 2) {
                 if (v_string_length > 0) {
                   *iop_a_dst++ = wuffs_base__make_token(
-                      (((uint64_t)((self->private_impl.f_string_value_minor | 1 | 512))) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
+                      (((uint64_t)(4194819)) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
                       (((uint64_t)(1)) << WUFFS_BASE__TOKEN__CONTINUED__SHIFT) |
                       (((uint64_t)(v_string_length)) << WUFFS_BASE__TOKEN__LENGTH__SHIFT));
                   v_string_length = 0;
@@ -26336,74 +26354,36 @@
                         (((uint64_t)(10)) << WUFFS_BASE__TOKEN__LENGTH__SHIFT));
                     goto label__string_loop_outer__continue;
                   }
-                } else if (v_c == 120) {
-                  if (self->private_impl.f_quirks[9]) {
-                    if (((uint64_t)(io2_a_src - iop_a_src)) < 4) {
-                      if (a_src && a_src->meta.closed) {
-                        status = wuffs_base__make_status(wuffs_json__error__bad_backslash_escape);
-                        goto exit;
-                      }
-                      status = wuffs_base__make_status(wuffs_base__suspension__short_read);
-                      WUFFS_BASE__COROUTINE_SUSPENSION_POINT_MAYBE_SUSPEND(10);
-                      v_string_length = 0;
-                      v_char = 0;
-                      goto label__string_loop_outer__continue;
-                    }
-                    v_backslash_x_string = wuffs_base__load_u32le__no_bounds_check(iop_a_src);
-                    v_backslash_x_ok = 128;
-                    v_c = WUFFS_JSON__LUT_HEXADECIMAL_DIGITS[(255 & (v_backslash_x_string >> 16))];
-                    v_backslash_x_ok &= v_c;
-                    v_backslash_x_value = ((uint8_t)(((v_c & 15) << 4)));
-                    v_c = WUFFS_JSON__LUT_HEXADECIMAL_DIGITS[(255 & (v_backslash_x_string >> 24))];
-                    v_backslash_x_ok &= v_c;
-                    v_backslash_x_value = ((uint8_t)((v_backslash_x_value | (v_c & 15))));
-                    if ((v_backslash_x_ok == 0) || ((v_backslash_x_string & 65535) != 30812)) {
+                } else if ((v_c == 120) && self->private_impl.f_quirks[9]) {
+                  if (((uint64_t)(io2_a_src - iop_a_src)) < 4) {
+                    if (a_src && a_src->meta.closed) {
                       status = wuffs_base__make_status(wuffs_json__error__bad_backslash_escape);
                       goto exit;
                     }
-                    (iop_a_src += 4, wuffs_base__make_empty_struct());
-                    *iop_a_dst++ = wuffs_base__make_token(
-                        (((uint64_t)((6291456 | ((uint32_t)(v_backslash_x_value))))) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
-                        (((uint64_t)(1)) << WUFFS_BASE__TOKEN__CONTINUED__SHIFT) |
-                        (((uint64_t)(4)) << WUFFS_BASE__TOKEN__LENGTH__SHIFT));
-                    goto label__string_loop_outer__continue;
-                  } else if (self->private_impl.f_quirks[8]) {
-                    if (((uint64_t)(io2_a_src - iop_a_src)) < 4) {
-                      if (a_src && a_src->meta.closed) {
-                        status = wuffs_base__make_status(wuffs_json__error__bad_backslash_escape);
-                        goto exit;
-                      }
-                      status = wuffs_base__make_status(wuffs_base__suspension__short_read);
-                      WUFFS_BASE__COROUTINE_SUSPENSION_POINT_MAYBE_SUSPEND(11);
-                      v_string_length = 0;
-                      v_char = 0;
-                      goto label__string_loop_outer__continue;
-                    }
-                    v_backslash_x_length = 0;
-                    while ((v_backslash_x_length <= 65531) && (((uint64_t)(io2_a_src - iop_a_src)) >= 4)) {
-                      v_backslash_x_string = wuffs_base__load_u32le__no_bounds_check(iop_a_src);
-                      v_backslash_x_ok = 128;
-                      v_c = WUFFS_JSON__LUT_HEXADECIMAL_DIGITS[(255 & (v_backslash_x_string >> 16))];
-                      v_backslash_x_ok &= v_c;
-                      v_c = WUFFS_JSON__LUT_HEXADECIMAL_DIGITS[(255 & (v_backslash_x_string >> 24))];
-                      v_backslash_x_ok &= v_c;
-                      if ((v_backslash_x_ok == 0) || ((v_backslash_x_string & 65535) != 30812)) {
-                        goto label__1__break;
-                      }
-                      (iop_a_src += 4, wuffs_base__make_empty_struct());
-                      v_backslash_x_length += 4;
-                    }
-                    label__1__break:;
-                    if (v_backslash_x_length == 0) {
-                      status = wuffs_base__make_status(wuffs_json__error__bad_backslash_escape);
-                      goto exit;
-                    }
-                    *iop_a_dst++ = wuffs_base__make_token(
-                        (((uint64_t)((self->private_impl.f_string_value_minor | 1 | 2048))) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
-                        (((uint64_t)(1)) << WUFFS_BASE__TOKEN__CONTINUED__SHIFT) |
-                        (((uint64_t)(v_backslash_x_length)) << WUFFS_BASE__TOKEN__LENGTH__SHIFT));
+                    status = wuffs_base__make_status(wuffs_base__suspension__short_read);
+                    WUFFS_BASE__COROUTINE_SUSPENSION_POINT_MAYBE_SUSPEND(10);
+                    v_string_length = 0;
+                    v_char = 0;
                     goto label__string_loop_outer__continue;
                   }
+                  v_backslash_x_string = wuffs_base__load_u32le__no_bounds_check(iop_a_src);
+                  v_backslash_x_ok = 128;
+                  v_c = WUFFS_JSON__LUT_HEXADECIMAL_DIGITS[(255 & (v_backslash_x_string >> 16))];
+                  v_backslash_x_ok &= v_c;
+                  v_backslash_x_value = ((uint8_t)(((v_c & 15) << 4)));
+                  v_c = WUFFS_JSON__LUT_HEXADECIMAL_DIGITS[(255 & (v_backslash_x_string >> 24))];
+                  v_backslash_x_ok &= v_c;
+                  v_backslash_x_value = ((uint8_t)((v_backslash_x_value | (v_c & 15))));
+                  if ((v_backslash_x_ok == 0) || ((v_backslash_x_string & 65535) != 30812)) {
+                    status = wuffs_base__make_status(wuffs_json__error__bad_backslash_escape);
+                    goto exit;
+                  }
+                  (iop_a_src += 4, wuffs_base__make_empty_struct());
+                  *iop_a_dst++ = wuffs_base__make_token(
+                      (((uint64_t)((6291456 | ((uint32_t)(v_backslash_x_value))))) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
+                      (((uint64_t)(1)) << WUFFS_BASE__TOKEN__CONTINUED__SHIFT) |
+                      (((uint64_t)(4)) << WUFFS_BASE__TOKEN__LENGTH__SHIFT));
+                  goto label__string_loop_outer__continue;
                 }
                 status = wuffs_base__make_status(wuffs_json__error__bad_backslash_escape);
                 goto exit;
@@ -26411,7 +26391,52 @@
                 if (((uint64_t)(io2_a_src - iop_a_src)) < 2) {
                   if (v_string_length > 0) {
                     *iop_a_dst++ = wuffs_base__make_token(
-                        (((uint64_t)((self->private_impl.f_string_value_minor | 1 | 512))) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
+                        (((uint64_t)(4194819)) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
+                        (((uint64_t)(1)) << WUFFS_BASE__TOKEN__CONTINUED__SHIFT) |
+                        (((uint64_t)(v_string_length)) << WUFFS_BASE__TOKEN__LENGTH__SHIFT));
+                    v_string_length = 0;
+                    if (((uint64_t)(io2_a_dst - iop_a_dst)) <= 0) {
+                      goto label__string_loop_outer__continue;
+                    }
+                  }
+                  if (a_src && a_src->meta.closed) {
+                    if (self->private_impl.f_quirks[19]) {
+                      *iop_a_dst++ = wuffs_base__make_token(
+                          (((uint64_t)(6356989)) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
+                          (((uint64_t)(1)) << WUFFS_BASE__TOKEN__CONTINUED__SHIFT) |
+                          (((uint64_t)(1)) << WUFFS_BASE__TOKEN__LENGTH__SHIFT));
+                      (iop_a_src += 1, wuffs_base__make_empty_struct());
+                      goto label__string_loop_outer__continue;
+                    }
+                    status = wuffs_base__make_status(wuffs_json__error__bad_utf_8);
+                    goto exit;
+                  }
+                  status = wuffs_base__make_status(wuffs_base__suspension__short_read);
+                  WUFFS_BASE__COROUTINE_SUSPENSION_POINT_MAYBE_SUSPEND(11);
+                  v_string_length = 0;
+                  v_char = 0;
+                  goto label__string_loop_outer__continue;
+                }
+                v_multi_byte_utf8 = ((uint32_t)(wuffs_base__load_u16le__no_bounds_check(iop_a_src)));
+                if ((v_multi_byte_utf8 & 49152) == 32768) {
+                  v_multi_byte_utf8 = ((1984 & (v_multi_byte_utf8 << 6)) | (63 & (v_multi_byte_utf8 >> 8)));
+                  (iop_a_src += 2, wuffs_base__make_empty_struct());
+                  if (v_string_length >= 65528) {
+                    *iop_a_dst++ = wuffs_base__make_token(
+                        (((uint64_t)(4194819)) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
+                        (((uint64_t)(1)) << WUFFS_BASE__TOKEN__CONTINUED__SHIFT) |
+                        (((uint64_t)((v_string_length + 2))) << WUFFS_BASE__TOKEN__LENGTH__SHIFT));
+                    v_string_length = 0;
+                    goto label__string_loop_outer__continue;
+                  }
+                  v_string_length += 2;
+                  goto label__string_loop_inner__continue;
+                }
+              } else if (v_char == 4) {
+                if (((uint64_t)(io2_a_src - iop_a_src)) < 3) {
+                  if (v_string_length > 0) {
+                    *iop_a_dst++ = wuffs_base__make_token(
+                        (((uint64_t)(4194819)) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
                         (((uint64_t)(1)) << WUFFS_BASE__TOKEN__CONTINUED__SHIFT) |
                         (((uint64_t)(v_string_length)) << WUFFS_BASE__TOKEN__LENGTH__SHIFT));
                     v_string_length = 0;
@@ -26437,26 +26462,28 @@
                   v_char = 0;
                   goto label__string_loop_outer__continue;
                 }
-                v_multi_byte_utf8 = ((uint32_t)(wuffs_base__load_u16le__no_bounds_check(iop_a_src)));
-                if ((v_multi_byte_utf8 & 49152) == 32768) {
-                  v_multi_byte_utf8 = ((1984 & (v_multi_byte_utf8 << 6)) | (63 & (v_multi_byte_utf8 >> 8)));
-                  (iop_a_src += 2, wuffs_base__make_empty_struct());
-                  if (v_string_length >= 65528) {
-                    *iop_a_dst++ = wuffs_base__make_token(
-                        (((uint64_t)((self->private_impl.f_string_value_minor | 1 | 512))) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
-                        (((uint64_t)(1)) << WUFFS_BASE__TOKEN__CONTINUED__SHIFT) |
-                        (((uint64_t)((v_string_length + 2))) << WUFFS_BASE__TOKEN__LENGTH__SHIFT));
-                    v_string_length = 0;
-                    goto label__string_loop_outer__continue;
+                v_multi_byte_utf8 = ((uint32_t)(wuffs_base__load_u24le__no_bounds_check(iop_a_src)));
+                if ((v_multi_byte_utf8 & 12632064) == 8421376) {
+                  v_multi_byte_utf8 = ((61440 & (v_multi_byte_utf8 << 12)) | (4032 & (v_multi_byte_utf8 >> 2)) | (63 & (v_multi_byte_utf8 >> 16)));
+                  if ((2047 < v_multi_byte_utf8) && ((v_multi_byte_utf8 < 55296) || (57343 < v_multi_byte_utf8))) {
+                    (iop_a_src += 3, wuffs_base__make_empty_struct());
+                    if (v_string_length >= 65528) {
+                      *iop_a_dst++ = wuffs_base__make_token(
+                          (((uint64_t)(4194819)) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
+                          (((uint64_t)(1)) << WUFFS_BASE__TOKEN__CONTINUED__SHIFT) |
+                          (((uint64_t)((v_string_length + 3))) << WUFFS_BASE__TOKEN__LENGTH__SHIFT));
+                      v_string_length = 0;
+                      goto label__string_loop_outer__continue;
+                    }
+                    v_string_length += 3;
+                    goto label__string_loop_inner__continue;
                   }
-                  v_string_length += 2;
-                  goto label__string_loop_inner__continue;
                 }
-              } else if (v_char == 4) {
-                if (((uint64_t)(io2_a_src - iop_a_src)) < 3) {
+              } else if (v_char == 5) {
+                if (((uint64_t)(io2_a_src - iop_a_src)) < 4) {
                   if (v_string_length > 0) {
                     *iop_a_dst++ = wuffs_base__make_token(
-                        (((uint64_t)((self->private_impl.f_string_value_minor | 1 | 512))) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
+                        (((uint64_t)(4194819)) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
                         (((uint64_t)(1)) << WUFFS_BASE__TOKEN__CONTINUED__SHIFT) |
                         (((uint64_t)(v_string_length)) << WUFFS_BASE__TOKEN__LENGTH__SHIFT));
                     v_string_length = 0;
@@ -26482,53 +26509,6 @@
                   v_char = 0;
                   goto label__string_loop_outer__continue;
                 }
-                v_multi_byte_utf8 = ((uint32_t)(wuffs_base__load_u24le__no_bounds_check(iop_a_src)));
-                if ((v_multi_byte_utf8 & 12632064) == 8421376) {
-                  v_multi_byte_utf8 = ((61440 & (v_multi_byte_utf8 << 12)) | (4032 & (v_multi_byte_utf8 >> 2)) | (63 & (v_multi_byte_utf8 >> 16)));
-                  if ((2047 < v_multi_byte_utf8) && ((v_multi_byte_utf8 < 55296) || (57343 < v_multi_byte_utf8))) {
-                    (iop_a_src += 3, wuffs_base__make_empty_struct());
-                    if (v_string_length >= 65528) {
-                      *iop_a_dst++ = wuffs_base__make_token(
-                          (((uint64_t)((self->private_impl.f_string_value_minor | 1 | 512))) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
-                          (((uint64_t)(1)) << WUFFS_BASE__TOKEN__CONTINUED__SHIFT) |
-                          (((uint64_t)((v_string_length + 3))) << WUFFS_BASE__TOKEN__LENGTH__SHIFT));
-                      v_string_length = 0;
-                      goto label__string_loop_outer__continue;
-                    }
-                    v_string_length += 3;
-                    goto label__string_loop_inner__continue;
-                  }
-                }
-              } else if (v_char == 5) {
-                if (((uint64_t)(io2_a_src - iop_a_src)) < 4) {
-                  if (v_string_length > 0) {
-                    *iop_a_dst++ = wuffs_base__make_token(
-                        (((uint64_t)((self->private_impl.f_string_value_minor | 1 | 512))) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
-                        (((uint64_t)(1)) << WUFFS_BASE__TOKEN__CONTINUED__SHIFT) |
-                        (((uint64_t)(v_string_length)) << WUFFS_BASE__TOKEN__LENGTH__SHIFT));
-                    v_string_length = 0;
-                    if (((uint64_t)(io2_a_dst - iop_a_dst)) <= 0) {
-                      goto label__string_loop_outer__continue;
-                    }
-                  }
-                  if (a_src && a_src->meta.closed) {
-                    if (self->private_impl.f_quirks[19]) {
-                      *iop_a_dst++ = wuffs_base__make_token(
-                          (((uint64_t)(6356989)) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
-                          (((uint64_t)(1)) << WUFFS_BASE__TOKEN__CONTINUED__SHIFT) |
-                          (((uint64_t)(1)) << WUFFS_BASE__TOKEN__LENGTH__SHIFT));
-                      (iop_a_src += 1, wuffs_base__make_empty_struct());
-                      goto label__string_loop_outer__continue;
-                    }
-                    status = wuffs_base__make_status(wuffs_json__error__bad_utf_8);
-                    goto exit;
-                  }
-                  status = wuffs_base__make_status(wuffs_base__suspension__short_read);
-                  WUFFS_BASE__COROUTINE_SUSPENSION_POINT_MAYBE_SUSPEND(14);
-                  v_string_length = 0;
-                  v_char = 0;
-                  goto label__string_loop_outer__continue;
-                }
                 v_multi_byte_utf8 = wuffs_base__load_u32le__no_bounds_check(iop_a_src);
                 if ((v_multi_byte_utf8 & 3233857536) == 2155905024) {
                   v_multi_byte_utf8 = ((1835008 & (v_multi_byte_utf8 << 18)) |
@@ -26539,7 +26519,7 @@
                     (iop_a_src += 4, wuffs_base__make_empty_struct());
                     if (v_string_length >= 65528) {
                       *iop_a_dst++ = wuffs_base__make_token(
-                          (((uint64_t)((self->private_impl.f_string_value_minor | 1 | 512))) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
+                          (((uint64_t)(4194819)) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
                           (((uint64_t)(1)) << WUFFS_BASE__TOKEN__CONTINUED__SHIFT) |
                           (((uint64_t)((v_string_length + 4))) << WUFFS_BASE__TOKEN__LENGTH__SHIFT));
                       v_string_length = 0;
@@ -26552,7 +26532,7 @@
               }
               if (v_string_length > 0) {
                 *iop_a_dst++ = wuffs_base__make_token(
-                    (((uint64_t)((self->private_impl.f_string_value_minor | 1 | 512))) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
+                    (((uint64_t)(4194819)) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
                     (((uint64_t)(1)) << WUFFS_BASE__TOKEN__CONTINUED__SHIFT) |
                     (((uint64_t)(v_string_length)) << WUFFS_BASE__TOKEN__LENGTH__SHIFT));
                 v_string_length = 0;
@@ -26569,6 +26549,10 @@
                   (iop_a_src += 1, wuffs_base__make_empty_struct());
                   goto label__string_loop_outer__continue;
                 }
+                if (v_char == 138) {
+                  status = wuffs_base__make_status(wuffs_json__error__bad_new_line_in_a_string);
+                  goto exit;
+                }
                 status = wuffs_base__make_status(wuffs_json__error__bad_c0_control_code);
                 goto exit;
               }
@@ -26585,7 +26569,7 @@
             }
           }
           label__string_loop_outer__break:;
-          label__2__continue:;
+          label__1__continue:;
           while (true) {
             if (((uint64_t)(io2_a_src - iop_a_src)) <= 0) {
               if (a_src && a_src->meta.closed) {
@@ -26593,24 +26577,21 @@
                 goto exit;
               }
               status = wuffs_base__make_status(wuffs_base__suspension__short_read);
-              WUFFS_BASE__COROUTINE_SUSPENSION_POINT_MAYBE_SUSPEND(15);
-              goto label__2__continue;
+              WUFFS_BASE__COROUTINE_SUSPENSION_POINT_MAYBE_SUSPEND(14);
+              goto label__1__continue;
             }
             if (((uint64_t)(io2_a_dst - iop_a_dst)) <= 0) {
               status = wuffs_base__make_status(wuffs_base__suspension__short_write);
-              WUFFS_BASE__COROUTINE_SUSPENSION_POINT_MAYBE_SUSPEND(16);
-              goto label__2__continue;
+              WUFFS_BASE__COROUTINE_SUSPENSION_POINT_MAYBE_SUSPEND(15);
+              goto label__1__continue;
             }
             (iop_a_src += 1, wuffs_base__make_empty_struct());
             *iop_a_dst++ = wuffs_base__make_token(
-                (((uint64_t)((self->private_impl.f_string_value_minor |
-                1 |
-                16 |
-                256))) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
+                (((uint64_t)(4194579)) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
                 (((uint64_t)(1)) << WUFFS_BASE__TOKEN__LENGTH__SHIFT));
-            goto label__2__break;
+            goto label__1__break;
           }
-          label__2__break:;
+          label__1__break:;
           if (0 == (v_expect & (((uint32_t)(1)) << 4))) {
             v_expect = 4104;
             goto label__outer__continue;
@@ -26619,7 +26600,7 @@
         } else if (v_class == 2) {
           (iop_a_src += 1, wuffs_base__make_empty_struct());
           *iop_a_dst++ = wuffs_base__make_token(
-              (((uint64_t)(0)) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
+              (((uint64_t)(1)) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
               (((uint64_t)(1)) << WUFFS_BASE__TOKEN__LENGTH__SHIFT));
           if (0 == (v_expect & (((uint32_t)(1)) << 8))) {
             if (self->private_impl.f_quirks[13]) {
@@ -26638,7 +26619,7 @@
         } else if (v_class == 3) {
           (iop_a_src += 1, wuffs_base__make_empty_struct());
           *iop_a_dst++ = wuffs_base__make_token(
-              (((uint64_t)(0)) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
+              (((uint64_t)(1)) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
               (((uint64_t)(1)) << WUFFS_BASE__TOKEN__LENGTH__SHIFT));
           v_expect = 7858;
           goto label__outer__continue;
@@ -26661,7 +26642,7 @@
               *iop_a_dst++ = wuffs_base__make_token(
                   (((uint64_t)(v_vminor)) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
                   (((uint64_t)(v_number_length)) << WUFFS_BASE__TOKEN__LENGTH__SHIFT));
-              goto label__3__break;
+              goto label__2__break;
             }
             while (v_number_length > 0) {
               v_number_length -= 1;
@@ -26680,7 +26661,7 @@
                 if (a_src) {
                   a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
                 }
-                WUFFS_BASE__COROUTINE_SUSPENSION_POINT(17);
+                WUFFS_BASE__COROUTINE_SUSPENSION_POINT(16);
                 status = wuffs_json__decoder__decode_inf_nan(self, a_dst, a_src);
                 if (a_dst) {
                   iop_a_dst = a_dst->data.ptr + a_dst->meta.wi;
@@ -26691,7 +26672,7 @@
                 if (status.repr) {
                   goto suspend;
                 }
-                goto label__3__break;
+                goto label__2__break;
               }
               status = wuffs_base__make_status(wuffs_json__error__bad_input);
               goto exit;
@@ -26700,14 +26681,14 @@
               goto exit;
             } else {
               status = wuffs_base__make_status(wuffs_base__suspension__short_read);
-              WUFFS_BASE__COROUTINE_SUSPENSION_POINT_MAYBE_SUSPEND(18);
+              WUFFS_BASE__COROUTINE_SUSPENSION_POINT_MAYBE_SUSPEND(17);
               while (((uint64_t)(io2_a_dst - iop_a_dst)) <= 0) {
                 status = wuffs_base__make_status(wuffs_base__suspension__short_write);
-                WUFFS_BASE__COROUTINE_SUSPENSION_POINT_MAYBE_SUSPEND(19);
+                WUFFS_BASE__COROUTINE_SUSPENSION_POINT_MAYBE_SUSPEND(18);
               }
             }
           }
-          label__3__break:;
+          label__2__break:;
           goto label__goto_parsed_a_leaf_value__break;
         } else if (v_class == 5) {
           v_vminor = 2113553;
@@ -26819,7 +26800,7 @@
             goto label__goto_parsed_a_leaf_value__break;
           } else if (v_match == 1) {
             status = wuffs_base__make_status(wuffs_base__suspension__short_read);
-            WUFFS_BASE__COROUTINE_SUSPENSION_POINT_MAYBE_SUSPEND(20);
+            WUFFS_BASE__COROUTINE_SUSPENSION_POINT_MAYBE_SUSPEND(19);
             goto label__outer__continue;
           }
         } else if (v_class == 10) {
@@ -26836,7 +26817,7 @@
             goto label__goto_parsed_a_leaf_value__break;
           } else if (v_match == 1) {
             status = wuffs_base__make_status(wuffs_base__suspension__short_read);
-            WUFFS_BASE__COROUTINE_SUSPENSION_POINT_MAYBE_SUSPEND(21);
+            WUFFS_BASE__COROUTINE_SUSPENSION_POINT_MAYBE_SUSPEND(20);
             goto label__outer__continue;
           }
         } else if (v_class == 11) {
@@ -26853,7 +26834,7 @@
             goto label__goto_parsed_a_leaf_value__break;
           } else if (v_match == 1) {
             status = wuffs_base__make_status(wuffs_base__suspension__short_read);
-            WUFFS_BASE__COROUTINE_SUSPENSION_POINT_MAYBE_SUSPEND(22);
+            WUFFS_BASE__COROUTINE_SUSPENSION_POINT_MAYBE_SUSPEND(21);
             goto label__outer__continue;
           }
           if (self->private_impl.f_quirks[14]) {
@@ -26863,7 +26844,7 @@
             if (a_src) {
               a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
             }
-            WUFFS_BASE__COROUTINE_SUSPENSION_POINT(23);
+            WUFFS_BASE__COROUTINE_SUSPENSION_POINT(22);
             status = wuffs_json__decoder__decode_inf_nan(self, a_dst, a_src);
             if (a_dst) {
               iop_a_dst = a_dst->data.ptr + a_dst->meta.wi;
@@ -26884,7 +26865,7 @@
             if (a_src) {
               a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
             }
-            WUFFS_BASE__COROUTINE_SUSPENSION_POINT(24);
+            WUFFS_BASE__COROUTINE_SUSPENSION_POINT(23);
             status = wuffs_json__decoder__decode_comment(self, a_dst, a_src);
             if (a_dst) {
               iop_a_dst = a_dst->data.ptr + a_dst->meta.wi;
@@ -26915,7 +26896,7 @@
       if (a_src) {
         a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
       }
-      WUFFS_BASE__COROUTINE_SUSPENSION_POINT(25);
+      WUFFS_BASE__COROUTINE_SUSPENSION_POINT(24);
       status = wuffs_json__decoder__decode_trailing_new_line(self, a_dst, a_src);
       if (a_dst) {
         iop_a_dst = a_dst->data.ptr + a_dst->meta.wi;
@@ -27373,7 +27354,7 @@
           if (((uint64_t)(io2_a_src - iop_a_src)) <= 0) {
             if (v_length > 0) {
               *iop_a_dst++ = wuffs_base__make_token(
-                  (((uint64_t)(1)) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
+                  (((uint64_t)(4)) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
                   (((uint64_t)(1)) << WUFFS_BASE__TOKEN__CONTINUED__SHIFT) |
                   (((uint64_t)(v_length)) << WUFFS_BASE__TOKEN__LENGTH__SHIFT));
             }
@@ -27390,7 +27371,7 @@
           if (v_c == 10) {
             (iop_a_src += 1, wuffs_base__make_empty_struct());
             *iop_a_dst++ = wuffs_base__make_token(
-                (((uint64_t)(1)) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
+                (((uint64_t)(4)) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
                 (((uint64_t)((v_length + 1))) << WUFFS_BASE__TOKEN__LENGTH__SHIFT));
             status = wuffs_base__make_status(NULL);
             goto ok;
@@ -27398,7 +27379,7 @@
           (iop_a_src += 1, wuffs_base__make_empty_struct());
           if (v_length >= 65533) {
             *iop_a_dst++ = wuffs_base__make_token(
-                (((uint64_t)(1)) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
+                (((uint64_t)(4)) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
                 (((uint64_t)(1)) << WUFFS_BASE__TOKEN__CONTINUED__SHIFT) |
                 (((uint64_t)((v_length + 1))) << WUFFS_BASE__TOKEN__LENGTH__SHIFT));
             v_length = 0;
@@ -29084,7 +29065,7 @@
       dec->set_quirk_enabled(quirks.ptr[i], true);
     }
 
-    // Prepare the wuffs_base__tok_buffer.
+    // Prepare the wuffs_base__tok_buffer. 256 tokens is 2KiB.
     wuffs_base__token tok_array[256];
     wuffs_base__token_buffer tok_buf =
         wuffs_base__slice_token__writer(wuffs_base__make_slice_token(
@@ -29380,11 +29361,6 @@
     : error_message(std::move(error_message0)),
       cursor_position(cursor_position0) {}
 
-std::string  //
-DecodeJsonCallbacks::AppendByteString(std::string&& val) {
-  return "wuffs_aux::DecodeJson: unexpected JSON byte string";
-}
-
 void  //
 DecodeJsonCallbacks::Done(DecodeJsonResult& result,
                           sync_io::Input& input,
@@ -29498,32 +29474,6 @@
   return std::make_pair(std::move(fragment), i);
 }
 
-std::string  //
-DecodeJson_DecodeBackslashX(std::string& str,
-                            uint8_t* token_ptr,
-                            size_t token_len) {
-  wuffs_base__slice_u8 encoded =
-      wuffs_base__make_slice_u8(token_ptr, token_len);
-  while (encoded.len > 0) {
-    uint8_t decoded[64];
-    constexpr bool src_closed = true;
-    wuffs_base__transform__output o = wuffs_base__base_16__decode4(
-        wuffs_base__make_slice_u8(&decoded[0], sizeof decoded), encoded,
-        src_closed, WUFFS_BASE__BASE_16__DEFAULT_OPTIONS);
-    if (o.status.is_error()) {
-      return o.status.message();
-    } else if ((o.num_dst > (sizeof decoded)) || (o.num_src > encoded.len)) {
-      return "wuffs_aux::DecodeJson: internal error: inconsistent base16 "
-             "decoding";
-    }
-    str.append(  // Convert from (uint8_t*).
-        static_cast<const char*>(static_cast<void*>(&decoded[0])), o.num_dst);
-    encoded.ptr += o.num_src;
-    encoded.len -= o.num_src;
-  }
-  return "";
-}
-
 // --------
 
 std::string  //
@@ -29582,14 +29532,6 @@
             const char* ptr =  // Convert from (uint8_t*).
                 static_cast<const char*>(static_cast<void*>(token_ptr));
             str.append(ptr, token_len);
-          } else if (
-              vbd &
-              WUFFS_BASE__TOKEN__VBD__STRING__CONVERT_1_DST_4_SRC_BACKSLASH_X) {
-            ret_error_message =
-                DecodeJson_DecodeBackslashX(str, token_ptr, token_len);
-            if (!ret_error_message.empty()) {
-              goto done;
-            }
           } else {
             goto fail;
           }
@@ -29752,7 +29694,7 @@
       }
     }
 
-    // Prepare the wuffs_base__tok_buffer.
+    // Prepare the wuffs_base__tok_buffer. 256 tokens is 2KiB.
     wuffs_base__token tok_array[256];
     wuffs_base__token_buffer tok_buf =
         wuffs_base__slice_token__writer(wuffs_base__make_slice_token(
@@ -29818,24 +29760,13 @@
             const char* ptr =  // Convert from (uint8_t*).
                 static_cast<const char*>(static_cast<void*>(token_ptr));
             str.append(ptr, token_len);
-          } else if (
-              vbd &
-              WUFFS_BASE__TOKEN__VBD__STRING__CONVERT_1_DST_4_SRC_BACKSLASH_X) {
-            ret_error_message =
-                DecodeJson_DecodeBackslashX(str, token_ptr, token_len);
-            if (!ret_error_message.empty()) {
-              goto done;
-            }
           } else {
             goto fail;
           }
           if (token.continued()) {
             continue;
           }
-          ret_error_message =
-              (vbd & WUFFS_BASE__TOKEN__VBD__STRING__CHAIN_MUST_BE_UTF_8)
-                  ? callbacks.AppendTextString(std::move(str))
-                  : callbacks.AppendByteString(std::move(str));
+          ret_error_message = callbacks.AppendTextString(std::move(str));
           str.clear();
           goto parsed_a_value;
         }