diff --git a/release/c/wuffs-unsupported-snapshot.c b/release/c/wuffs-unsupported-snapshot.c
index eb370d9..67c821b 100644
--- a/release/c/wuffs-unsupported-snapshot.c
+++ b/release/c/wuffs-unsupported-snapshot.c
@@ -18442,7 +18442,7 @@
         v_depth += 1;
         (iop_a_src += 1, wuffs_base__make_empty_struct());
         *iop_a_dst++ = wuffs_base__make_token(
-            (((uint64_t)(2097168)) << WUFFS_BASE__TOKEN__VALUE__SHIFT) |
+            (((uint64_t)(2097169)) << WUFFS_BASE__TOKEN__VALUE__SHIFT) |
             (((uint64_t)(1)) << WUFFS_BASE__TOKEN__LENGTH__SHIFT));
         v_expect = 19;
         v_expect_after_value = 20;
@@ -18453,10 +18453,10 @@
           goto exit;
         }
         (iop_a_src += 1, wuffs_base__make_empty_struct());
-        *iop_a_dst++ = wuffs_base__make_token(
-            (((uint64_t)(2097232)) << WUFFS_BASE__TOKEN__VALUE__SHIFT) |
-            (((uint64_t)(1)) << WUFFS_BASE__TOKEN__LENGTH__SHIFT));
         if (v_depth <= 1) {
+          *iop_a_dst++ = wuffs_base__make_token(
+              (((uint64_t)(2097170)) << WUFFS_BASE__TOKEN__VALUE__SHIFT) |
+              (((uint64_t)(1)) << WUFFS_BASE__TOKEN__LENGTH__SHIFT));
           goto label_0_break;
         }
         v_depth -= 1;
@@ -18464,9 +18464,15 @@
         v_stack_bit = ((v_depth - 1) & 31);
         if (0 == (self->private_data.f_stack[v_stack_byte] &
                   (((uint32_t)(1)) << v_stack_bit))) {
+          *iop_a_dst++ = wuffs_base__make_token(
+              (((uint64_t)(2101266)) << WUFFS_BASE__TOKEN__VALUE__SHIFT) |
+              (((uint64_t)(1)) << WUFFS_BASE__TOKEN__LENGTH__SHIFT));
           v_expect = 20;
           v_expect_after_value = 20;
         } else {
+          *iop_a_dst++ = wuffs_base__make_token(
+              (((uint64_t)(2105362)) << WUFFS_BASE__TOKEN__VALUE__SHIFT) |
+              (((uint64_t)(1)) << WUFFS_BASE__TOKEN__LENGTH__SHIFT));
           v_expect = 36;
           v_expect_after_value = 36;
         }
@@ -18488,7 +18494,7 @@
         v_depth += 1;
         (iop_a_src += 1, wuffs_base__make_empty_struct());
         *iop_a_dst++ = wuffs_base__make_token(
-            (((uint64_t)(2097184)) << WUFFS_BASE__TOKEN__VALUE__SHIFT) |
+            (((uint64_t)(2097185)) << WUFFS_BASE__TOKEN__VALUE__SHIFT) |
             (((uint64_t)(1)) << WUFFS_BASE__TOKEN__LENGTH__SHIFT));
         v_expect = 34;
         v_expect_after_value = 36;
@@ -18499,10 +18505,10 @@
           goto exit;
         }
         (iop_a_src += 1, wuffs_base__make_empty_struct());
-        *iop_a_dst++ = wuffs_base__make_token(
-            (((uint64_t)(2097248)) << WUFFS_BASE__TOKEN__VALUE__SHIFT) |
-            (((uint64_t)(1)) << WUFFS_BASE__TOKEN__LENGTH__SHIFT));
         if (v_depth <= 1) {
+          *iop_a_dst++ = wuffs_base__make_token(
+              (((uint64_t)(2097186)) << WUFFS_BASE__TOKEN__VALUE__SHIFT) |
+              (((uint64_t)(1)) << WUFFS_BASE__TOKEN__LENGTH__SHIFT));
           goto label_0_break;
         }
         v_depth -= 1;
