diff options
author | Baitinq <manuelpalenzuelamerino@gmail.com> | 2025-01-07 22:43:10 +0100 |
---|---|---|
committer | Baitinq <manuelpalenzuelamerino@gmail.com> | 2025-01-07 22:43:10 +0100 |
commit | 310e5766b7b6ffd8c73bba250ade34997e4f72a6 (patch) | |
tree | 8d17d47d2ff052ab62cf79516db601da4ffe4a7a | |
parent | Parser: Fix mem leaks (diff) | |
download | interpreter-310e5766b7b6ffd8c73bba250ade34997e4f72a6.tar.gz interpreter-310e5766b7b6ffd8c73bba250ade34997e4f72a6.tar.bz2 interpreter-310e5766b7b6ffd8c73bba250ade34997e4f72a6.zip |
Add REPL
-rw-r--r-- | src/main.zig | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/src/main.zig b/src/main.zig index 7400571..c65ef4b 100644 --- a/src/main.zig +++ b/src/main.zig @@ -3,13 +3,11 @@ const tokenizer = @import("tokenizer.zig"); const parser = @import("parser.zig"); pub fn main() !void { + const stdout = std.io.getStdOut().writer(); + const stdin = std.io.getStdIn().reader(); + const pathLen = std.mem.len(std.os.argv[1]); const path = std.os.argv[1][0..pathLen]; - std.debug.print("Tokenizing! {s}\n", .{path}); - - //TODO: Repl mode - - const file = try std.fs.cwd().openFile(path, .{}); var gpa = std.heap.GeneralPurposeAllocator(.{}){}; const allocator = gpa.allocator(); @@ -18,9 +16,25 @@ pub fn main() !void { if (deinit_status == .leak) @panic("Memory leak detected!"); } - const buf = try file.readToEndAlloc(allocator, 1 * 1024 * 1024); - defer allocator.free(buf); + if (std.mem.eql(u8, path, "-i")) { + while (true) { + try stdout.print("> ", .{}); + + const buf = try stdin.readUntilDelimiterAlloc(allocator, '\n', 1024); + defer allocator.free(buf); + + try process_buf(buf, allocator); + } + } else { + std.debug.print("Tokenizing! {s}\n", .{path}); + const file = try std.fs.cwd().openFile(path, .{}); + const buf = try file.readToEndAlloc(allocator, 1 * 1024 * 1024); + defer allocator.free(buf); + try process_buf(buf, allocator); + } +} +fn process_buf(buf: []u8, allocator: std.mem.Allocator) !void { std.debug.print("Buf:\n{s}\n", .{buf}); var token_list = std.ArrayList(tokenizer.Token).init(allocator); |