@@ -46,7 +46,7 @@ LLVMValueRef create_struct_zero_initializer(CodeGenContext *ctx, const char *str
4646 return NULL ;
4747 }
4848
49- return LLVMConstNull (struct_info -> llvm_type );
49+ return get_default_value (struct_info -> llvm_type );
5050}
5151
5252// Create a copy of a struct
@@ -235,33 +235,10 @@ LLVMValueRef initialize_struct_with_defaults(CodeGenContext *ctx, const char *st
235235
236236 // Initialize each field with appropriate default
237237 for (size_t i = 0 ; i < struct_info -> field_count ; i ++ ) {
238- LLVMValueRef default_value ;
239- LLVMTypeKind kind = LLVMGetTypeKind (struct_info -> field_types [i ]);
240-
241- switch (kind ) {
242- case LLVMIntegerTypeKind :
243- default_value = LLVMConstInt (struct_info -> field_types [i ], 0 , false);
244- break ;
245- case LLVMFloatTypeKind :
246- default_value = LLVMConstReal (struct_info -> field_types [i ], 0.0 );
247- break ;
248- case LLVMDoubleTypeKind :
249- default_value = LLVMConstReal (struct_info -> field_types [i ], 0.0 );
250- break ;
251- case LLVMPointerTypeKind :
252- if (!struct_info -> field_types [i ]) {
253- fprintf (stderr , "Error: field_types[%zu] is NULL\n" , i );
254- return NULL ;
255- }
256- default_value = LLVMConstNull (struct_info -> field_types [i ]);
257- break ;
258- default :
259- if (!struct_info -> field_types [i ]) {
260- fprintf (stderr , "Error: field_types[%zu] is NULL\n" , i );
261- return NULL ;
262- }
263- default_value = LLVMConstNull (struct_info -> field_types [i ]);
264- break ;
238+ LLVMValueRef default_value = get_default_value (struct_info -> field_types [i ]);
239+ if (!default_value ) {
240+ fprintf (stderr , "Error: Cannot create default value for field %zu\n" , i );
241+ return NULL ;
265242 }
266243
267244 LLVMValueRef field_ptr = LLVMBuildStructGEP2 (
0 commit comments