func (v *Codegen) addStructType(typ *parser.StructType) { if _, ok := v.structLookup_UseHelperFunction[typ]; ok { return } for _, field := range typ.Variables { if struc, ok := field.Variable.Type.(*parser.StructType); ok { v.addStructType(struc) // TODO check recursive loop } } numOfFields := len(typ.Variables) fields := make([]llvm.Type, numOfFields) packed := false for i, member := range typ.Variables { memberType := v.typeToLLVMType(member.Variable.Type) fields[i] = memberType } structure := llvm.StructType(fields, packed) llvm.AddGlobal(v.curFile.Module, structure, typ.MangledName(parser.MANGLE_ARK_UNSTABLE)) v.structLookup_UseHelperFunction[typ] = structure }