private static extern void EmitDebugVar(IntPtr objWriter, string name, UInt32 typeIndex, bool isParam, Int32 rangeCount, NativeVarInfo[] range);
private void setVars(IntPtr _this, CORINFO_METHOD_STRUCT_* ftn, uint cVars, NativeVarInfo* vars) { // TODO: Debugging }
private void updateDebugVarInfo(Dictionary<uint, DebugVarInfo> debugVars, string name, bool isParam, NativeVarInfo nativeVarInfo) { DebugVarInfo debugVar; if (!debugVars.TryGetValue(nativeVarInfo.varNumber, out debugVar)) { // TODO: Force an INT32 type (0x0074 in CodeView) for now. Fix it later. // ISSUE #784. debugVar = new DebugVarInfo(name, isParam, typeIndex : 0x0074); debugVars[nativeVarInfo.varNumber] = debugVar; } debugVar.Ranges.Add(nativeVarInfo); }
private void setVars(CORINFO_METHOD_STRUCT_* ftn, uint cVars, NativeVarInfo* vars) { if (_localSlotToInfoMap == null && _parameterIndexToNameMap == null) { return; } uint paramCount = (_parameterIndexToNameMap == null) ? 0 : (uint)_parameterIndexToNameMap.Count; Dictionary<uint, DebugVarInfo> debugVars = new Dictionary<uint, DebugVarInfo>(); int i; for (i = 0; i < cVars; i++) { NativeVarInfo nativeVarInfo = vars[i]; if (nativeVarInfo.varNumber < paramCount) { string name = _parameterIndexToNameMap[nativeVarInfo.varNumber]; updateDebugVarInfo(debugVars, name, true, nativeVarInfo); } else if (_localSlotToInfoMap != null) { ILLocalVariable ilVar; uint slotNumber = nativeVarInfo.varNumber - paramCount; if (_localSlotToInfoMap.TryGetValue(slotNumber, out ilVar)) { updateDebugVarInfo(debugVars, ilVar.Name, false, nativeVarInfo); } } } i = 0; _debugVarInfos = new DebugVarInfo[debugVars.Count]; foreach (var debugVar in debugVars) { _debugVarInfos[i] = debugVar.Value; i++; } }
public virtual void setVars_wrapper(IntPtr _this, out IntPtr exception, CORINFO_METHOD_STRUCT_* ftn, uint cVars, NativeVarInfo* vars) { exception = IntPtr.Zero; try { setVars(ftn, cVars, vars); return; } catch (Exception ex) { exception = AllocException(ex); } }
static void _setVars(IntPtr thisHandle, IntPtr* ppException, CORINFO_METHOD_STRUCT_* ftn, uint cVars, NativeVarInfo* vars) { var _this = GetThis(thisHandle); try { _this.setVars(ftn, cVars, vars); } catch (Exception ex) { *ppException = _this.AllocException(ex); } }