123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- #pragma once
- #include "codegen/il2cpp-codegen-il2cpp.h"
- #include "InterpreterDefs.h"
- namespace hybridclr
- {
- namespace interpreter
- {
-
- struct TypeDesc
- {
- LocationDataType type;
- uint32_t stackObjectSize;
- };
- IL2CPP_FORCE_INLINE void RuntimeInitClassCCtor(Il2CppClass* klass)
- {
- il2cpp::vm::ClassInlines::InitFromCodegen(klass);
- if (!IS_CCTOR_FINISH_OR_NO_CCTOR(klass))
- {
- il2cpp_codegen_runtime_class_init(klass);
- }
- }
- IL2CPP_FORCE_INLINE void RuntimeInitClassCCtor(const MethodInfo* method)
- {
- RuntimeInitClassCCtor(method->klass);
- }
- IL2CPP_FORCE_INLINE void RuntimeInitClassCCtorWithoutInitClass(Il2CppClass* klass)
- {
- if (!IS_CCTOR_FINISH_OR_NO_CCTOR(klass))
- {
- il2cpp_codegen_runtime_class_init(klass);
- }
- }
- IL2CPP_FORCE_INLINE void RuntimeInitClassCCtorWithoutInitClass(const MethodInfo* method)
- {
- RuntimeInitClassCCtorWithoutInitClass(method->klass);
- }
- inline bool IsNeedExpandLocationType(LocationDataType type)
- {
- return type < LocationDataType::U8;
- }
- TypeDesc GetTypeArgDesc(const Il2CppType* type);
- inline LocationDataType GetLocationDataTypeByType(const Il2CppType* type)
- {
- return GetTypeArgDesc(type).type;
- }
- inline void ExpandLocationData2StackDataByType(void* retValue, LocationDataType type)
- {
- switch (type)
- {
- case LocationDataType::I1:
- *(int32_t*)retValue = *(int8_t*)retValue;
- break;
- case LocationDataType::U1:
- *(int32_t*)retValue = *(uint8_t*)retValue;
- break;
- case LocationDataType::I2:
- *(int32_t*)retValue = *(int16_t*)retValue;
- break;
- case LocationDataType::U2:
- *(int32_t*)retValue = *(uint16_t*)retValue;
- break;
- default:
- break;
- }
- }
- inline void CopyLocationData2StackDataByType(StackObject* dst, StackObject* src, LocationDataType type)
- {
- switch (type)
- {
- case LocationDataType::I1:
- *(int32_t*)dst = *(int8_t*)src;
- break;
- case LocationDataType::U1:
- *(int32_t*)dst = *(uint8_t*)src;
- break;
- case LocationDataType::I2:
- *(int32_t*)dst = *(int16_t*)src;
- break;
- case LocationDataType::U2:
- *(int32_t*)dst = *(uint16_t*)src;
- break;
- default:
- *dst = *src;
- break;
- }
- }
- TypeDesc GetValueTypeArgDescBySize(uint32_t size);
-
- Il2CppObject* TranslateNativeValueToBoxValue(const Il2CppType* type, void* value);
- }
- }
|