| ... | ... | @@ -867,6 +867,8 @@ pub const TokenStream = struct { |
| 867 | 867 | parser: StreamingParser, |
| 868 | 868 | token: ?Token, |
| 869 | 869 | |
| 870 | pub const Error = StreamingParser.Error || error.Incomplete; |
| 871 | |
| 870 | 872 | pub fn init(slice: []const u8) TokenStream { |
| 871 | 873 | return TokenStream{ |
| 872 | 874 | .i = 0, |
| ... | ... | @@ -896,16 +898,11 @@ pub const TokenStream = struct { |
| 896 | 898 | } |
| 897 | 899 | } |
| 898 | 900 | |
| 899 | | if (self.i > self.slice.len) { |
| 900 | | try self.parser.feed(' ', &t1, &t2); |
| 901 | | self.i += 1; |
| 902 | | |
| 903 | | if (t1) |token| { |
| 904 | | return token; |
| 905 | | } |
| 901 | if(self.parser.complete){ |
| 902 | return null; |
| 903 | } else { |
| 904 | return error.Incomplete; |
| 906 | 905 | } |
| 907 | | |
| 908 | | return null; |
| 909 | 906 | } |
| 910 | 907 | }; |
| 911 | 908 | |
| ... | ... | @@ -1455,3 +1452,9 @@ test "write json then parse it" { |
| 1455 | 1452 | testing.expect(tree.root.Object.get("array").?.value.Array.at(1).Float == 12.34); |
| 1456 | 1453 | testing.expect(mem.eql(u8, tree.root.Object.get("str").?.value.String, "hello")); |
| 1457 | 1454 | } |
| 1455 | |
| 1456 | test "parsing empty string does not crash" { |
| 1457 | var p = Parser.init(debug.global_allocator, false); |
| 1458 | defer p.deinit(); |
| 1459 | testing.expectError(error.Incomplete, p.parse("")); |
| 1460 | } |