Fix cgen for an_array[i .. j]
diff --git a/internal/cgen/expr.go b/internal/cgen/expr.go
index 50cc83a..713fbfe 100644
--- a/internal/cgen/expr.go
+++ b/internal/cgen/expr.go
@@ -222,9 +222,16 @@
}
if rhs != nil {
b.writes(comma)
+ if lhsIsArray && (mcv != nil) && (mcv.Sign() != 0) {
+ b.writeb('(')
+ }
if err := g.writeExpr(b, rhs, false, depth); err != nil {
return err
}
+ if lhsIsArray && (mcv != nil) && (mcv.Sign() != 0) {
+ b.writes(") - ")
+ b.writes(mcv.String())
+ }
}
if mhs != nil || rhs != nil {
b.writeb(')')
diff --git a/release/c/wuffs-unsupported-snapshot.c b/release/c/wuffs-unsupported-snapshot.c
index b73c8fd..cea2b1e 100644
--- a/release/c/wuffs-unsupported-snapshot.c
+++ b/release/c/wuffs-unsupported-snapshot.c
@@ -25495,7 +25495,7 @@
} else {
v_sel_ff = (v_selector & 255);
v_movee = self->private_data.f_mtft[v_sel_ff];
- wuffs_base__slice_u8__copy_from_slice(wuffs_base__slice_u8__subslice_j(wuffs_base__make_slice_u8((self->private_data.f_mtft) + 1, 255), (1 + v_sel_ff)), wuffs_base__slice_u8__subslice_j(wuffs_base__make_slice_u8(self->private_data.f_mtft, 256), v_sel_ff));
+ wuffs_base__slice_u8__copy_from_slice(wuffs_base__slice_u8__subslice_j(wuffs_base__make_slice_u8((self->private_data.f_mtft) + 1, 255), ((1 + v_sel_ff)) - 1), wuffs_base__slice_u8__subslice_j(wuffs_base__make_slice_u8(self->private_data.f_mtft, 256), v_sel_ff));
self->private_data.f_mtft[0] = v_movee;
self->private_data.f_huffman_selectors[v_i] = v_movee;
}
@@ -25849,7 +25849,7 @@
} else if (v_child < 1280) {
v_child_ff = ((uint32_t)((v_child & 255)));
v_output = ((uint32_t)(self->private_data.f_mtft[v_child_ff]));
- wuffs_base__slice_u8__copy_from_slice(wuffs_base__slice_u8__subslice_j(wuffs_base__make_slice_u8((self->private_data.f_mtft) + 1, 255), (1 + v_child_ff)), wuffs_base__slice_u8__subslice_j(wuffs_base__make_slice_u8(self->private_data.f_mtft, 256), v_child_ff));
+ wuffs_base__slice_u8__copy_from_slice(wuffs_base__slice_u8__subslice_j(wuffs_base__make_slice_u8((self->private_data.f_mtft) + 1, 255), ((1 + v_child_ff)) - 1), wuffs_base__slice_u8__subslice_j(wuffs_base__make_slice_u8(self->private_data.f_mtft, 256), v_child_ff));
self->private_data.f_mtft[0] = ((uint8_t)(v_output));
self->private_data.f_bwt[v_bs] = v_output;
if (v_bs >= self->private_impl.f_max_incl_block_size) {
diff --git a/test/c/std/bzip2.c b/test/c/std/bzip2.c
index 7ef3dba..5de3bef 100644
--- a/test/c/std/bzip2.c
+++ b/test/c/std/bzip2.c
@@ -69,6 +69,11 @@
// ---------------- Golden Tests
+golden_test g_bzip2_256_bytes_gt = {
+ .want_filename = "test/data/256.bytes",
+ .src_filename = "test/data/256.bytes.bz2",
+};
+
golden_test g_bzip2_midsummer_gt = {
.want_filename = "test/data/midsummer.txt",
.src_filename = "test/data/midsummer.txt.bz2",
@@ -126,6 +131,13 @@
}
const char* //
+test_wuffs_bzip2_decode_256_bytes() {
+ CHECK_FOCUS(__func__);
+ return do_test_io_buffers(wuffs_bzip2_decode, &g_bzip2_256_bytes_gt,
+ UINT64_MAX, UINT64_MAX);
+}
+
+const char* //
test_wuffs_bzip2_decode_midsummer() {
CHECK_FOCUS(__func__);
return do_test_io_buffers(wuffs_bzip2_decode, &g_bzip2_midsummer_gt,
@@ -179,6 +191,7 @@
proc g_tests[] = {
+ test_wuffs_bzip2_decode_256_bytes,
test_wuffs_bzip2_decode_interface,
test_wuffs_bzip2_decode_midsummer,
test_wuffs_bzip2_decode_pi,
diff --git a/test/data/256.bytes.bz2 b/test/data/256.bytes.bz2
new file mode 100644
index 0000000..fc61e6b
--- /dev/null
+++ b/test/data/256.bytes.bz2
Binary files differ