public string GetGenericInstParams(Il2CppGenericInst genericInst) { var genericParameterNames = new List <string>(); var pointers = il2Cpp.MapVATR <ulong>(genericInst.type_argv, genericInst.type_argc); for (int i = 0; i < genericInst.type_argc; i++) { var il2CppType = il2Cpp.GetIl2CppType(pointers[i]); genericParameterNames.Add(GetTypeName(il2CppType, false, false)); } return($"<{string.Join(", ", genericParameterNames)}>"); }
private static string GetGenericTypeParams(Il2CppGenericInst genericInst) { var typeNames = new List <string>(); var pointers = il2cpp.GetPointers(genericInst.type_argv, (long)genericInst.type_argc); for (uint i = 0; i < genericInst.type_argc; ++i) { var oriType = il2cpp.GetIl2CppType(pointers[i]); typeNames.Add(GetTypeName(oriType)); } return($"<{string.Join(", ", typeNames)}>"); }
public Il2CppType[] GetGenericInstParamList(Il2CppGenericInst genericInst) { var genericParameterTypes = new Il2CppType[genericInst.type_argc]; var pointers = il2Cpp.MapVATR <ulong>(genericInst.type_argv, genericInst.type_argc); for (int i = 0; i < genericInst.type_argc; i++) { var il2CppType = il2Cpp.GetIl2CppType(pointers[i]); genericParameterTypes[i] = il2CppType; } return(genericParameterTypes); }
public string GetGenericInstParams(Il2CppGenericInst genericInst) { var typeNames = new List <string>(); var pointers = il2Cpp.MapVATR <ulong>(genericInst.type_argv, genericInst.type_argc); for (uint i = 0; i < genericInst.type_argc; ++i) { var oriType = il2Cpp.GetIl2CppType(pointers[i]); typeNames.Add(GetTypeName(oriType, false, true)); } return($"<{string.Join(", ", typeNames)}>"); }
private static string get_type_name(Il2CppType pType) { string ret; if (pType.type == Il2CppTypeEnum.IL2CPP_TYPE_CLASS || pType.type == Il2CppTypeEnum.IL2CPP_TYPE_VALUETYPE) { Il2CppTypeDefinition klass = metadata.typeDefs[pType.data.klassIndex]; ret = metadata.GetString(klass.nameIndex); } else if (pType.type == Il2CppTypeEnum.IL2CPP_TYPE_GENERICINST) { Il2CppGenericClass generic_class = il2cpp.MapVATR <Il2CppGenericClass>(pType.data.generic_class); Il2CppTypeDefinition pMainDef = metadata.typeDefs[generic_class.typeDefinitionIndex]; ret = metadata.GetString(pMainDef.nameIndex); var typeNames = new List <string>(); Il2CppGenericInst pInst = il2cpp.MapVATR <Il2CppGenericInst>(generic_class.context.class_inst); var pointers = il2cpp.MapVATR <uint>(pInst.type_argv, (int)pInst.type_argc); for (int i = 0; i < pInst.type_argc; ++i) { var pOriType = il2cpp.MapVATR <Il2CppType>(pointers[i]); pOriType.Init(); typeNames.Add(get_type_name(pOriType)); } ret += $"<{string.Join(", ", typeNames)}>"; } else if (pType.type == Il2CppTypeEnum.IL2CPP_TYPE_ARRAY) { Il2CppArrayType arrayType = il2cpp.MapVATR <Il2CppArrayType>(pType.data.array); var type = il2cpp.MapVATR <Il2CppType>(arrayType.etype); type.Init(); ret = $"{get_type_name(type)}[]"; } else if (pType.type == Il2CppTypeEnum.IL2CPP_TYPE_SZARRAY) { var type = il2cpp.MapVATR <Il2CppType>(pType.data.type); type.Init(); ret = $"{get_type_name(type)}[]"; } else { if ((int)pType.type >= szTypeString.Length) { ret = "unknow"; } else { ret = szTypeString[(int)pType.type]; } } return(ret); }
public string GetGenericInstParams(Il2CppGenericInst genericInst) { if (!GenericInstParamsCache.TryGetValue(genericInst, out var value)) { var typeNames = new List <string>(); var pointers = il2Cpp.MapVATR <ulong>(genericInst.type_argv, genericInst.type_argc); for (uint i = 0; i < genericInst.type_argc; ++i) { var oriType = il2Cpp.GetIl2CppType(pointers[i]); typeNames.Add(GetTypeName(oriType, false, false)); } value = $"<{string.Join(", ", typeNames)}>"; GenericInstParamsCache.Add(genericInst, value); } return(value); }