Browse Source

Fixed bug: Base class was not accessible after stepping

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@881 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
David Srbecký 20 years ago
parent
commit
dc978575e8
  1. 25
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/ObjectValue.cs
  2. 10
      src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/DebuggerTests.cs

25
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/ObjectValue.cs

@ -125,7 +125,7 @@ namespace Debugger @@ -125,7 +125,7 @@ namespace Debugger
public override IEnumerable<Variable> GetSubVariables(ValueGetter getter)
{
if (HasBaseClass) {
yield return BaseClassVariable;
yield return GetBaseClassVariable(getter);
}
foreach(Variable var in GetFieldVariables(getter)) {
@ -219,13 +219,22 @@ namespace Debugger @@ -219,13 +219,22 @@ namespace Debugger
}
}
public Variable BaseClassVariable {
get {
if (HasBaseClass) {
return new Variable(this.BaseClass, "<Base class>");
} else {
return null;
}
public Variable GetBaseClassVariable(ValueGetter getter)
{
if (HasBaseClass) {
return new Variable(debugger,
"<Base class>",
delegate {
Value updatedVal = getter();
if (updatedVal is UnavailableValue) return updatedVal;
if (this.IsEquivalentValue(updatedVal)) {
return ((ObjectValue)updatedVal).BaseClass;
} else {
return new UnavailableValue(debugger, "Object type changed");
}
});
} else {
return null;
}
}

10
src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/DebuggerTests.cs

@ -411,11 +411,6 @@ namespace Debugger.Tests @@ -411,11 +411,6 @@ namespace Debugger.Tests
Assert.AreEqual(true, local.MayHaveSubVariables);
Assert.AreEqual(typeof(ObjectValue), local.Value.GetType());
Assert.AreEqual("{Debugger.Tests.TestPrograms.ObjectValue}", local.Value.AsString);
Assert.AreEqual(true, ((ObjectValue)local.Value).HasBaseClass);
baseClass = ((ObjectValue)local.Value).BaseClassVariable;
Assert.AreEqual(typeof(ObjectValue), baseClass.Value.GetType());
Assert.AreEqual(false, baseClass.Value.IsExpired);
Assert.AreEqual("{Debugger.Tests.TestPrograms.BaseClass}", baseClass.Value.AsString);
foreach(Variable var in local.SubVariables) {
subVars.Add(var);
}
@ -425,6 +420,11 @@ namespace Debugger.Tests @@ -425,6 +420,11 @@ namespace Debugger.Tests
Assert.AreEqual(typeof(Variable), subVars[1].GetType());
Assert.AreEqual(typeof(Variable), subVars[2].GetType());
Assert.AreEqual(typeof(PropertyVariable), subVars[3].GetType());
Assert.AreEqual(true, ((ObjectValue)local.Value).HasBaseClass);
baseClass = subVars[0];
Assert.AreEqual(typeof(ObjectValue), baseClass.Value.GetType());
Assert.AreEqual(false, baseClass.Value.IsExpired);
Assert.AreEqual("{Debugger.Tests.TestPrograms.BaseClass}", baseClass.Value.AsString);
debugger.Continue();
WaitForPause(PausedReason.Break, null);

Loading…
Cancel
Save