diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Exception.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Exception.cs index ae5d4b71e5..5fd5234243 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Exception.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Exception.cs @@ -39,7 +39,6 @@ namespace Debugger Value runtimeValue = new Value(process, string.Empty, Expression.Empty, - new IExpirable[] {process.PauseSession}, delegate { return corValue; } ); message = runtimeValue.GetMember("_message").AsString; 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 20a4c71f31..be97a9c9df 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 @@ -441,7 +441,6 @@ namespace Debugger process, "this", new Ast.ThisReferenceExpression(), - new IExpirable[] {this}, delegate { return ThisCorValue; } ); } @@ -510,7 +509,6 @@ namespace Debugger process, name, new Ast.ParameterIdentifierExpression(index, name), - new IExpirable[] {this}, delegate { return GetArgumentCorValue(index); } ); } @@ -601,7 +599,6 @@ namespace Debugger process, symVar.Name, new Ast.LocalVariableIdentifierExpression(symVar), - new IExpirable[] {this}, delegate { return GetCorValueOfLocalVariable(symVar); } ); } diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Thread.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Thread.cs index ea1262737c..127d8858b0 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Thread.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Thread.cs @@ -168,7 +168,6 @@ namespace Debugger process, string.Empty, Expression.Empty, - new IExpirable[] {process.PauseSession}, delegate { return CorThread.Object;} ); } diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/Evals/Eval.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/Evals/Eval.cs index ec5254a4bd..c27909b21d 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/Evals/Eval.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/Evals/Eval.cs @@ -235,7 +235,6 @@ namespace Debugger result = new Value(process, string.Empty, Expression.Empty, - new IExpirable[] {}, delegate { return corEval.Result; }); } } diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/Expressions/Expression.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/Expressions/Expression.cs index 5fe3be108d..0af6df48c4 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/Expressions/Expression.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/Expressions/Expression.cs @@ -20,15 +20,19 @@ namespace Debugger /// public class Expression: DebuggerObject { - public static Expression Empty = null; + public static Expression Empty = new Expression(null); Ast.Expression expressionAst; public string Code { get { - CSharpOutputVisitor csOutVisitor = new CSharpOutputVisitor(); - expressionAst.AcceptVisitor(csOutVisitor, null); - return csOutVisitor.Text; + if (expressionAst != null) { + CSharpOutputVisitor csOutVisitor = new CSharpOutputVisitor(); + expressionAst.AcceptVisitor(csOutVisitor, null); + return csOutVisitor.Text; + } else { + return string.Empty; + } } } diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/Values/Value.Array.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/Values/Value.Array.cs index a9fc553ac0..433aec9792 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/Values/Value.Array.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/Values/Value.Array.cs @@ -80,7 +80,6 @@ namespace Debugger Process, GetNameFromIndices(indices), GetExpressionFromIndices(indices), - new IExpirable[] {this}, delegate { return GetCorValueOfArrayElement(indices); } ); } diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/Values/Value.Object.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/Values/Value.Object.cs index 113a5b7bee..e9ebad05a5 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/Values/Value.Object.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/Values/Value.Object.cs @@ -56,7 +56,6 @@ namespace Debugger objectInstance.Expression, fieldInfo ), - new IExpirable[] {objectInstance}, delegate { return GetFieldCorValue(objectInstance, fieldInfo); } ); } @@ -123,7 +122,6 @@ namespace Debugger objectInstance.Expression, propertyInfo ), - dependencies.ToArray(), delegate { return Value.InvokeMethod(objectInstance, propertyInfo.GetMethod, arguments).RawCorValue; } ); } diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/Values/Value.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/Values/Value.cs index aa07d5cc9e..34884bac6e 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/Values/Value.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/Values/Value.cs @@ -42,7 +42,7 @@ namespace Debugger CorValueGetter corValueGetter; - /// Occurs when the Value can not be used anymore + /// Occurs when the Value can not be used public event EventHandler Expired; bool isExpired = false; @@ -177,10 +177,12 @@ namespace Debugger internal Value(Process process, string name, Expression expression, - IExpirable[] expireDependencies, CorValueGetter corValueGetter) { + this.process = process; this.name = name; + this.expression = expression; + this.corValueGetter = corValueGetter; // TODO: clean up if (name.StartsWith("<") && name.Contains(">") && name != "") { @@ -190,36 +192,13 @@ namespace Debugger } } - this.process = process; - this.expression = expression; - - AddExpireDependency(process); - foreach(IExpirable exp in expireDependencies) { - AddExpireDependency(exp); - } - - this.corValueGetter = corValueGetter; - } - - void AddExpireDependency(IExpirable dependency) - { - if (dependency.HasExpired) { - MakeExpired(); - } else { - dependency.Expired += delegate { MakeExpired(); }; - } - } - - void MakeExpired() - { - if (!isExpired) { - isExpired = true; - OnExpired(new ValueEventArgs(this)); - } + process.DebuggingResumed += delegate { + this.isExpired = true; + OnExpired(EventArgs.Empty); + }; } - /// Is called when the value expires and can not be - /// used anymore + /// Is called when the value expires and can not be used protected virtual void OnExpired(EventArgs e) { if (Expired != null) {