diff options
| author | Baitinq <[email protected]> | 2025-03-09 00:46:07 +0100 |
|---|---|---|
| committer | Baitinq <[email protected]> | 2025-03-09 00:46:07 +0100 |
| commit | 7dda19a956a19aeaa25fc23d8815dac250b4ae8a (patch) | |
| tree | e84d34665c922b4babc23837a6549a79ab9c9d1c /src/codegen.zig | |
| parent | Feature: Add support for GT and LT operators (diff) | |
| download | pry-lang-7dda19a956a19aeaa25fc23d8815dac250b4ae8a.tar.gz pry-lang-7dda19a956a19aeaa25fc23d8815dac250b4ae8a.tar.bz2 pry-lang-7dda19a956a19aeaa25fc23d8815dac250b4ae8a.zip | |
Feature: Add support for mod operator
Diffstat (limited to 'src/codegen.zig')
| -rw-r--r-- | src/codegen.zig | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/src/codegen.zig b/src/codegen.zig index 1e9a33e..98b7c16 100644 --- a/src/codegen.zig +++ b/src/codegen.zig @@ -380,10 +380,16 @@ pub const CodeGen = struct { const rhs_value = try self.generate_expression_value(exp.rhs, null); var result: types.LLVMValueRef = undefined; - if (exp.multiplication) { - result = core.LLVMBuildMul(self.builder, lhs_value.value, rhs_value.value, "") orelse return CodeGenError.CompilationError; - } else { - result = core.LLVMBuildSDiv(self.builder, lhs_value.value, rhs_value.value, "") orelse return CodeGenError.CompilationError; + switch (exp.typ) { + .MUL => { + result = core.LLVMBuildMul(self.builder, lhs_value.value, rhs_value.value, "") orelse return CodeGenError.CompilationError; + }, + .DIV => { + result = core.LLVMBuildSDiv(self.builder, lhs_value.value, rhs_value.value, "") orelse return CodeGenError.CompilationError; + }, + .MOD => { + result = core.LLVMBuildSRem(self.builder, lhs_value.value, rhs_value.value, "") orelse return CodeGenError.CompilationError; + }, } return self.generate_literal(result, core.LLVMInt64Type(), name); |