Browse Source

Refactored some long anonymous methods

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/2.0@1270 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
David Srbecký 20 years ago
parent
commit
436025b78c
  1. 65
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Function.cs
  2. 31
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/ArrayValue.cs
  3. 89
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/ObjectValue.cs
  4. 17
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/PropertyVariable.cs

65
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Function.cs

@ -412,28 +412,26 @@ namespace Debugger
} }
} }
internal ICorDebugValue GetArgumentValue(int index)
{
// Non-static functions include 'this' as first argument
return CorILFrame.GetArgument((uint)(IsStatic? index : (index + 1)));
}
public Variable GetArgumentVariable(int index) public Variable GetArgumentVariable(int index)
{ {
return new Variable(debugger, return new Variable(debugger,
GetParameterName(index), GetParameterName(index),
delegate { delegate { return GetArgumentValue(index); });
if (this.HasExpired) { }
return new UnavailableValue(debugger, "Function has expired");
} else { Value GetArgumentValue(int index)
try { {
return Value.CreateValue(debugger, GetArgumentValue(index)); if (this.HasExpired) {
} catch (COMException e) { return new UnavailableValue(debugger, "Function has expired");
if ((uint)e.ErrorCode == 0x80131304) return new UnavailableValue(debugger, "Unavailable in optimized code"); } else {
throw; try {
} // Non-static functions include 'this' as first argument
} return Value.CreateValue(debugger, CorILFrame.GetArgument((uint)(IsStatic? index : (index + 1))));
}); } catch (COMException e) {
if ((uint)e.ErrorCode == 0x80131304) return new UnavailableValue(debugger, "Unavailable in optimized code");
throw;
}
}
} }
public IEnumerable<Variable> ArgumentVariables { public IEnumerable<Variable> ArgumentVariables {
@ -473,20 +471,23 @@ namespace Debugger
{ {
return new Variable(debugger, return new Variable(debugger,
symVar.Name, symVar.Name,
delegate { delegate { return GetValueOfLocalVariable(symVar); });
if (this.HasExpired) { }
return new UnavailableValue(debugger, "Function has expired");
} else { Value GetValueOfLocalVariable(ISymUnmanagedVariable symVar)
ICorDebugValue corValue; {
try { if (this.HasExpired) {
corValue = CorILFrame.GetLocalVariable((uint)symVar.AddressField1); return new UnavailableValue(debugger, "Function has expired");
} catch (COMException e) { } else {
if ((uint)e.ErrorCode == 0x80131304) return new UnavailableValue(debugger, "Unavailable in optimized code"); ICorDebugValue corValue;
throw; try {
} corValue = CorILFrame.GetLocalVariable((uint)symVar.AddressField1);
return Value.CreateValue(debugger, corValue); } catch (COMException e) {
} if ((uint)e.ErrorCode == 0x80131304) return new UnavailableValue(debugger, "Unavailable in optimized code");
}); throw;
}
return Value.CreateValue(debugger, corValue);
}
} }
} }
} }

31
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/ArrayValue.cs

