using System; using System.Linq; using System.Reflection; namespace Indy.IL2CPU { public static class ObjectUtilities { public static bool IsDelegate(Type aType) { if (aType.FullName == "System.Object") { return false; } if (aType.BaseType.FullName == "System.Delegate") { return true; } if (aType.BaseType.FullName == "System.Object") { return false; } return IsDelegate(aType.BaseType); } public static bool IsArray(Type aType) { if (aType.FullName == "System.Object") { return false; } if (aType.BaseType.FullName == "System.Array") { return true; } if (aType.BaseType.FullName == "System.Object") { return false; } return IsArray(aType.BaseType); } public static int GetObjectStorageSize(Type aType) { if (aType == null) { throw new ArgumentNullException("aType"); } var xTypeInfo = Engine.GetTypeInfo(aType); return xTypeInfo.NeedsGC ? xTypeInfo.StorageSize + ObjectImpl.FieldDataOffset : xTypeInfo.StorageSize; } } }