func (v *Codegen) genDefaultValue(typ parser.Type) llvm.Value { typ = typ.ActualType() // Generate default struct values if structType, ok := typ.(*parser.StructType); ok { lit := createStructInitializer(structType) if lit != nil { return v.genStructLiteral(lit) } else { return llvm.Undef(v.typeToLLVMType(structType)) } } if tupleType, ok := typ.(*parser.TupleType); ok { values := make([]llvm.Value, len(tupleType.Members)) for idx, member := range tupleType.Members { values[idx] = v.genDefaultValue(member) } return llvm.ConstStruct(values, false) } if typ.IsIntegerType() || typ == parser.PRIMITIVE_bool { return llvm.ConstInt(v.typeToLLVMType(typ), 0, false) } if typ.IsFloatingType() { return llvm.ConstFloat(v.typeToLLVMType(typ), 0) } panic("type does not have default value: " + typ.TypeName()) }