summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNic Gaffney <gaffney_nic@protonmail.com>2025-10-24 23:49:56 -0500
committerNic Gaffney <gaffney_nic@protonmail.com>2025-10-24 23:49:56 -0500
commitdb11e3b10cc776fd337e473e2912ebe65380bcce (patch)
treec355b529532f4f03ae0771ac2708b52d05776919 /src
parentc658b86a0770ba99c51bdf4e2df9544363468253 (diff)
downloadcalico-db11e3b10cc776fd337e473e2912ebe65380bcce.tar.gz
Updated to zig 0.15.1HEADmain
Diffstat (limited to 'src')
-rw-r--r--src/codegen.zig13
-rw-r--r--src/main.zig32
2 files changed, 23 insertions, 22 deletions
diff --git a/src/codegen.zig b/src/codegen.zig
index 252cf9c..3423a20 100644
--- a/src/codegen.zig
+++ b/src/codegen.zig
@@ -159,12 +159,13 @@ pub const Generator = struct {
block = fun.block.?;
codeSlice = block.kind.block;
}
- const funcName: [*:0]const u8 = "main";
+
+ const funcName: [*:0]const u8 = try self.allocator.dupeZ(u8, fun.ident.ident);
const retType = toLLVMtype(fun.retType.?, table, null);
- var params = std.ArrayList(types.LLVMTypeRef).init(self.allocator);
+ var params = std.ArrayList(types.LLVMTypeRef){};
for (fun.args) |arg| {
- try params.append(toLLVMtype(arg.typ, table, null));
+ try params.append(self.allocator, toLLVMtype(arg.typ, table, null));
}
const funcType = core.LLVMFunctionType(retType, @ptrCast(params.items), @intCast(params.items.len), 0);
@@ -323,10 +324,10 @@ pub const Generator = struct {
const functype = expr.symtable.getValue(call.ident.ident).?.typ.Function;
const ident = try self.allocator.dupeZ(u8, call.ident.ident);
const function = core.LLVMGetNamedFunction(self.module, ident);
- var args = std.ArrayList(types.LLVMValueRef).init(self.allocator);
+ var args = std.ArrayList(types.LLVMValueRef){};
for (call.args.items, functype.input) |arg, intype| {
if (!std.meta.eql(expr.symtable.getType(arg.typ.?).?, intype)) return {
- try util.comptimeError(.{
+ util.comptimeError(.{
.line = expr.line,
.err = CodegenError.IncorrectType,
.got = try intype.toString(self.allocator),
@@ -334,7 +335,7 @@ pub const Generator = struct {
});
break :blk CodegenError.IncorrectType;
};
- try args.append(try self.genExpr(arg));
+ try args.append(self.allocator, try self.genExpr(arg));
}
std.debug.print("FUNCTYPE: {s}\n", .{call.ident.ident});
std.debug.print("{any}\n", .{function});
diff --git a/src/main.zig b/src/main.zig
index cd4fde9..876d61f 100644
--- a/src/main.zig
+++ b/src/main.zig
@@ -34,12 +34,12 @@ pub fn main() !void {
std.fs.cwd().makeDir("calico-out") catch |err|
if (err != error.PathAlreadyExists) return err;
+
// Setup native code writer
const outFileName = try getFileName(allocator, out_name, "ll");
defer allocator.free(outFileName);
- // const outfile = try std.fs.cwd().createFile(outFileName, .{});
- // const outWriter = outfile.writer();
- // defer outfile.close();
+ const outfile = try std.fs.cwd().createFile(outFileName, .{.truncate = true, .read = true});
+ defer outfile.close();
// Turn the input file into a string
const all = try inputFile.readToEndAlloc(allocator, 2048);
@@ -60,26 +60,26 @@ pub fn main() !void {
var treeNode = tree.asNode();
var pop = symb.Populator.init(arena.allocator());
try pop.populateSymtable(&treeNode);
- // var iter = symbTable.scope.?.symbs.iterator();
- // while (iter.next()) |entry| {
- // std.debug.print("{s} -> {any}\n", .{ entry.key_ptr.*, entry.value_ptr.* });
- // }
+ var iter = symbTable.scope.?.symbs.iterator();
+ while (iter.next()) |entry| {
+ std.debug.print("{s} -> {any}\n", .{ entry.key_ptr.*, entry.value_ptr.* });
+ }
// Codegen
const fname = try allocator.dupeZ(u8, inputFileName.?);
defer allocator.free(fname);
- // var generator = gen.Generator.init(arena.allocator(), tree, @ptrCast(fname));
- // defer generator.deinit();
- // const code = try generator.generate();
- // std.debug.print("{s}\n", .{code});
- // try outWriter.writeAll();
+ var generator = gen.Generator.init(arena.allocator(), tree, @ptrCast(fname));
+ defer generator.deinit();
+ const code = try generator.generate();
+ std.debug.print("{s}\n", .{code});
+ try outfile.writeAll(code);
const binFile = try getFileName(allocator, out_name, "");
defer allocator.free(binFile);
- // const ldargv = [_][]const u8{ "clang", "-o", binFile, outFileName };
- // const ldproc = try std.process.Child.run(.{ .argv = &ldargv, .allocator = allocator });
- // defer allocator.free(ldproc.stdout);
- // defer allocator.free(ldproc.stderr);
+ const ldargv = [_][]const u8{ "clang", "-o", binFile, outFileName };
+ const ldproc = try std.process.Child.run(.{ .argv = &ldargv, .allocator = allocator });
+ defer allocator.free(ldproc.stdout);
+ defer allocator.free(ldproc.stderr);
}
/// Get file extension based on filename