#pragma once #include #include "il2cpp-blob.h" #include "il2cpp-metadata.h" struct Il2CppClass; struct MethodInfo; struct Il2CppType; typedef struct Il2CppArrayType { const Il2CppType* etype; uint8_t rank; uint8_t numsizes; uint8_t numlobounds; int *sizes; int *lobounds; } Il2CppArrayType; typedef struct Il2CppGenericInst { uint32_t type_argc; const Il2CppType **type_argv; } Il2CppGenericInst; typedef struct Il2CppGenericContext { /* The instantiation corresponding to the class generic parameters */ const Il2CppGenericInst *class_inst; /* The instantiation corresponding to the method generic parameters */ const Il2CppGenericInst *method_inst; } Il2CppGenericContext; typedef struct Il2CppGenericParameter { GenericContainerIndex ownerIndex; /* Type or method this parameter was defined in. */ StringIndex nameIndex; GenericParameterConstraintIndex constraintsStart; int16_t constraintsCount; uint16_t num; uint16_t flags; } Il2CppGenericParameter; typedef struct Il2CppGenericContainer { /* index of the generic type definition or the generic method definition corresponding to this container */ int32_t ownerIndex; // either index into Il2CppClass metadata array or Il2CppMethodDefinition array int32_t type_argc; /* If true, we're a generic method, otherwise a generic type definition. */ int32_t is_method; /* Our type parameters. */ GenericParameterIndex genericParameterStart; } Il2CppGenericContainer; typedef struct Il2CppGenericClass { TypeDefinitionIndex typeDefinitionIndex; /* the generic type definition */ Il2CppGenericContext context; /* a context that contains the type instantiation doesn't contain any method instantiation */ Il2CppClass *cached_class; /* if present, the Il2CppClass corresponding to the instantiation. */ } Il2CppGenericClass; typedef struct Il2CppGenericMethod { const MethodInfo* methodDefinition; Il2CppGenericContext context; } Il2CppGenericMethod; typedef struct Il2CppType { union { // We have this dummy field first because pre C99 compilers (MSVC) can only initializer the first value in a union. void* dummy; TypeDefinitionIndex klassIndex; /* for VALUETYPE and CLASS */ const Il2CppType *type; /* for PTR and SZARRAY */ Il2CppArrayType *array; /* for ARRAY */ //MonoMethodSignature *method; GenericParameterIndex genericParameterIndex; /* for VAR and MVAR */ Il2CppGenericClass *generic_class; /* for GENERICINST */ } data; unsigned int attrs : 16; /* param attributes or field flags */ Il2CppTypeEnum type : 8; unsigned int num_mods : 6; /* max 64 modifiers follow at the end */ unsigned int byref : 1; unsigned int pinned : 1; /* valid when included in a local var signature */ //MonoCustomMod modifiers [MONO_ZERO_LEN_ARRAY]; /* this may grow */ } Il2CppType; typedef enum Il2CppCallConvention { IL2CPP_CALL_DEFAULT, IL2CPP_CALL_C, IL2CPP_CALL_STDCALL, IL2CPP_CALL_THISCALL, IL2CPP_CALL_FASTCALL, IL2CPP_CALL_VARARG } Il2CppCallConvention; typedef enum Il2CppCharSet { CHARSET_ANSI, CHARSET_UNICODE, CHARSET_NOT_SPECIFIED } Il2CppCharSet;