| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 | #include "Il2CppCompatibleDef.h"#include "vm/Runtime.h"#include "metadata/MetadataModule.h"#include "interpreter/InterpreterModule.h"namespace hybridclr{	Il2CppMethodPointer InitAndGetInterpreterDirectlyCallMethodPointerSlow(MethodInfo* method)	{		IL2CPP_ASSERT(!method->initInterpCallMethodPointer);		method->initInterpCallMethodPointer = true;		bool isAdjustorThunkMethod = IS_CLASS_VALUE_TYPE(method->klass) && hybridclr::metadata::IsInstanceMethod(method);		if (hybridclr::metadata::MetadataModule::IsImplementedByInterpreter(method))		{			method->methodPointerCallByInterp = interpreter::InterpreterModule::GetMethodPointer(method);			if (isAdjustorThunkMethod)			{				method->virtualMethodPointerCallByInterp = interpreter::InterpreterModule::GetAdjustThunkMethodPointer(method);			}			else			{				method->virtualMethodPointerCallByInterp = method->methodPointerCallByInterp;			}			if (method->invoker_method == nullptr#if HYBRIDCLR_UNITY_2021_OR_NEW				|| method->invoker_method == il2cpp::vm::Runtime::GetMissingMethodInvoker()				|| method->has_full_generic_sharing_signature#endif				)			{				method->invoker_method = hybridclr::interpreter::InterpreterModule::GetMethodInvoker(method);			}#if HYBRIDCLR_UNITY_2021_OR_NEW			if (method->methodPointer == nullptr || method->has_full_generic_sharing_signature)			{				method->methodPointer = method->methodPointerCallByInterp;			}			if (method->virtualMethodPointer == nullptr || method->has_full_generic_sharing_signature)			{				method->virtualMethodPointer = method->virtualMethodPointerCallByInterp;			}#else			if (method->methodPointer == nullptr)			{				method->methodPointer = method->virtualMethodPointerCallByInterp;			}#endif			method->isInterpterImpl = true;		}		return method->methodPointerCallByInterp;	}}
 |