aboutsummaryrefslogtreecommitdiff
path: root/src/main.zig
diff options
context:
space:
mode:
authorMathias Magnusson <mathias@magnusson.space>2025-06-02 16:39:53 +0200
committerMathias Magnusson <mathias@magnusson.space>2025-06-02 16:55:44 +0200
commit601916b828b8d94a89df6950da73ea68a20daa69 (patch)
tree9622f899b040d58b4be103ee8fcd51cda7f91cdb /src/main.zig
parentd456c74b918d309158dc7b075fb28e32b1a18ed8 (diff)
downloadhuginn-601916b828b8d94a89df6950da73ea68a20daa69.tar.gz
make print return integer length
Diffstat (limited to 'src/main.zig')
-rw-r--r--src/main.zig24
1 files changed, 11 insertions, 13 deletions
diff --git a/src/main.zig b/src/main.zig
index dd34c53..6692799 100644
--- a/src/main.zig
+++ b/src/main.zig
@@ -13,16 +13,14 @@ pub fn main() !void {
var args = std.process.args();
_ = args.next();
- const arg = args.next() orelse "";
- const run_path, const out_file = if (std.mem.eql(u8, arg, "run")) blk: {
- const path = try std.fmt.allocPrint(allocator, "/tmp/{}.elf", .{std.crypto.random.int(u32)});
- break :blk .{ path, try std.fs.createFileAbsolute(path, .{ .mode = 0o777 }) };
- } else if (arg.len > 0)
- .{ null, try std.fs.cwd().createFile(arg, .{ .mode = 0o777 }) }
+ const out_path = args.next();
+ const out_file = if (out_path) |path|
+ try std.fs.cwd().createFile(path, .{ .mode = 0o777 })
else
- .{ null, std.io.getStdOut() };
- defer if (run_path) |path| allocator.free(path);
+ std.io.getStdOut();
+ const run = if (args.next()) |arg| std.mem.eql(u8, arg, "run") else false;
+
const output = out_file.writer();
// var br = std.io.bufferedReader(std.io.getStdIn().reader());
@@ -39,9 +37,9 @@ pub fn main() !void {
// }
const source =
+ \\1; 1; 1; 1; 1;
\\print 18446744073709551615;
- \\print (0 - 1);
- \\print 69;
+ \\print (print (0 - 1));
;
var lexer: Lexer = .{ .source = source };
std.debug.print("Tokens:\n", .{});
@@ -67,15 +65,15 @@ pub fn main() !void {
const elf = try codegen.create_elf(allocator, block);
try output.writeAll(elf);
std.debug.print("Run output:\n", .{});
- if (run_path) |path| {
+ if (run) {
out_file.close();
std.debug.print("{}\n", .{std.process.execv(
allocator,
if (target.cpu.arch == .riscv64 and target.os.tag == .linux)
- &.{path}
+ &.{out_path}
else
- &.{ "qemu-riscv64", path },
+ &.{ "qemu-riscv64", out_path.? },
)});
}
}