From c488d1a21c925ff60ddc5706f2c0991259a75cc8 Mon Sep 17 00:00:00 2001 From: Baitinq Date: Wed, 29 Jan 2025 23:55:19 +0100 Subject: Codegen: Support identifiers in return expressions --- src/codegen.zig | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/codegen.zig b/src/codegen.zig index 4191ebc..d89f163 100644 --- a/src/codegen.zig +++ b/src/codegen.zig @@ -199,10 +199,14 @@ pub const CodeGen = struct { const expression = statement.RETURN_STATEMENT.expression; std.debug.assert(expression.* == parser.Node.PRIMARY_EXPRESSION); - const primary_expr = expression.PRIMARY_EXPRESSION.NUMBER.value; - // std.debug.assert(primary_expr == parser.Node.PRIMARY_EXPRESSION.NUMBER); - _ = core.LLVMBuildRet(self.builder, core.LLVMConstInt(core.LLVMInt64Type(), @intCast(primary_expr), 0)); + const num_argument: types.LLVMValueRef = switch (expression.PRIMARY_EXPRESSION) { + .NUMBER => |n| core.LLVMConstInt(core.LLVMInt64Type(), @intCast(n.value), 0), + .IDENTIFIER => |i| core.LLVMBuildLoad2(self.builder, core.LLVMInt64Type(), self.symbol_table.get(i.name).?.value, "").?, + else => unreachable, + }; + + _ = core.LLVMBuildRet(self.builder, num_argument); } pub fn create_entrypoint(self: *CodeGen) CodeGenError!void { -- cgit 1.4.1