summaryrefslogtreecommitdiff
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
parentc658b86a0770ba99c51bdf4e2df9544363468253 (diff)
downloadcalico-main.tar.gz
Updated to zig 0.15.1HEADmain
-rw-r--r--build.zig8
-rw-r--r--build.zig.zon9
-rw-r--r--examples/helloWorld.nya2
-rw-r--r--src/codegen.zig13
-rw-r--r--src/main.zig32
5 files changed, 33 insertions, 31 deletions
diff --git a/build.zig b/build.zig
index ecf494d..e03ef82 100644
--- a/build.zig
+++ b/build.zig
@@ -14,9 +14,9 @@ pub fn build(b: *std.Build) !void {
}),
});
- // const llvm = b.dependency("llvm-zig", .{});
- // _ = try b.modules.put("llvm", llvm.module("llvm"));
- // exe.root_module.addImport("llvm", b.modules.get("llvm").?);
+ const llvm = b.dependency("llvm_zig", .{});
+ _ = try b.modules.put("llvm", llvm.module("llvm"));
+ exe.root_module.addImport("llvm", b.modules.get("llvm").?);
b.installArtifact(exe);
@@ -57,5 +57,5 @@ fn unit_test(
});
const unit_tests = b.addRunArtifact(unit);
test_step.dependOn(&unit_tests.step);
- // unit.root_module.addImport("llvm", b.modules.get("llvm").?);
+ unit.root_module.addImport("llvm", b.modules.get("llvm").?);
}
diff --git a/build.zig.zon b/build.zig.zon
index a90047e..0ccc5ef 100644
--- a/build.zig.zon
+++ b/build.zig.zon
@@ -4,10 +4,11 @@
.fingerprint = 0x3edb7e13aa41863f,
.dependencies = .{
- // .llvm = .{
- // .url = "git+https://github.com/kassane/llvm-zig#1f587a286f3b5d3bc2b6ecaae6655bddfc86120a",
- // .hash = "llvm_zig-1.0.0-IXgkxOJiBACZm15g-MVcLK9RygKIMBAD04sSjEFGjBQZ",
- // },
+ .llvm_zig = .{
+ // .url = "git+https://github.com/nic-gaffney/llvm-zig#63c971d0444610f4ea556a45b44ca01a13310135",
+ // .hash = "llvm_zig-1.0.0-IXgkxLRjBAD2KiKKCarb9OuYN3lpLiGiWsWZUaxYzJya",
+ .path = "../llvm-zig/"
+ },
},
.paths = .{
"",
diff --git a/examples/helloWorld.nya b/examples/helloWorld.nya
index b8048db..b96f1bf 100644
--- a/examples/helloWorld.nya
+++ b/examples/helloWorld.nya
@@ -1,5 +1,5 @@
import fn puts(str: [u8]) -> i32;
fn main() -> i32 {
- return puts("Hello World!\n");
+ return puts("Hello World!");
}
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