Browse Source

Parser and Expression nodes for very simple expressions (in form "Identifier.Member.Member").

Re-enabled debugger tooltips.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@2842 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
David Srbecký 18 years ago
parent
commit
44b732e22b
  1. 4
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Debugger.AddIn.csproj
  2. 41
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Expressions/SimpleIdentifierExpression.cs
  3. 44
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Expressions/SimpleMemberReferenceExpression.cs
  4. 27
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Expressions/SimpleParser.cs
  5. 17
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/WindowsDebugger.cs
  6. 2
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/Expressions/Expression.cs
  7. 2
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/Values/Value.Object.cs

4
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Debugger.AddIn.csproj

@ -42,6 +42,9 @@ @@ -42,6 +42,9 @@
</ItemGroup>
<ItemGroup>
<Compile Include="Configuration\AssemblyInfo.cs" />
<Compile Include="Src\Expressions\SimpleIdentifierExpression.cs" />
<Compile Include="Src\Expressions\SimpleMemberReferenceExpression.cs" />
<Compile Include="Src\Expressions\SimpleParser.cs" />
<Compile Include="Src\Pads\BreakPointsPad.cs" />
<Compile Include="Src\Pads\CallStackPad.cs" />
<Compile Include="Src\Pads\ExceptionHistoryPad.cs" />
@ -120,6 +123,7 @@ @@ -120,6 +123,7 @@
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Folder Include="Src\Expressions" />
<Folder Include="Src\TreeModel" />
<Folder Include="Src\TreeModel\Adapters" />
<Folder Include="Src\Variables" />

41
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Expressions/SimpleIdentifierExpression.cs

@ -0,0 +1,41 @@ @@ -0,0 +1,41 @@
// <file>
// <copyright license="BSD-new" see="prj:///COPYING"/>
// <owner name="David Srbecký" email="dsrbecky@gmail.com"/>
// <version>$Revision$</version>
// </file>
using System;
using Debugger;
namespace Debugger.Expressions
{
public class SimpleIdentifierExpression: Expression
{
string identifier;
public string Identifier {
get { return identifier; }
}
public SimpleIdentifierExpression(string identifier)
{
this.identifier = identifier;
}
public override string Code {
get {
return identifier;
}
}
protected override Value EvaluateInternal(StackFrame context)
{
Value value = context.GetValue(identifier);
if (value == null) {
throw new GetValueException("Identifier " + identifier + " not found");
}
return value;
}
}
}

44
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Expressions/SimpleMemberReferenceExpression.cs

@ -0,0 +1,44 @@ @@ -0,0 +1,44 @@
// <file>
// <copyright license="BSD-new" see="prj:///COPYING"/>
// <owner name="David Srbecký" email="dsrbecky@gmail.com"/>
// <version>$Revision$</version>
// </file>
using System;
using Debugger;
namespace Debugger.Expressions
{
public class SimpleMemberReferenceExpression: Expression
{
Expression targetObject;
string member;
public Expression TargetObject {
get { return targetObject; }
}
public string Member {
get { return member; }
}
public SimpleMemberReferenceExpression(Expression targetObject, string member)
{
this.targetObject = targetObject;
this.member = member;
}
public override string Code {
get {
return targetObject.Code + "." + member;
}
}
protected override Value EvaluateInternal(StackFrame context)
{
Value targetValue = targetObject.Evaluate(context);
return targetValue.GetMemberValue(member);
}
}
}

27
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Expressions/SimpleParser.cs

@ -0,0 +1,27 @@ @@ -0,0 +1,27 @@
// <file>
// <copyright license="BSD-new" see="prj:///COPYING"/>
// <owner name="David Srbecký" email="dsrbecky@gmail.com"/>
// <version>$Revision$</version>
// </file>
using System;
using Debugger;
namespace Debugger.Expressions
{
public static class SimpleParser
{
public static Expression Parse(string code)
{
int dotIndex = code.LastIndexOf('.');
if (dotIndex == -1) {
return new SimpleIdentifierExpression(code);
} else {
string member = code.Substring(dotIndex + 1);
string target = code.Substring(0, dotIndex);
return new SimpleMemberReferenceExpression(Parse(target), member);
}
}
}
}

17
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/WindowsDebugger.cs

@ -251,12 +251,17 @@ namespace ICSharpCode.SharpDevelop.Services @@ -251,12 +251,17 @@ namespace ICSharpCode.SharpDevelop.Services
/// </summary>
public Expression GetExpressionFromName(string variableName)
{
return null;
// if (debuggedProcess == null || debuggedProcess.IsRunning) {
// return null;
// } else {
// return new Expression(variableName);
// }
if (debuggedProcess == null || debuggedProcess.IsRunning || debuggedProcess.SelectedStackFrame == null) {
return null;
} else {
Expression expression = Debugger.Expressions.SimpleParser.Parse(variableName);
try {
expression.Evaluate(debuggedProcess.SelectedStackFrame);
return expression;
} catch (GetValueException) {
return null;
}
}
}

2
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/Expressions/Expression.cs

@ -40,7 +40,7 @@ namespace Debugger.Expressions @@ -40,7 +40,7 @@ namespace Debugger.Expressions
throw;
}
context.Process.TraceMessage("Evaluated " + this.Code);
context.Process.TraceMessage("Evaluated " + this.GetType().Name + ": "+ this.Code);
return result;
}

2
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/Values/Value.Object.cs

@ -264,7 +264,7 @@ namespace Debugger @@ -264,7 +264,7 @@ namespace Debugger
}
currentType = currentType.BaseType;
}
throw new DebuggerException("Member " + name + " was not found");
throw new GetValueException("Member " + name + " was not found");
}
/// <summary>

Loading…
Cancel
Save