@ -106,20 +106,23 @@ namespace Debugger
return new Variable(debugger, return new Variable(debugger,
elementName, elementName,
delegate { delegate { return GetValueOfItem(indices, getter); });
ArrayValue updatedVal = getter() as ArrayValue; }
if (this.IsEquivalentValue(updatedVal)) {
ICorDebugValue element; Value GetValueOfItem(uint[] indices, ValueGetter getter)
unsafe { {
fixed (void* pIndices = indices) { ArrayValue updatedVal = getter() as ArrayValue;
element = updatedVal.corArrayValue.GetElement(rank, new IntPtr(pIndices)); if (this.IsEquivalentValue(updatedVal)) {
} ICorDebugValue element;
} unsafe {
return Value.CreateValue(debugger, element); fixed (void* pIndices = indices) {
} else { element = updatedVal.corArrayValue.GetElement(rank, new IntPtr(pIndices));
return new UnavailableValue(debugger, "Value is not array"); }
} }
}); return Value.CreateValue(debugger, element);
} else {
return new UnavailableValue(debugger, "Value is not array");
}
} }
public override bool MayHaveSubVariables { public override bool MayHaveSubVariables {

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

@ -146,15 +146,18 @@ namespace Debugger
field.Name, field.Name,
field.IsStatic, field.IsStatic,
field.IsPublic, field.IsPublic,
delegate { delegate { return GetValueOfField(field, getter); });
Value updatedVal = getter(); }
if (updatedVal is UnavailableValue) return updatedVal; }
if (this.IsEquivalentValue(updatedVal)) {
return GetValue(updatedVal, field); Value GetValueOfField(FieldProps field, ValueGetter getter)
} else { {
return new UnavailableValue(debugger, "Object type changed"); Value updatedVal = getter();
} if (updatedVal is UnavailableValue) return updatedVal;
}); if (this.IsEquivalentValue(updatedVal)) {
return GetValue(updatedVal, field);
} else {
return new UnavailableValue(debugger, "Object type changed");
} }
} }
@ -167,35 +170,36 @@ namespace Debugger
method.Name.Remove(0, 4), method.Name.Remove(0, 4),
method.IsStatic, method.IsStatic,
method.IsPublic, method.IsPublic,
delegate { delegate { return CreatePropertyEval(method, getter); });
Value updatedVal = getter();
if (updatedVal is UnavailableValue) return null;
if (this.IsEquivalentValue(updatedVal) && ((ObjectValue)updatedVal).SoftReference != null) {
return CreatePropertyEval(method, getter);
} else {
return null;
}
});
} }
} }
} }
Eval CreatePropertyEval(MethodProps method, ValueGetter getter) Eval CreatePropertyEval(MethodProps method, ValueGetter getter)
{ {
ICorDebugFunction evalCorFunction = Module.CorModule.GetFunctionFromToken(method.Token); Value updatedVal = getter();
if (updatedVal is UnavailableValue) return null;
return new Eval(debugger, evalCorFunction, delegate { if (this.IsEquivalentValue(updatedVal) && ((ObjectValue)updatedVal).SoftReference != null) {
Value updatedVal = getter(); ICorDebugFunction evalCorFunction = Module.CorModule.GetFunctionFromToken(method.Token);
if (this.IsEquivalentValue(updatedVal) && ((ObjectValue)updatedVal).SoftReference != null) {
if (method.IsStatic) { return new Eval(debugger, evalCorFunction, delegate { return GetArgsForEval(method, getter); });
return new ICorDebugValue[] {}; } else {
} else { return null;
return new ICorDebugValue[] {((ObjectValue)updatedVal).SoftReference.CastTo<ICorDebugValue>()}; }
} }
} else {
return null; ICorDebugValue[] GetArgsForEval(MethodProps method, ValueGetter getter)
} {
}); Value updatedVal = getter();
if (this.IsEquivalentValue(updatedVal) && ((ObjectValue)updatedVal).SoftReference != null) {
if (method.IsStatic) {
return new ICorDebugValue[] {};
} else {
return new ICorDebugValue[] {((ObjectValue)updatedVal).SoftReference.CastTo<ICorDebugValue>()};
}
} else {
return null;
}
} }
public override bool IsEquivalentValue(Value val) public override bool IsEquivalentValue(Value val)
@ -231,20 +235,23 @@ namespace Debugger
if (HasBaseClass) { if (HasBaseClass) {
return new Variable(debugger, return new Variable(debugger,
"<Base class>", "<Base class>",
delegate { delegate { return GetBaseClassValue(getter); });
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 { } else {
return null; return null;
} }
} }
Value GetBaseClassValue(ValueGetter getter)
{
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");
}
}
public unsafe ObjectValue BaseClass { public unsafe ObjectValue BaseClass {
get { get {
if (baseClass == null) baseClass = GetBaseClass(); if (baseClass == null) baseClass = GetBaseClass();

17
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/PropertyVariable.cs

@ -24,13 +24,16 @@ namespace Debugger
internal PropertyVariable(NDebugger debugger, string name, bool isStatic, bool isPublic, EvalCreator evalCreator):base(debugger, name, isStatic, isPublic, null) internal PropertyVariable(NDebugger debugger, string name, bool isStatic, bool isPublic, EvalCreator evalCreator):base(debugger, name, isStatic, isPublic, null)
{ {
this.evalCreator = evalCreator; this.evalCreator = evalCreator;
this.valueGetter = delegate { this.valueGetter = delegate { return GetValueOfResult(); };
if (Eval != null) { }
return Eval.Result;
} else { Value GetValueOfResult()
return new UnavailableValue(debugger, "Property has expired"); {
} if (Eval != null) {
}; return Eval.Result;
} else {
return new UnavailableValue(debugger, "Property has expired");
}
} }
public bool IsEvaluated { public bool IsEvaluated {

Loading…
Cancel
Save