Browse Source

Support for 'this' in delegate-captured variables

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@4844 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
David Srbecký 16 years ago
parent
commit
52ab5010c2
  1. 12
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Metadata/DebugType.cs
  2. 40
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Metadata/MethodInfo.cs
  3. 4
      src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/CompilerGeneratedClasses.cs

12
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Metadata/DebugType.cs

@ -737,6 +737,18 @@ namespace Debugger.MetaData @@ -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);

40
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Metadata/MethodInfo.cs

@ -473,6 +473,9 @@ namespace Debugger.MetaData @@ -473,6 +473,9 @@ namespace Debugger.MetaData
));
}
}
}
if (this.DeclaringType.IsYieldEnumerator) {
}
return localVariables;
}
@ -484,15 +487,19 @@ namespace Debugger.MetaData @@ -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 @@ -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;
}

4
src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/CompilerGeneratedClasses.cs

@ -165,7 +165,7 @@ namespace Debugger.Tests { @@ -165,7 +165,7 @@ namespace Debugger.Tests {
</Item>
<Item>
<AnonymousType
Name="&lt;&gt;4__this"
Name="this"
Value="(()((()(this)).CS$&lt;&gt;8__locals3)).&lt;&gt;4__this = {Debugger.Tests.TestPrograms.CompilerGeneratedClasses}" />
</Item>
</OutterDelegateLocalVariables>
@ -208,7 +208,7 @@ namespace Debugger.Tests { @@ -208,7 +208,7 @@ namespace Debugger.Tests {
</Item>
<Item>
<AnonymousType
Name="&lt;&gt;4__this"
Name="this"
Value="(()((()(this)).CS$&lt;&gt;8__locals3)).&lt;&gt;4__this = {Debugger.Tests.TestPrograms.CompilerGeneratedClasses}" />
</Item>
</InnterDelegateLocalVariables>

Loading…
Cancel
Save