diff options
| author | Baitinq <[email protected]> | 2025-05-23 00:11:08 +0200 |
|---|---|---|
| committer | Baitinq <[email protected]> | 2025-05-23 00:11:31 +0200 |
| commit | 54b716546131d6e2ad090857ae1178b05eabefee (patch) | |
| tree | 2c1ee8650f3138191bc2096632b9e28b17d1f9df /src/codegen.zig | |
| parent | Parser: Fix cast statement parsing (diff) | |
| download | pry-lang-54b716546131d6e2ad090857ae1178b05eabefee.tar.gz pry-lang-54b716546131d6e2ad090857ae1178b05eabefee.tar.bz2 pry-lang-54b716546131d6e2ad090857ae1178b05eabefee.zip | |
Codegen: Typecheck binary expressions
Diffstat (limited to 'src/codegen.zig')
| -rw-r--r-- | src/codegen.zig | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/src/codegen.zig b/src/codegen.zig index 11b8dd2..7d5308b 100644 --- a/src/codegen.zig +++ b/src/codegen.zig @@ -549,6 +549,9 @@ pub const CodeGen = struct { const lhs_value = try self.generate_expression_value(exp.lhs, null); const rhs_value = try self.generate_expression_value(exp.rhs, null); + std.debug.print("4 TYP {s}: {any} vs {any}\n", .{ name orelse "unknown", lhs_value.node_type.TYPE, rhs_value.node_type.TYPE }); + std.debug.assert(self.compare_types(lhs_value.node_type, rhs_value.node_type, false)); + var result: llvm.LLVMValueRef = undefined; var node_type: *parser.Node = try self.create_node(.{ .TYPE = .{ .SIMPLE_TYPE = .{ .name = "i64", @@ -571,6 +574,9 @@ pub const CodeGen = struct { const lhs_value = try self.generate_expression_value(exp.lhs, null); const rhs_value = try self.generate_expression_value(exp.rhs, null); + std.debug.print("5 TYP {s}: {any} vs {any}\n", .{ name orelse "unknown", lhs_value.node_type.TYPE, rhs_value.node_type.TYPE }); + std.debug.assert(self.compare_types(lhs_value.node_type, rhs_value.node_type, false)); + var result: llvm.LLVMValueRef = undefined; switch (exp.typ) { .MUL => { @@ -626,6 +632,9 @@ pub const CodeGen = struct { const lhs_value = try self.generate_expression_value(exp.lhs, null); const rhs_value = try self.generate_expression_value(exp.rhs, null); + std.debug.print("6 TYP {s}: {any} vs {any}\n", .{ name orelse "unknown", lhs_value.node_type.TYPE, rhs_value.node_type.TYPE }); + std.debug.assert(self.compare_types(lhs_value.node_type, rhs_value.node_type, false)); + const op: c_uint = switch (exp.typ) { .EQ => llvm.LLVMIntEQ, .NE => llvm.LLVMIntNE, |