Commit 5936bdf8a4

tgschultz <tgschultz@gmail.com>
2018-11-30 21:31:08
Fixed readBits to cast errors to the correct errorset. See #1810 for why this wasn't caught earlier.
1 parent b6489ff
Changed files (2)
std/io.zig
@@ -526,7 +526,9 @@ pub fn BitInStream(endian: builtin.Endian, comptime Error: type) type {
                     if (err == error.EndOfStream) {
                         return @intCast(U, out_buffer);
                     }
-                    return err;
+                    //@BUG: See #1810. Not sure if the bug is that I have to do this for some
+                    // streams, or that I don't for streams with emtpy errorsets.
+                    return @errSetCast(Error, err);
                 };
 
                 switch (endian) {
std/io_test.zig
@@ -169,6 +169,10 @@ test "BitInStream" {
     assert(out_bits == 16);
 
     _ = try bit_stream_be.readBits(u0, 0, &out_bits);
+    
+    assert(0 == try bit_stream_be.readBits(u1, 1, &out_bits));
+    assert(out_bits == 0);
+    assertError(bit_stream_be.readBitsNoEof(u1, 1), error.EndOfStream);
 
     var mem_in_le = io.SliceInStream.init(mem_le[0..]);
     var bit_stream_le = io.BitInStream(builtin.Endian.Little, InError).init(&mem_in_le.stream);
@@ -197,6 +201,10 @@ test "BitInStream" {
     assert(out_bits == 16);
 
     _ = try bit_stream_le.readBits(u0, 0, &out_bits);
+    
+    assert(0 == try bit_stream_le.readBits(u1, 1, &out_bits));
+    assert(out_bits == 0);
+    assertError(bit_stream_le.readBitsNoEof(u1, 1), error.EndOfStream);
 }
 
 test "BitOutStream" {