diff options
| -rw-r--r-- | build.zig | 8 | ||||
| -rw-r--r-- | build.zig.zon | 9 | ||||
| -rw-r--r-- | examples/helloWorld.nya | 2 | ||||
| -rw-r--r-- | src/codegen.zig | 13 | ||||
| -rw-r--r-- | src/main.zig | 32 |
5 files changed, 33 insertions, 31 deletions
@@ -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 |
