@@ -228,4 +228,75 @@ public static Il2CppTypeDefinition GetDeclaringTypeFromField(Il2CppFieldDefiniti
228228
229229 return FieldDeclaringTypes [ fieldDefinition ] ;
230230 }
231+
232+ public static Il2CppType ? GetTypeFromDefinition ( Il2CppTypeDefinition definition )
233+ {
234+ if ( LibCpp2IlMain . Binary == null )
235+ return null ;
236+
237+ switch ( definition . FullName )
238+ {
239+ case "System.SByte" :
240+ return PrimitiveTypeCache [ Il2CppTypeEnum . IL2CPP_TYPE_I1 ] ;
241+ case "System.Int16" :
242+ return PrimitiveTypeCache [ Il2CppTypeEnum . IL2CPP_TYPE_I2 ] ;
243+ case "System.Int32" :
244+ return PrimitiveTypeCache [ Il2CppTypeEnum . IL2CPP_TYPE_I4 ] ;
245+ case "System.Int64" :
246+ return PrimitiveTypeCache [ Il2CppTypeEnum . IL2CPP_TYPE_I8 ] ;
247+ case "System.Byte" :
248+ return PrimitiveTypeCache [ Il2CppTypeEnum . IL2CPP_TYPE_U1 ] ;
249+ case "System.UInt16" :
250+ return PrimitiveTypeCache [ Il2CppTypeEnum . IL2CPP_TYPE_U2 ] ;
251+ case "System.UInt32" :
252+ return PrimitiveTypeCache [ Il2CppTypeEnum . IL2CPP_TYPE_U4 ] ;
253+ case "System.UInt64" :
254+ return PrimitiveTypeCache [ Il2CppTypeEnum . IL2CPP_TYPE_U8 ] ;
255+ case "System.IntPtr" :
256+ return PrimitiveTypeCache [ Il2CppTypeEnum . IL2CPP_TYPE_I ] ;
257+ case "System.UIntPtr" :
258+ return PrimitiveTypeCache [ Il2CppTypeEnum . IL2CPP_TYPE_U ] ;
259+ case "System.Single" :
260+ return PrimitiveTypeCache [ Il2CppTypeEnum . IL2CPP_TYPE_R4 ] ;
261+ case "System.Double" :
262+ return PrimitiveTypeCache [ Il2CppTypeEnum . IL2CPP_TYPE_R8 ] ;
263+ case "System.Boolean" :
264+ return PrimitiveTypeCache [ Il2CppTypeEnum . IL2CPP_TYPE_BOOLEAN ] ;
265+ case "System.Char" :
266+ return PrimitiveTypeCache [ Il2CppTypeEnum . IL2CPP_TYPE_CHAR ] ;
267+ case "System.String" :
268+ return PrimitiveTypeCache [ Il2CppTypeEnum . IL2CPP_TYPE_STRING ] ;
269+ case "System.Void" :
270+ return PrimitiveTypeCache [ Il2CppTypeEnum . IL2CPP_TYPE_VOID ] ;
271+ case "System.TypedReference" :
272+ return PrimitiveTypeCache [ Il2CppTypeEnum . IL2CPP_TYPE_TYPEDBYREF ] ;
273+ case "System.Object" :
274+ return PrimitiveTypeCache [ Il2CppTypeEnum . IL2CPP_TYPE_OBJECT ] ;
275+ }
276+
277+ var index = definition . TypeIndex ;
278+
279+ if ( Il2CppTypeCache . TryGetValue ( index , out var cachedType ) )
280+ {
281+ return cachedType ;
282+ }
283+
284+ foreach ( var type in LibCpp2IlMain . Binary . AllTypes )
285+ {
286+ if ( type . Type is not Il2CppTypeEnum . IL2CPP_TYPE_CLASS and not Il2CppTypeEnum . IL2CPP_TYPE_VALUETYPE )
287+ continue ;
288+
289+ if ( type . Data . ClassIndex == index && type . Byref == 0 )
290+ {
291+ lock ( Il2CppTypeCache )
292+ {
293+ Il2CppTypeCache [ index ] = type ;
294+ }
295+
296+ return type ;
297+ }
298+ }
299+
300+ return null ;
301+ }
231302}
0 commit comments