aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/root.zig
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-01-19 03:38:29 +0900
committernsfisis <nsfisis@gmail.com>2026-01-19 04:14:28 +0900
commitfa8b75121b915e1ae1eb3311fa8051e241e7ddef (patch)
tree122d3a1d4100d71b8d48b126f05d1d81765ba1b9 /src/root.zig
parent1513ca1a19d4758b3c166ac14040d5d3f7193218 (diff)
downloadzgjq-fa8b75121b915e1ae1eb3311fa8051e241e7ddef.tar.gz
zgjq-fa8b75121b915e1ae1eb3311fa8051e241e7ddef.tar.zst
zgjq-fa8b75121b915e1ae1eb3311fa8051e241e7ddef.zip
refactor compilation phases
Diffstat (limited to 'src/root.zig')
-rw-r--r--src/root.zig24
1 files changed, 6 insertions, 18 deletions
diff --git a/src/root.zig b/src/root.zig
index 9c22deb..ccfd36d 100644
--- a/src/root.zig
+++ b/src/root.zig
@@ -3,40 +3,28 @@ pub const jq = @import("./jq.zig");
pub const jv = @import("./jv.zig");
pub fn run(allocator: std.mem.Allocator, input: []const u8, query: []const u8) ![]const u8 {
- var compile_allocator = std.heap.ArenaAllocator.init(allocator);
- defer compile_allocator.deinit();
- var reader = std.Io.Reader.fixed(query);
- const tokens = try jq.tokenize(compile_allocator.allocator(), &reader);
- const ast = try jq.parse(compile_allocator.allocator(), tokens);
- const instrs = try jq.compile(allocator, compile_allocator.allocator(), ast);
- defer allocator.free(instrs);
-
const parsed = try jv.parse(allocator, input);
defer parsed.deinit();
const json = parsed.value;
- var runtime = try jq.Runtime.init(allocator, instrs, json);
+ var runtime = try jq.Runtime.init(allocator);
defer runtime.deinit();
+ try runtime.compileFromSlice(query);
+ try runtime.start(json);
const result = try runtime.next() orelse return error.NoResult;
const output = try jv.stringify(allocator, result);
return output;
}
fn testRun(expected: []const u8, allocator: std.mem.Allocator, input: []const u8, query: []const u8) !void {
- var compile_allocator = std.heap.ArenaAllocator.init(allocator);
- defer compile_allocator.deinit();
- var reader = std.Io.Reader.fixed(query);
- const tokens = try jq.tokenize(compile_allocator.allocator(), &reader);
- const ast = try jq.parse(compile_allocator.allocator(), tokens);
- const instrs = try jq.compile(allocator, compile_allocator.allocator(), ast);
- defer allocator.free(instrs);
-
const parsed = try jv.parse(allocator, input);
defer parsed.deinit();
const json = parsed.value;
- var runtime = try jq.Runtime.init(allocator, instrs, json);
+ var runtime = try jq.Runtime.init(allocator);
defer runtime.deinit();
+ try runtime.compileFromSlice(query);
+ try runtime.start(json);
const result_value = try runtime.next() orelse return error.NoResult;
const result = try jv.stringify(allocator, result_value);