Skip to content

Commit b23ddf5

Browse files
ds5678SamboyCoding
authored andcommitted
Add back GetTypeFromDefinition
1 parent 4d1eccb commit b23ddf5

File tree

1 file changed

+71
-0
lines changed

1 file changed

+71
-0
lines changed

LibCpp2IL/Reflection/LibCpp2IlReflection.cs

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)