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 {
-