From 0602a514aae26d20dd8d181816cceb768f77e56f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Srbeck=C3=BD?= Date: Thu, 6 Jul 2006 17:17:59 +0000 Subject: [PATCH] PersistentCorValue merged into PersistentValue git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@1549 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Project/Debugger.Core.csproj | 1 - .../Project/Src/Threads/Function.cs | 2 +- .../Project/Src/Variables/ArrayValue.cs | 2 +- .../Project/Src/Variables/NullValue.cs | 2 +- .../Project/Src/Variables/ObjectValue.cs | 8 +- .../Src/Variables/PersistentCorValue.cs | 87 ------------------- .../Project/Src/Variables/PersistentValue.cs | 75 ++++++++++++++-- .../Project/Src/Variables/PrimitiveValue.cs | 2 +- .../Project/Src/Variables/UnavailableValue.cs | 2 +- .../Project/Src/Variables/Value.cs | 14 +-- 10 files changed, 85 insertions(+), 110 deletions(-) delete mode 100644 src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/PersistentCorValue.cs diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Debugger.Core.csproj b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Debugger.Core.csproj index 791bd0fddd..2c329ed30f 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Debugger.Core.csproj +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Debugger.Core.csproj @@ -381,7 +381,6 @@ - diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Function.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Function.cs index 73882df606..ff16a059f1 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Function.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Function.cs @@ -115,7 +115,7 @@ namespace Debugger return new UnavailableValue(debugger, "Function has expired"); } else { try { - return new ObjectValue(debugger, new PersistentCorValue(debugger, CorILFrame.GetArgument(0)), ContaingClass); + return new ObjectValue(debugger, new PersistentValue(debugger, CorILFrame.GetArgument(0)), ContaingClass); } catch (COMException e) { // System.Runtime.InteropServices.COMException (0x80131304): An IL variable is not available at the current native IP. // See Forum-8640 diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/ArrayValue.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/ArrayValue.cs index 162518bf51..aa618a96be 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/ArrayValue.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/ArrayValue.cs @@ -59,7 +59,7 @@ namespace Debugger } - internal unsafe ArrayValue(NDebugger debugger, PersistentCorValue pCorValue):base(debugger, pCorValue) + internal unsafe ArrayValue(NDebugger debugger, PersistentValue pValue):base(debugger, pValue) { corElementType = (CorElementType)CorArrayValue.ElementType; diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/NullValue.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/NullValue.cs index a357ed853c..5d737f0a94 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/NullValue.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/NullValue.cs @@ -36,7 +36,7 @@ namespace Debugger } } - internal unsafe NullValue(NDebugger debugger, PersistentCorValue pCorValue):base(debugger, pCorValue) + internal unsafe NullValue(NDebugger debugger, PersistentValue pValue):base(debugger, pValue) { } diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/ObjectValue.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/ObjectValue.cs index 8e3ab9966b..ce2f2c0118 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/ObjectValue.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/ObjectValue.cs @@ -85,13 +85,13 @@ namespace Debugger } } - internal unsafe ObjectValue(NDebugger debugger, PersistentCorValue pCorValue):base(debugger, pCorValue) + internal unsafe ObjectValue(NDebugger debugger, PersistentValue pValue):base(debugger, pValue) { corClass = this.CorValue.CastTo().Class; InitObjectVariable(); } - internal unsafe ObjectValue(NDebugger debugger, PersistentCorValue pCorValue, ICorDebugClass corClass):base(debugger, pCorValue) + internal unsafe ObjectValue(NDebugger debugger, PersistentValue pValue, ICorDebugClass corClass):base(debugger, pValue) { this.corClass = corClass; InitObjectVariable(); @@ -295,9 +295,9 @@ namespace Debugger } else { ICorDebugClass superClass = corModuleSuperclass.GetClassFromToken(classProps.SuperClassToken); if (corHandleValue != null) { - return new ObjectValue(debugger, new PersistentCorValue(debugger, corHandleValue.As()), superClass); + return new ObjectValue(debugger, new PersistentValue(debugger, corHandleValue.As()), superClass); } else { - return new ObjectValue(debugger, new PersistentCorValue(debugger, CorValue), superClass); + return new ObjectValue(debugger, new PersistentValue(debugger, CorValue), superClass); } } } diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/PersistentCorValue.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/PersistentCorValue.cs deleted file mode 100644 index 24eeb78fb4..0000000000 --- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/PersistentCorValue.cs +++ /dev/null @@ -1,87 +0,0 @@ -// -// -// -// -// $Revision$ -// - -using System; - -using Debugger.Wrappers.CorDebug; - -namespace Debugger -{ - /// - /// PersistentValue is a container used to obtain the value of a given object even after continue. - /// - public class PersistentCorValue - { - NDebugger debugger; - - ICorDebugValue corValue; - // ICorDebugHandleValue can be used to get corValue back after Continue() - public ICorDebugHandleValue corHandleValue; - PauseSession pauseSessionAtCreation; - DebugeeState debugeeStateAtCreation; - - public NDebugger Debugger { - get { - return debugger; - } - } - - public bool IsExpired { - get { - if (corHandleValue == null) { - return pauseSessionAtCreation != debugger.PauseSession; - } else { - return debugeeStateAtCreation != debugger.DebugeeState; - } - } - } - - public ICorDebugValue CorValue { - get { - if (this.IsExpired) throw new DebuggerException("CorValue has expired"); - - if (pauseSessionAtCreation == debugger.PauseSession) { - return corValue; - } else { - if (corHandleValue == null) { - throw new DebuggerException("CorValue has expired"); - } else { - corValue = PersistentValue.DereferenceUnbox(corHandleValue.As()); - pauseSessionAtCreation = debugger.PauseSession; - return corValue; - } - } - } - } - - public ICorDebugHandleValue SoftReference { - get { - if (this.IsExpired) throw new DebuggerException("CorValue has expired"); - - if (corHandleValue != null) return corHandleValue; - - ICorDebugHeapValue2 heapValue = this.CorValue.As(); - if (heapValue == null) { // TODO: Investigate - hmmm, value types are not at heap? - return null; - } else { - return heapValue.CreateHandle(CorDebugHandleType.HANDLE_WEAK_TRACK_RESURRECTION); - } - } - } - - public PersistentCorValue(NDebugger debugger, ICorDebugValue corValue) - { - this.debugger = debugger; - if (corValue != null) { - this.corHandleValue = corValue.As(); - this.corValue = PersistentValue.DereferenceUnbox(corValue); - } - this.pauseSessionAtCreation = debugger.PauseSession; - this.debugeeStateAtCreation = debugger.DebugeeState; - } - } -} diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/PersistentValue.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/PersistentValue.cs index 5c599b2772..0d35341234 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/PersistentValue.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/PersistentValue.cs @@ -30,7 +30,20 @@ namespace Debugger public delegate ICorDebugValue CorValueGetter(); + NDebugger debugger; + ValueGetter getter; + ICorDebugValue corValue; + // ICorDebugHandleValue can be used to get corValue back after Continue() + public ICorDebugHandleValue corHandleValue; + PauseSession pauseSessionAtCreation; + DebugeeState debugeeStateAtCreation; + + public NDebugger Debugger { + get { + return debugger; + } + } public Value Value { get { @@ -38,6 +51,49 @@ namespace Debugger } } + public bool IsExpired { + get { + if (corHandleValue == null) { + return pauseSessionAtCreation != debugger.PauseSession; + } else { + return debugeeStateAtCreation != debugger.DebugeeState; + } + } + } + + public ICorDebugValue CorValue { + get { + if (this.IsExpired) throw new DebuggerException("CorValue has expired"); + + if (pauseSessionAtCreation == debugger.PauseSession) { + return corValue; + } else { + if (corHandleValue == null) { + throw new DebuggerException("CorValue has expired"); + } else { + corValue = PersistentValue.DereferenceUnbox(corHandleValue.As()); + pauseSessionAtCreation = debugger.PauseSession; + return corValue; + } + } + } + } + + public ICorDebugHandleValue SoftReference { + get { + if (this.IsExpired) throw new DebuggerException("CorValue has expired"); + + if (corHandleValue != null) return corHandleValue; + + ICorDebugHeapValue2 heapValue = this.CorValue.As(); + if (heapValue == null) { // TODO: Investigate - hmmm, value types are not at heap? + return null; + } else { + return heapValue.CreateHandle(CorDebugHandleType.HANDLE_WEAK_TRACK_RESURRECTION); + } + } + } + public PersistentValue(ValueGetter getter) { this.getter = getter; @@ -45,8 +101,15 @@ namespace Debugger public PersistentValue(NDebugger debugger, ICorDebugValue corValue) { - Value val = CreateValue(debugger, corValue); - this.getter = delegate { return val; }; + this.debugger = debugger; + if (corValue != null) { + this.corHandleValue = corValue.As(); + this.corValue = PersistentValue.DereferenceUnbox(corValue); + } + this.pauseSessionAtCreation = debugger.PauseSession; + this.debugeeStateAtCreation = debugger.DebugeeState; + + this.getter = delegate { return CreateValue(debugger, corValue); }; } public PersistentValue(NDebugger debugger, CorValueGetter corValueGetter) @@ -89,7 +152,7 @@ namespace Debugger { ICorDebugValue derefed = DereferenceUnbox(corValue); if (derefed == null) { - return new NullValue(debugger, new PersistentCorValue(debugger, corValue)); + return new NullValue(debugger, new PersistentValue(debugger, corValue)); } CorElementType type = Value.GetCorType(derefed); @@ -111,16 +174,16 @@ namespace Debugger case CorElementType.I: case CorElementType.U: case CorElementType.STRING: - return new PrimitiveValue(debugger, new PersistentCorValue(debugger, corValue)); + return new PrimitiveValue(debugger, new PersistentValue(debugger, corValue)); case CorElementType.ARRAY: case CorElementType.SZARRAY: // Short-cut for single dimension zero lower bound array - return new ArrayValue(debugger, new PersistentCorValue(debugger, corValue)); + return new ArrayValue(debugger, new PersistentValue(debugger, corValue)); case CorElementType.VALUETYPE: case CorElementType.CLASS: case CorElementType.OBJECT: // Short-cut for Class "System.Object" - return new ObjectValue(debugger, new PersistentCorValue(debugger, corValue)); + return new ObjectValue(debugger, new PersistentValue(debugger, corValue)); default: // Unknown type return new UnavailableValue(debugger, "Unknown value type"); diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/PrimitiveValue.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/PrimitiveValue.cs index f702315991..74d0c3d48f 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/PrimitiveValue.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/PrimitiveValue.cs @@ -51,7 +51,7 @@ namespace Debugger } } - internal PrimitiveValue(NDebugger debugger, PersistentCorValue pCorValue):base(debugger, pCorValue) + internal PrimitiveValue(NDebugger debugger, PersistentValue pValue):base(debugger, pValue) { } diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/UnavailableValue.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/UnavailableValue.cs index b902a87784..7b9cb0ab12 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/UnavailableValue.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/UnavailableValue.cs @@ -33,7 +33,7 @@ namespace Debugger } - internal UnavailableValue(NDebugger debugger, string message):base(debugger, new PersistentCorValue(debugger, null)) + internal UnavailableValue(NDebugger debugger, string message):base(debugger, new PersistentValue(debugger, (ICorDebugValue)null)) { this.message = message; } diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/Value.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/Value.cs index c61c51859a..742114e4be 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/Value.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/Value.cs @@ -16,7 +16,7 @@ namespace Debugger public abstract class Value: RemotingObjectBase { protected NDebugger debugger; - PersistentCorValue pCorValue; + PersistentValue pValue; public event EventHandler ValueChanged; @@ -28,19 +28,19 @@ namespace Debugger protected ICorDebugHandleValue corHandleValue { get { - return pCorValue.corHandleValue; + return pValue.corHandleValue; } } internal ICorDebugValue CorValue { get { - return pCorValue.CorValue; + return pValue.CorValue; } } protected ICorDebugHandleValue SoftReference { get { - return pCorValue.SoftReference; + return pValue.SoftReference; } } @@ -49,7 +49,7 @@ namespace Debugger /// public bool IsExpired { get { - return pCorValue.IsExpired; + return pValue.IsExpired; } } @@ -111,10 +111,10 @@ namespace Debugger } } - protected Value(NDebugger debugger, PersistentCorValue pCorValue) + protected Value(NDebugger debugger, PersistentValue pValue) { this.debugger = debugger; - this.pCorValue = pCorValue; + this.pValue = pValue; } public override string ToString()