fixes for latest zig
This commit is contained in:
parent
9a9008247f
commit
ebf4af6537
3 changed files with 20 additions and 21 deletions
|
@ -30,5 +30,5 @@ fn add(a: i32, b: i32) i32 {
|
|||
}
|
||||
|
||||
fn main() i32 {
|
||||
return 1;
|
||||
return 123;
|
||||
}
|
||||
|
|
|
@ -4,8 +4,7 @@ const llvm = @import("../llvm.zig");
|
|||
const comp = @import("../comp_ctx.zig");
|
||||
const CompileError = @import("../codegen.zig").CompileError;
|
||||
|
||||
fn sliceify(non_slice: ?[*]const u8) []const u8 {
|
||||
if (non_slice == null) return "";
|
||||
fn sliceify(non_slice: ?[*:0]const u8) []const u8 {
|
||||
return non_slice.?[0..std.mem.len(u8, non_slice.?)];
|
||||
}
|
||||
|
||||
|
@ -126,8 +125,8 @@ pub const Codegen = struct {
|
|||
var right = try self.emitExpr(builder, unary.right);
|
||||
|
||||
return switch (unary.op) {
|
||||
.Negate => llvm.LLVMBuildNeg(builder, right, c"neg_tmp"),
|
||||
.Not => llvm.LLVMBuildNot(builder, right, c"neg_tmp"),
|
||||
.Negate => llvm.LLVMBuildNeg(builder, right, "neg_tmp"),
|
||||
.Not => llvm.LLVMBuildNot(builder, right, "neg_tmp"),
|
||||
};
|
||||
},
|
||||
|
||||
|
@ -136,13 +135,13 @@ pub const Codegen = struct {
|
|||
var right = try self.emitExpr(builder, binary.right);
|
||||
|
||||
return switch (binary.op) {
|
||||
.Add => llvm.LLVMBuildAdd(builder, left, right, c"addtmp"),
|
||||
.Sub => llvm.LLVMBuildSub(builder, left, right, c"subtmp"),
|
||||
.Mul => llvm.LLVMBuildMul(builder, left, right, c"multmp"),
|
||||
.Add => llvm.LLVMBuildAdd(builder, left, right, "addtmp"),
|
||||
.Sub => llvm.LLVMBuildSub(builder, left, right, "subtmp"),
|
||||
.Mul => llvm.LLVMBuildMul(builder, left, right, "multmp"),
|
||||
|
||||
//.Div => llvm.LLVMBuildDiv(builder, left, right, c"divtmp"),
|
||||
.And => llvm.LLVMBuildAnd(builder, left, right, c"andtmp"),
|
||||
.Or => llvm.LLVMBuildOr(builder, left, right, c"ortmp"),
|
||||
//.Div => llvm.LLVMBuildDiv(builder, left, right, "divtmp"),
|
||||
.And => llvm.LLVMBuildAnd(builder, left, right, "andtmp"),
|
||||
.Or => llvm.LLVMBuildOr(builder, left, right, "ortmp"),
|
||||
|
||||
else => {
|
||||
std.debug.warn("Unexpected binary operator: '{}'\n", binary.op);
|
||||
|
@ -199,7 +198,7 @@ pub const Codegen = struct {
|
|||
llvm_func.?.value,
|
||||
args_slice.ptr,
|
||||
@intCast(c_uint, args_slice.len),
|
||||
c"call",
|
||||
"call",
|
||||
);
|
||||
},
|
||||
|
||||
|
@ -276,14 +275,14 @@ pub const Codegen = struct {
|
|||
.If => |ifstmt| {
|
||||
var cond = try self.emitExpr(builder, ifstmt.condition);
|
||||
var zero = mkLLVMBool(false);
|
||||
var icmp = llvm.LLVMBuildICmp(builder, llvm.LLVMIntPredicate.LLVMIntNE, cond, zero, c"ifcond");
|
||||
var icmp = llvm.LLVMBuildICmp(builder, llvm.LLVMIntPredicate.LLVMIntNE, cond, zero, "ifcond");
|
||||
|
||||
var insert = llvm.LLVMGetInsertBlock(builder);
|
||||
var function = llvm.LLVMGetBasicBlockParent(insert);
|
||||
|
||||
var then_bb = llvm.LLVMAppendBasicBlock(function, c"then");
|
||||
var else_bb = llvm.LLVMAppendBasicBlock(function, c"else");
|
||||
var merge_bb = llvm.LLVMAppendBasicBlock(function, c"ifcont");
|
||||
var then_bb = llvm.LLVMAppendBasicBlock(function, "then");
|
||||
var else_bb = llvm.LLVMAppendBasicBlock(function, "else");
|
||||
var merge_bb = llvm.LLVMAppendBasicBlock(function, "ifcont");
|
||||
|
||||
var condbr = llvm.LLVMBuildCondBr(builder, icmp, then_bb, else_bb);
|
||||
|
||||
|
@ -514,7 +513,7 @@ pub const Codegen = struct {
|
|||
std.debug.warn("cgen: start gen\n");
|
||||
_ = llvm.LLVMInitializeNativeTarget();
|
||||
|
||||
var mod = llvm.LLVMModuleCreateWithName(c"awoo").?;
|
||||
var mod = llvm.LLVMModuleCreateWithName("awoo").?;
|
||||
defer llvm.LLVMDisposeModule(mod);
|
||||
|
||||
var root_slice = root.Root.toSlice();
|
||||
|
@ -522,15 +521,15 @@ pub const Codegen = struct {
|
|||
try self.genNode(mod, &root_slice[idx]);
|
||||
}
|
||||
|
||||
var err: ?[*]u8 = null;
|
||||
var err: ?[*:0]u8 = null;
|
||||
defer llvm.LLVMDisposeMessage(err);
|
||||
|
||||
if (llvm.LLVMPrintModuleToFile(mod, c"output.ll", &err) != 0) {
|
||||
if (llvm.LLVMPrintModuleToFile(mod, "output.ll", &err) != 0) {
|
||||
std.debug.warn("error printing module to file: {}\n", sliceify(err));
|
||||
return CompileError.BackendError;
|
||||
}
|
||||
|
||||
//if (llvm.LLVMWriteBitcodeToFile(mod, c"awoo.bc") != 0) {
|
||||
//if (llvm.LLVMWriteBitcodeToFile(mod, "awoo.bc") != 0) {
|
||||
// std.debug.warn("error writing bitcode to file: {}\n", sliceify(err));
|
||||
// return CompileError.BackendError;
|
||||
//}
|
||||
|
|
|
@ -60,7 +60,7 @@ pub fn run(allocator: *std.mem.Allocator, slice: []const u8) !Result {
|
|||
try cgen.gen(root);
|
||||
|
||||
var child = try std.ChildProcess.init(
|
||||
[_][]const u8{ "gcc", "src/entry.c", "outpath.o", "-o", "a.out" },
|
||||
&[_][]const u8{ "gcc", "src/entry.c", "outpath.o", "-o", "a.out" },
|
||||
allocator,
|
||||
);
|
||||
try child.spawn();
|
||||
|
|
Loading…
Reference in a new issue