diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-01-17 15:32:31 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-01-17 15:32:39 +0900 |
| commit | a7f626b9a6b8110c70fdfaf5b66db73c025b6de1 (patch) | |
| tree | 1c2ad5536529cee66dbe39c73cdb09d763d12f23 /src/jq/tokenize.zig | |
| parent | 94877ef2f689617706a646cf0abda7dc25ceba88 (diff) | |
| download | zgjq-a7f626b9a6b8110c70fdfaf5b66db73c025b6de1.tar.gz zgjq-a7f626b9a6b8110c70fdfaf5b66db73c025b6de1.tar.zst zgjq-a7f626b9a6b8110c70fdfaf5b66db73c025b6de1.zip | |
refactor: tokenize() takes std.Io.Reader
Diffstat (limited to 'src/jq/tokenize.zig')
| -rw-r--r-- | src/jq/tokenize.zig | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/src/jq/tokenize.zig b/src/jq/tokenize.zig index 92f96ca..c4201b5 100644 --- a/src/jq/tokenize.zig +++ b/src/jq/tokenize.zig @@ -25,18 +25,14 @@ pub const Token = union(TokenKind) { } }; -pub fn tokenize(allocator: std.mem.Allocator, query: []const u8) ![]Token { +pub fn tokenize(allocator: std.mem.Allocator, reader: *std.Io.Reader) ![]Token { var tokens = try std.array_list.Aligned(Token, null).initCapacity(allocator, 16); - const len = query.len; - - if (len == 0) { - return error.UnexpectedEnd; - } - - var i: usize = 0; - while (i < len) { - const c = query[i]; + while (true) { + const c = reader.takeByte() catch |err| switch (err) { + error.EndOfStream => break, + error.ReadFailed => return error.ReadFailed, + }; switch (c) { '.' => try tokens.append(allocator, .dot), '[' => try tokens.append(allocator, .bracket_left), @@ -49,7 +45,10 @@ pub fn tokenize(allocator: std.mem.Allocator, query: []const u8) ![]Token { } }, } - i += 1; + } + + if (tokens.items.len == 0) { + return error.UnexpectedEnd; } try tokens.append(allocator, .end); |
