From b3e2771d11279deec34a507e1404424c162467d1 Mon Sep 17 00:00:00 2001 From: David Gonzalez Martin Date: Fri, 13 Jun 2025 15:34:50 -0600 Subject: [PATCH] Pass 'struct_assignment' --- src/compiler.bbb | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/compiler.bbb b/src/compiler.bbb index cec7a70..5130bcc 100644 --- a/src/compiler.bbb +++ b/src/compiler.bbb @@ -11744,16 +11744,33 @@ emit_assignment = fn (module: &Module, left_llvm: &LLVMValue, left_type: &Type, if (is_constant) { emit_value(module, right, .memory, 1); + >linkage: LLVMLinkage = .internal; >thread_local_mode: LLVMThreadLocalMode = .none; >externally_initialized: u1 = 0; >unnamed_address: LLVMUnnamedAddress = .global; + >global = llvm_create_global_variable(module.llvm.module, value_type.llvm.memory, is_constant, linkage, right.llvm, "const.aggregate", thread_local_mode, externally_initialized, alignment, unnamed_address); + LLVMBuildMemCpy(module.llvm.builder, left_llvm, alignment, global, alignment, byte_size_value); } else { - #trap(); + switch (resolved_value_type.id) + { + .struct => + { + #trap(); + }, + .union => + { + #trap(); + }, + else => + { + #trap(); + }, + } } }, .call => @@ -13581,6 +13598,7 @@ names: [_][]u8 = "select", "slice", "small_struct_ints", + "struct_assignment", ]; [export] main = fn [cc(c)] (argument_count: u32, argv: &&u8, envp: &&u8) s32