@@ -18510,9 +18516,15 @@
         v_stack_bit = ((v_depth - 1) & 31);
         if (0 == (self->private_data.f_stack[v_stack_byte] &
                   (((uint32_t)(1)) << v_stack_bit))) {
+          *iop_a_dst++ = wuffs_base__make_token(
+              (((uint64_t)(2101282)) << WUFFS_BASE__TOKEN__VALUE__SHIFT) |
+              (((uint64_t)(1)) << WUFFS_BASE__TOKEN__LENGTH__SHIFT));
           v_expect = 20;
           v_expect_after_value = 20;
         } else {
+          *iop_a_dst++ = wuffs_base__make_token(
+              (((uint64_t)(2105378)) << WUFFS_BASE__TOKEN__VALUE__SHIFT) |
+              (((uint64_t)(1)) << WUFFS_BASE__TOKEN__LENGTH__SHIFT));
           v_expect = 36;
           v_expect_after_value = 36;
         }
diff --git a/std/json/decode_json.wuffs b/std/json/decode_json.wuffs
index 1b65adb..c65f33a 100644
--- a/std/json/decode_json.wuffs
+++ b/std/json/decode_json.wuffs
@@ -250,7 +250,7 @@
 			depth += 1
 
 			args.src.skip32_fast!(actual: 1, worst_case: 1)
-			args.dst.write_fast_token!(value: 0x20_0010, length: 1)
+			args.dst.write_fast_token!(value: 0x20_0011, length: 1)
 			expect = 0x13  // 0x13 is (EXPECT_CLOSE_BRACKET | EXPECT_VALUE).
 			expect_after_value = 0x14  // 0x14 is (EXPECT_CLOSE_BRACKET | EXPECT_COMMA).
 			continue.outer
@@ -260,18 +260,20 @@
 				return "#bad input"
 			}
 			args.src.skip32_fast!(actual: 1, worst_case: 1)
-			args.dst.write_fast_token!(value: 0x20_0050, length: 1)
 			if depth <= 1 {
+				args.dst.write_fast_token!(value: 0x20_0012, length: 1)
 				break.outer
 			}
 			depth -= 1
 			stack_byte = (depth - 1) / 32
 			stack_bit = (depth - 1) & 31
 			if 0 == (this.stack[stack_byte] & ((1 as base.u32) << stack_bit)) {
+				args.dst.write_fast_token!(value: 0x20_1012, length: 1)
 				// 0x14 is (EXPECT_CLOSE_BRACKET | EXPECT_COMMA).
 				expect = 0x14
 				expect_after_value = 0x14
 			} else {
+				args.dst.write_fast_token!(value: 0x20_2012, length: 1)
 				// 0x24 is (EXPECT_CLOSE_BRACE | EXPECT_COMMA).
 				expect = 0x24
 				expect_after_value = 0x24
@@ -291,7 +293,7 @@
 			depth += 1
 
 			args.src.skip32_fast!(actual: 1, worst_case: 1)
-			args.dst.write_fast_token!(value: 0x20_0020, length: 1)
+			args.dst.write_fast_token!(value: 0x20_0021, length: 1)
 			expect = 0x22  // 0x22 is (EXPECT_CLOSE_BRACE | EXPECT_STRING_VALUE).
 			expect_after_value = 0x24  // 0x24 is (EXPECT_CLOSE_BRACE | EXPECT_COMMA).
 			continue.outer
@@ -301,18 +303,20 @@
 				return "#bad input"
 			}
 			args.src.skip32_fast!(actual: 1, worst_case: 1)
-			args.dst.write_fast_token!(value: 0x20_0060, length: 1)
 			if depth <= 1 {
+				args.dst.write_fast_token!(value: 0x20_0022, length: 1)
 				break.outer
 			}
 			depth -= 1
 			stack_byte = (depth - 1) / 32
 			stack_bit = (depth - 1) & 31
 			if 0 == (this.stack[stack_byte] & ((1 as base.u32) << stack_bit)) {
+				args.dst.write_fast_token!(value: 0x20_1022, length: 1)
 				// 0x14 is (EXPECT_CLOSE_BRACKET | EXPECT_COMMA).
 				expect = 0x14
 				expect_after_value = 0x14
 			} else {
+				args.dst.write_fast_token!(value: 0x20_2022, length: 1)
 				// 0x24 is (EXPECT_CLOSE_BRACE | EXPECT_COMMA).
 				expect = 0x24
 				expect_after_value = 0x24
