diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Metadata/DebugType.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Metadata/DebugType.cs index bbe962ff09..060585fc0a 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Metadata/DebugType.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Metadata/DebugType.cs @@ -737,6 +737,18 @@ namespace Debugger.MetaData } } + public bool IsYieldEnumerator { + get { + if (this.IsCompilerGenerated) { + foreach(DebugType intf in this.Interfaces) { + if (intf.FullName == typeof(System.Collections.IEnumerator).FullName) + return true; + } + } + return false; + } + } + public override string ToString() { return string.Format("{0}", this.FullName); diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Metadata/MethodInfo.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Metadata/MethodInfo.cs index de471cb9cb..7ae55d4f6d 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Metadata/MethodInfo.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Metadata/MethodInfo.cs @@ -473,6 +473,9 @@ namespace Debugger.MetaData )); } } + } + if (this.DeclaringType.IsYieldEnumerator) { + } return localVariables; } @@ -484,15 +487,19 @@ namespace Debugger.MetaData foreach(FieldInfo fieldInfo in displayClassType.GetFields()) { FieldInfo fieldInfoCopy = fieldInfo; if (!fieldInfo.Name.StartsWith("CS$")) { - vars.Add( - new LocalVariableInfo( - fieldInfo.Name, - fieldInfo.Type, - delegate(StackFrame context) { - return getDisplayClass(context).GetFieldValue(fieldInfoCopy); - } - ) + LocalVariableInfo locVar = new LocalVariableInfo( + fieldInfo.Name, + fieldInfo.Type, + delegate(StackFrame context) { + return getDisplayClass(context).GetFieldValue(fieldInfoCopy); + } ); + locVar.IsCapturedByDelegate = true; + if (fieldInfo.Name.StartsWith("<>") && fieldInfo.Name.EndsWith("__this")) { + locVar.Name = "this"; + locVar.IsThis = true; + } + vars.Add(locVar); } } } @@ -554,22 +561,17 @@ namespace Debugger.MetaData public class LocalVariableInfo { - string name; - DebugType type; ValueGetter getter; - public string Name { - get { return name; } - } - - public DebugType Type { - get { return type; } - } + public string Name { get; internal set; } + public DebugType Type { get; private set; } + public bool IsThis { get; internal set; } + public bool IsCapturedByDelegate { get; internal set; } public LocalVariableInfo(string name, DebugType type, ValueGetter getter) { - this.name = name; - this.type = type; + this.Name = name; + this.Type = type; this.getter = getter; } diff --git a/src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/CompilerGeneratedClasses.cs b/src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/CompilerGeneratedClasses.cs index a5d19ad088..2e8f2df90c 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/CompilerGeneratedClasses.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/CompilerGeneratedClasses.cs @@ -165,7 +165,7 @@ namespace Debugger.Tests { @@ -208,7 +208,7 @@ namespace Debugger.Tests {