private bool getMethodInfo(IntPtr _this, CORINFO_METHOD_STRUCT_* ftn, ref CORINFO_METHOD_INFO info) { return Get_CORINFO_METHOD_INFO(HandleToObject(ftn), out info); }
private bool getMethodInfo(CORINFO_METHOD_STRUCT_* ftn, ref CORINFO_METHOD_INFO info) { MethodIL methodIL = Get_CORINFO_METHOD_INFO(HandleToObject(ftn), null, out info); return methodIL != null; }
private bool Get_CORINFO_METHOD_INFO(MethodDesc method, out CORINFO_METHOD_INFO methodInfo) { var methodIL = _compilation.GetMethodIL(method); if (methodIL == null) { methodInfo = default(CORINFO_METHOD_INFO); return false; } methodInfo.ftn = ObjectToHandle(method); methodInfo.scope = (CORINFO_MODULE_STRUCT_*)ObjectToHandle(methodIL); var ilCode = methodIL.GetILBytes(); methodInfo.ILCode = (byte*)GetPin(ilCode); methodInfo.ILCodeSize = (uint)ilCode.Length; methodInfo.maxStack = (uint)methodIL.GetMaxStack(); methodInfo.EHcount = (uint)methodIL.GetExceptionRegions().Length; methodInfo.options = methodIL.GetInitLocals() ? CorInfoOptions.CORINFO_OPT_INIT_LOCALS : (CorInfoOptions)0; methodInfo.regionKind = CorInfoRegionKind.CORINFO_REGION_NONE; Get_CORINFO_SIG_INFO(method.Signature, out methodInfo.args); Get_CORINFO_SIG_INFO(methodIL.GetLocals(), out methodInfo.locals); return true; }
private extern static CorJitResult JitCompileMethod(out IntPtr exception, IntPtr jit, IntPtr thisHandle, IntPtr callbacks, ref CORINFO_METHOD_INFO info, uint flags, out IntPtr nativeEntry, out uint codeSize);
private MethodIL Get_CORINFO_METHOD_INFO(MethodDesc method, MethodIL methodIL, out CORINFO_METHOD_INFO methodInfo) { // MethodIL can be provided externally for the case of a method whose IL was replaced because we couldn't compile it. if (methodIL == null) methodIL = _compilation.GetMethodIL(method); if (methodIL == null) { methodInfo = default(CORINFO_METHOD_INFO); return null; } methodInfo.ftn = ObjectToHandle(method); methodInfo.scope = (CORINFO_MODULE_STRUCT_*)ObjectToHandle(methodIL); var ilCode = methodIL.GetILBytes(); methodInfo.ILCode = (byte*)GetPin(ilCode); methodInfo.ILCodeSize = (uint)ilCode.Length; methodInfo.maxStack = (uint)methodIL.MaxStack; methodInfo.EHcount = (uint)methodIL.GetExceptionRegions().Length; methodInfo.options = methodIL.IsInitLocals ? CorInfoOptions.CORINFO_OPT_INIT_LOCALS : (CorInfoOptions)0; methodInfo.regionKind = CorInfoRegionKind.CORINFO_REGION_NONE; Get_CORINFO_SIG_INFO(method, out methodInfo.args); Get_CORINFO_SIG_INFO(methodIL.GetLocals(), out methodInfo.locals); return methodIL; }
[return: MarshalAs(UnmanagedType.I1)]public virtual bool getMethodInfo_wrapper(IntPtr _this, out IntPtr exception, CORINFO_METHOD_STRUCT_* ftn, ref CORINFO_METHOD_INFO info) { exception = IntPtr.Zero; try { return getMethodInfo(ftn, ref info); } catch (Exception ex) { exception = AllocException(ex); } return false; }
private extern static CorJitResult JitWrapper(out IntPtr exception, IntPtr _this, IntPtr comp, ref CORINFO_METHOD_INFO info, uint flags, out IntPtr nativeEntry, out uint codeSize);
[return: MarshalAs(UnmanagedType.I1)]static bool _getMethodInfo(IntPtr thisHandle, IntPtr* ppException, CORINFO_METHOD_STRUCT_* ftn, ref CORINFO_METHOD_INFO info) { var _this = GetThis(thisHandle); try { return _this.getMethodInfo(ftn, ref info); } catch (Exception ex) { *ppException = _this.AllocException(ex); return default(bool); } }