#pragma once
|
|
#include <stdint.h>
|
#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
|
{
|
union
|
{
|
TypeDefinitionIndex __typeDefinitionIndex; /* the generic type definition */
|
const Il2CppType* type;
|
};
|
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 Il2CppTypeDefinition* typeHandle;
|
const Il2CppType *type; /* for PTR and SZARRAY */
|
Il2CppArrayType *array; /* for ARRAY */
|
//MonoMethodSignature *method;
|
GenericParameterIndex __genericParameterIndex; /* for VAR and MVAR */
|
const Il2CppGenericParameter* genericParameterHandle;
|
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 struct Il2CppInterfaceOffsetInfo
|
{
|
const Il2CppType* interfaceType;
|
int32_t offset;
|
} Il2CppInterfaceOffsetInfo;
|
|
typedef struct Il2CppMetadataParameterInfo
|
{
|
const char* name;
|
uint32_t token;
|
const Il2CppType* type;
|
} Il2CppMetadataParameterInfo;
|
|
typedef struct Il2CppMetadataPropertyInfo
|
{
|
const char* name;
|
const MethodInfo* get;
|
const MethodInfo* set;
|
uint32_t attrs;
|
uint32_t token;
|
} Il2CppMetadataPropertyInfo;
|
|
typedef struct Il2CppMetadataEventInfo
|
{
|
const char* name;
|
const Il2CppType* type;
|
const MethodInfo* add;
|
const MethodInfo* remove;
|
const MethodInfo* raise;
|
uint32_t token;
|
} Il2CppMetadataEventInfo;
|
|
|
typedef const Il2CppGenericContainer* Il2CppMetadataGenericContainerHandle;
|
typedef const Il2CppGenericParameter* Il2CppMetadataGenericParameterHandle;
|