codegen: add emitting of unary exprs

This commit is contained in:
Luna 2019-09-28 17:58:17 -03:00
parent 3d47c0cca8
commit c7920246a5
3 changed files with 11 additions and 2 deletions

View file

@ -37,7 +37,7 @@ fn func_refer_param(b: i32) i32 {
fn multwo(num: i32, double_flag: bool) i32 { fn multwo(num: i32, double_flag: bool) i32 {
if (!double_flag) { if (!double_flag) {
var value = false; var value = 32;
return value; return value;
} }

View file

@ -214,9 +214,9 @@ pub const TypeSolver = struct {
}; };
}, },
// for now, unary operators only have .Not
.Unary => |unary| { .Unary => |unary| {
var right_type = try self.resolveExprType(ctx, unary.right); var right_type = try self.resolveExprType(ctx, unary.right);
return switch (unary.op) { return switch (unary.op) {
.Negate => right_type, .Negate => right_type,
.Not => right_type, .Not => right_type,

View file

@ -132,6 +132,15 @@ pub const Codegen = struct {
}; };
}, },
.Unary => |unary| {
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"),
};
},
.Binary => |binary| { .Binary => |binary| {
var left = try self.emitExpr(builder, binary.left); var left = try self.emitExpr(builder, binary.left);
var right = try self.emitExpr(builder, binary.right); var right = try self.emitExpr(builder, binary.right);