Browse Source

Use Ast visitor to evaluate debugger tooltips

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@3185 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
David Srbecký 17 years ago
parent
commit
a4d47a8c69
  1. 6
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Debugger.AddIn.csproj
  2. 39
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Expressions/AstEvaluator.cs
  3. 63
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Expressions/EvaluateAstVisitor.cs
  4. 574
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Expressions/NotImplementedAstVisitor.cs
  5. 77
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Expressions/SimpleIdentifierExpression.cs
  6. 70
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Expressions/SimpleMemberReferenceExpression.cs
  7. 27
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Expressions/SimpleParser.cs
  8. 33
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/WindowsDebugger.cs
  9. 4
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/TreeModel/ValueNode.cs

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

@ -43,9 +43,9 @@ @@ -43,9 +43,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\Expressions\AstEvaluator.cs" />
<Compile Include="Src\Expressions\EvaluateAstVisitor.cs" />
<Compile Include="Src\Expressions\NotImplementedAstVisitor.cs" />
<Compile Include="Src\Options\DebuggingOptions.cs" />
<Compile Include="Src\Options\DebuggingOptionsPanel.cs" />
<Compile Include="Src\Options\DebuggingOptionsPanel.Designer.cs">

39
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Expressions/AstEvaluator.cs

@ -0,0 +1,39 @@ @@ -0,0 +1,39 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="David Srbecký" email="dsrbecky@gmail.com"/>
// <version>$Revision$</version>
// </file>
using ICSharpCode.NRefactory.Ast;
using System;
using Debugger;
using Debugger.AddIn.TreeModel;
using Debugger.Expressions;
using ICSharpCode.NRefactory;
namespace Debugger.AddIn
{
public static class AstEvaluator
{
public static Debugger.AddIn.TreeModel.AbstractNode Evaluate(string code, SupportedLanguage language, StackFrame context)
{
SnippetParser parser = new SnippetParser(language);
INode astRoot = parser.Parse(code);
if (parser.SnippetType == SnippetType.Expression ||
parser.SnippetType == SnippetType.Statements) {
if (parser.Errors.Count == 0) {
try {
EvaluateAstVisitor visitor = new EvaluateAstVisitor(context);
Value result = (Value)astRoot.AcceptVisitor(visitor, null);
return new ValueNode(result);
} catch (NotImplementedException) {
return null;
} catch (GetValueException e) {
return new ErrorNode(new EmptyExpression(), e);
}
}
}
return null;
}
}
}

63
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Expressions/EvaluateAstVisitor.cs

@ -0,0 +1,63 @@ @@ -0,0 +1,63 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="David Srbecký" email="dsrbecky@gmail.com"/>
// <version>$Revision$</version>
// </file>
using ICSharpCode.NRefactory.Ast;
using System;
namespace Debugger.AddIn
{
public class EvaluateAstVisitor: NotImplementedAstVisitor
{
StackFrame context;
public StackFrame Context {
get { return context; }
}
public EvaluateAstVisitor(StackFrame context)
{
this.context = context;
}
public override object VisitIdentifierExpression(IdentifierExpression identifierExpression, object data)
{
string identifier = identifierExpression.Identifier;
if (identifier == "this") {
return context.GetThisValue();
}
Value arg = context.GetArgumentValue(identifier);
if (arg != null) return arg;
Value local = context.GetLocalVariableValue(identifier);
if (local != null) return local;
if (!context.MethodInfo.IsStatic) {
Value member = context.GetThisValue().GetMemberValue(identifier);
if (member != null) return member;
} else {
MetaData.MemberInfo memberInfo = context.MethodInfo.DeclaringType.GetMember(identifier);
if (memberInfo != null && memberInfo.IsStatic) {
return Value.GetMemberValue(null, memberInfo, null);
}
}
throw new GetValueException("Identifier \"" + identifier + "\" not found in this context");
}
public override object VisitMemberReferenceExpression(MemberReferenceExpression memberReferenceExpression, object data)
{
Value target = (Value)memberReferenceExpression.TargetObject.AcceptVisitor(this, null);
Value member = target.GetMemberValue(memberReferenceExpression.MemberName);
if (member != null) {
return member;
} else {
throw new GetValueException("Member \"" + memberReferenceExpression.MemberName + "\" not found");
}
}
}
}

574
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Expressions/NotImplementedAstVisitor.cs

@ -0,0 +1,574 @@ @@ -0,0 +1,574 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="David Srbecký" email="dsrbecky@gmail.com"/>
// <version>$Revision$</version>
// </file>
using ICSharpCode.NRefactory;
using System;
namespace Debugger.AddIn
{
public class NotImplementedAstVisitor: IAstVisitor
{
public virtual object VisitAddHandlerStatement(ICSharpCode.NRefactory.Ast.AddHandlerStatement addHandlerStatement, object data)
{
throw new NotImplementedException();
}
public virtual object VisitAddressOfExpression(ICSharpCode.NRefactory.Ast.AddressOfExpression addressOfExpression, object data)
{
throw new NotImplementedException();
}
public virtual object VisitAnonymousMethodExpression(ICSharpCode.NRefactory.Ast.AnonymousMethodExpression anonymousMethodExpression, object data)
{
throw new NotImplementedException();
}
public virtual object VisitArrayCreateExpression(ICSharpCode.NRefactory.Ast.ArrayCreateExpression arrayCreateExpression, object data)
{
throw new NotImplementedException();
}
public virtual object VisitAssignmentExpression(ICSharpCode.NRefactory.Ast.AssignmentExpression assignmentExpression, object data)
{
throw new NotImplementedException();
}
public virtual object VisitAttribute(ICSharpCode.NRefactory.Ast.Attribute attribute, object data)
{
throw new NotImplementedException();
}
public virtual object VisitAttributeSection(ICSharpCode.NRefactory.Ast.AttributeSection attributeSection, object data)
{
throw new NotImplementedException();
}
public virtual object VisitBaseReferenceExpression(ICSharpCode.NRefactory.Ast.BaseReferenceExpression baseReferenceExpression, object data)
{
throw new NotImplementedException();
}
public virtual object VisitBinaryOperatorExpression(ICSharpCode.NRefactory.Ast.BinaryOperatorExpression binaryOperatorExpression, object data)
{
throw new NotImplementedException();
}
public virtual object VisitBlockStatement(ICSharpCode.NRefactory.Ast.BlockStatement blockStatement, object data)
{
throw new NotImplementedException();
}
public virtual object VisitBreakStatement(ICSharpCode.NRefactory.Ast.BreakStatement breakStatement, object data)
{
throw new NotImplementedException();
}
public virtual object VisitCaseLabel(ICSharpCode.NRefactory.Ast.CaseLabel caseLabel, object data)
{
throw new NotImplementedException();
}
public virtual object VisitCastExpression(ICSharpCode.NRefactory.Ast.CastExpression castExpression, object data)
{
throw new NotImplementedException();
}
public virtual object VisitCatchClause(ICSharpCode.NRefactory.Ast.CatchClause catchClause, object data)
{
throw new NotImplementedException();
}
public virtual object VisitCheckedExpression(ICSharpCode.NRefactory.Ast.CheckedExpression checkedExpression, object data)
{
throw new NotImplementedException();
}
public virtual object VisitCheckedStatement(ICSharpCode.NRefactory.Ast.CheckedStatement checkedStatement, object data)
{
throw new NotImplementedException();
}
public virtual object VisitClassReferenceExpression(ICSharpCode.NRefactory.Ast.ClassReferenceExpression classReferenceExpression, object data)
{
throw new NotImplementedException();
}
public virtual object VisitCollectionInitializerExpression(ICSharpCode.NRefactory.Ast.CollectionInitializerExpression collectionInitializerExpression, object data)
{
throw new NotImplementedException();
}
public virtual object VisitCompilationUnit(ICSharpCode.NRefactory.Ast.CompilationUnit compilationUnit, object data)
{
throw new NotImplementedException();
}
public virtual object VisitConditionalExpression(ICSharpCode.NRefactory.Ast.ConditionalExpression conditionalExpression, object data)
{
throw new NotImplementedException();
}
public virtual object VisitConstructorDeclaration(ICSharpCode.NRefactory.Ast.ConstructorDeclaration constructorDeclaration, object data)
{
throw new NotImplementedException();
}
public virtual object VisitConstructorInitializer(ICSharpCode.NRefactory.Ast.ConstructorInitializer constructorInitializer, object data)
{
throw new NotImplementedException();
}
public virtual object VisitContinueStatement(ICSharpCode.NRefactory.Ast.ContinueStatement continueStatement, object data)
{
throw new NotImplementedException();
}
public virtual object VisitDeclareDeclaration(ICSharpCode.NRefactory.Ast.DeclareDeclaration declareDeclaration, object data)
{
throw new NotImplementedException();
}
public virtual object VisitDefaultValueExpression(ICSharpCode.NRefactory.Ast.DefaultValueExpression defaultValueExpression, object data)
{
throw new NotImplementedException();
}
public virtual object VisitDelegateDeclaration(ICSharpCode.NRefactory.Ast.DelegateDeclaration delegateDeclaration, object data)
{
throw new NotImplementedException();
}
public virtual object VisitDestructorDeclaration(ICSharpCode.NRefactory.Ast.DestructorDeclaration destructorDeclaration, object data)
{
throw new NotImplementedException();
}
public virtual object VisitDirectionExpression(ICSharpCode.NRefactory.Ast.DirectionExpression directionExpression, object data)
{
throw new NotImplementedException();
}
public virtual object VisitDoLoopStatement(ICSharpCode.NRefactory.Ast.DoLoopStatement doLoopStatement, object data)
{
throw new NotImplementedException();
}
public virtual object VisitElseIfSection(ICSharpCode.NRefactory.Ast.ElseIfSection elseIfSection, object data)
{
throw new NotImplementedException();
}
public virtual object VisitEmptyStatement(ICSharpCode.NRefactory.Ast.EmptyStatement emptyStatement, object data)
{
throw new NotImplementedException();
}
public virtual object VisitEndStatement(ICSharpCode.NRefactory.Ast.EndStatement endStatement, object data)
{
throw new NotImplementedException();
}
public virtual object VisitEraseStatement(ICSharpCode.NRefactory.Ast.EraseStatement eraseStatement, object data)
{
throw new NotImplementedException();
}
public virtual object VisitErrorStatement(ICSharpCode.NRefactory.Ast.ErrorStatement errorStatement, object data)
{
throw new NotImplementedException();
}
public virtual object VisitEventAddRegion(ICSharpCode.NRefactory.Ast.EventAddRegion eventAddRegion, object data)
{
throw new NotImplementedException();
}
public virtual object VisitEventDeclaration(ICSharpCode.NRefactory.Ast.EventDeclaration eventDeclaration, object data)
{
throw new NotImplementedException();
}
public virtual object VisitEventRaiseRegion(ICSharpCode.NRefactory.Ast.EventRaiseRegion eventRaiseRegion, object data)
{
throw new NotImplementedException();
}
public virtual object VisitEventRemoveRegion(ICSharpCode.NRefactory.Ast.EventRemoveRegion eventRemoveRegion, object data)
{
throw new NotImplementedException();
}
public virtual object VisitExitStatement(ICSharpCode.NRefactory.Ast.ExitStatement exitStatement, object data)
{
throw new NotImplementedException();
}
public virtual object VisitExpressionStatement(ICSharpCode.NRefactory.Ast.ExpressionStatement expressionStatement, object data)
{
throw new NotImplementedException();
}
public virtual object VisitFieldDeclaration(ICSharpCode.NRefactory.Ast.FieldDeclaration fieldDeclaration, object data)
{
throw new NotImplementedException();
}
public virtual object VisitFixedStatement(ICSharpCode.NRefactory.Ast.FixedStatement fixedStatement, object data)
{
throw new NotImplementedException();
}
public virtual object VisitForeachStatement(ICSharpCode.NRefactory.Ast.ForeachStatement foreachStatement, object data)
{
throw new NotImplementedException();
}
public virtual object VisitForNextStatement(ICSharpCode.NRefactory.Ast.ForNextStatement forNextStatement, object data)
{
throw new NotImplementedException();
}
public virtual object VisitForStatement(ICSharpCode.NRefactory.Ast.ForStatement forStatement, object data)
{
throw new NotImplementedException();
}
public virtual object VisitGotoCaseStatement(ICSharpCode.NRefactory.Ast.GotoCaseStatement gotoCaseStatement, object data)
{
throw new NotImplementedException();
}
public virtual object VisitGotoStatement(ICSharpCode.NRefactory.Ast.GotoStatement gotoStatement, object data)
{
throw new NotImplementedException();
}
public virtual object VisitIdentifierExpression(ICSharpCode.NRefactory.Ast.IdentifierExpression identifierExpression, object data)
{
throw new NotImplementedException();
}
public virtual object VisitIfElseStatement(ICSharpCode.NRefactory.Ast.IfElseStatement ifElseStatement, object data)
{
throw new NotImplementedException();
}
public virtual object VisitIndexerDeclaration(ICSharpCode.NRefactory.Ast.IndexerDeclaration indexerDeclaration, object data)
{
throw new NotImplementedException();
}
public virtual object VisitIndexerExpression(ICSharpCode.NRefactory.Ast.IndexerExpression indexerExpression, object data)
{
throw new NotImplementedException();
}
public virtual object VisitInnerClassTypeReference(ICSharpCode.NRefactory.Ast.InnerClassTypeReference innerClassTypeReference, object data)
{
throw new NotImplementedException();
}
public virtual object VisitInterfaceImplementation(ICSharpCode.NRefactory.Ast.InterfaceImplementation interfaceImplementation, object data)
{
throw new NotImplementedException();
}
public virtual object VisitInvocationExpression(ICSharpCode.NRefactory.Ast.InvocationExpression invocationExpression, object data)
{
throw new NotImplementedException();
}
public virtual object VisitLabelStatement(ICSharpCode.NRefactory.Ast.LabelStatement labelStatement, object data)
{
throw new NotImplementedException();
}
public virtual object VisitLambdaExpression(ICSharpCode.NRefactory.Ast.LambdaExpression lambdaExpression, object data)
{
throw new NotImplementedException();
}
public virtual object VisitLocalVariableDeclaration(ICSharpCode.NRefactory.Ast.LocalVariableDeclaration localVariableDeclaration, object data)
{
throw new NotImplementedException();
}
public virtual object VisitLockStatement(ICSharpCode.NRefactory.Ast.LockStatement lockStatement, object data)
{
throw new NotImplementedException();
}
public virtual object VisitMemberReferenceExpression(ICSharpCode.NRefactory.Ast.MemberReferenceExpression memberReferenceExpression, object data)
{
throw new NotImplementedException();
}
public virtual object VisitMethodDeclaration(ICSharpCode.NRefactory.Ast.MethodDeclaration methodDeclaration, object data)
{
throw new NotImplementedException();
}
public virtual object VisitNamedArgumentExpression(ICSharpCode.NRefactory.Ast.NamedArgumentExpression namedArgumentExpression, object data)
{
throw new NotImplementedException();
}
public virtual object VisitNamespaceDeclaration(ICSharpCode.NRefactory.Ast.NamespaceDeclaration namespaceDeclaration, object data)
{
throw new NotImplementedException();
}
public virtual object VisitObjectCreateExpression(ICSharpCode.NRefactory.Ast.ObjectCreateExpression objectCreateExpression, object data)
{
throw new NotImplementedException();
}
public virtual object VisitOnErrorStatement(ICSharpCode.NRefactory.Ast.OnErrorStatement onErrorStatement, object data)
{
throw new NotImplementedException();
}
public virtual object VisitOperatorDeclaration(ICSharpCode.NRefactory.Ast.OperatorDeclaration operatorDeclaration, object data)
{
throw new NotImplementedException();
}
public virtual object VisitOptionDeclaration(ICSharpCode.NRefactory.Ast.OptionDeclaration optionDeclaration, object data)
{
throw new NotImplementedException();
}
public virtual object VisitParameterDeclarationExpression(ICSharpCode.NRefactory.Ast.ParameterDeclarationExpression parameterDeclarationExpression, object data)
{
throw new NotImplementedException();
}
public virtual object VisitParenthesizedExpression(ICSharpCode.NRefactory.Ast.ParenthesizedExpression parenthesizedExpression, object data)
{
throw new NotImplementedException();
}
public virtual object VisitPointerReferenceExpression(ICSharpCode.NRefactory.Ast.PointerReferenceExpression pointerReferenceExpression, object data)
{
throw new NotImplementedException();
}
public virtual object VisitPrimitiveExpression(ICSharpCode.NRefactory.Ast.PrimitiveExpression primitiveExpression, object data)
{
throw new NotImplementedException();
}
public virtual object VisitPropertyDeclaration(ICSharpCode.NRefactory.Ast.PropertyDeclaration propertyDeclaration, object data)
{
throw new NotImplementedException();
}
public virtual object VisitPropertyGetRegion(ICSharpCode.NRefactory.Ast.PropertyGetRegion propertyGetRegion, object data)
{
throw new NotImplementedException();
}
public virtual object VisitPropertySetRegion(ICSharpCode.NRefactory.Ast.PropertySetRegion propertySetRegion, object data)
{
throw new NotImplementedException();
}
public virtual object VisitQueryExpression(ICSharpCode.NRefactory.Ast.QueryExpression queryExpression, object data)
{
throw new NotImplementedException();
}
public virtual object VisitQueryExpressionFromClause(ICSharpCode.NRefactory.Ast.QueryExpressionFromClause queryExpressionFromClause, object data)
{
throw new NotImplementedException();
}
public virtual object VisitQueryExpressionGroupClause(ICSharpCode.NRefactory.Ast.QueryExpressionGroupClause queryExpressionGroupClause, object data)
{
throw new NotImplementedException();
}
public virtual object VisitQueryExpressionIntoClause(ICSharpCode.NRefactory.Ast.QueryExpressionIntoClause queryExpressionIntoClause, object data)
{
throw new NotImplementedException();
}
public virtual object VisitQueryExpressionJoinClause(ICSharpCode.NRefactory.Ast.QueryExpressionJoinClause queryExpressionJoinClause, object data)
{
throw new NotImplementedException();
}
public virtual object VisitQueryExpressionLetClause(ICSharpCode.NRefactory.Ast.QueryExpressionLetClause queryExpressionLetClause, object data)
{
throw new NotImplementedException();
}
public virtual object VisitQueryExpressionOrderClause(ICSharpCode.NRefactory.Ast.QueryExpressionOrderClause queryExpressionOrderClause, object data)
{
throw new NotImplementedException();
}
public virtual object VisitQueryExpressionOrdering(ICSharpCode.NRefactory.Ast.QueryExpressionOrdering queryExpressionOrdering, object data)
{
throw new NotImplementedException();
}
public virtual object VisitQueryExpressionSelectClause(ICSharpCode.NRefactory.Ast.QueryExpressionSelectClause queryExpressionSelectClause, object data)
{
throw new NotImplementedException();
}
public virtual object VisitQueryExpressionWhereClause(ICSharpCode.NRefactory.Ast.QueryExpressionWhereClause queryExpressionWhereClause, object data)
{
throw new NotImplementedException();
}
public virtual object VisitRaiseEventStatement(ICSharpCode.NRefactory.Ast.RaiseEventStatement raiseEventStatement, object data)
{
throw new NotImplementedException();
}
public virtual object VisitReDimStatement(ICSharpCode.NRefactory.Ast.ReDimStatement reDimStatement, object data)
{
throw new NotImplementedException();
}
public virtual object VisitRemoveHandlerStatement(ICSharpCode.NRefactory.Ast.RemoveHandlerStatement removeHandlerStatement, object data)
{
throw new NotImplementedException();
}
public virtual object VisitResumeStatement(ICSharpCode.NRefactory.Ast.ResumeStatement resumeStatement, object data)
{
throw new NotImplementedException();
}
public virtual object VisitReturnStatement(ICSharpCode.NRefactory.Ast.ReturnStatement returnStatement, object data)
{
throw new NotImplementedException();
}
public virtual object VisitSizeOfExpression(ICSharpCode.NRefactory.Ast.SizeOfExpression sizeOfExpression, object data)
{
throw new NotImplementedException();
}
public virtual object VisitStackAllocExpression(ICSharpCode.NRefactory.Ast.StackAllocExpression stackAllocExpression, object data)
{
throw new NotImplementedException();
}
public virtual object VisitStopStatement(ICSharpCode.NRefactory.Ast.StopStatement stopStatement, object data)
{
throw new NotImplementedException();
}
public virtual object VisitSwitchSection(ICSharpCode.NRefactory.Ast.SwitchSection switchSection, object data)
{
throw new NotImplementedException();
}
public virtual object VisitSwitchStatement(ICSharpCode.NRefactory.Ast.SwitchStatement switchStatement, object data)
{
throw new NotImplementedException();
}
public virtual object VisitTemplateDefinition(ICSharpCode.NRefactory.Ast.TemplateDefinition templateDefinition, object data)
{
throw new NotImplementedException();
}
public virtual object VisitThisReferenceExpression(ICSharpCode.NRefactory.Ast.ThisReferenceExpression thisReferenceExpression, object data)
{
throw new NotImplementedException();
}
public virtual object VisitThrowStatement(ICSharpCode.NRefactory.Ast.ThrowStatement throwStatement, object data)
{
throw new NotImplementedException();
}
public virtual object VisitTryCatchStatement(ICSharpCode.NRefactory.Ast.TryCatchStatement tryCatchStatement, object data)
{
throw new NotImplementedException();
}
public virtual object VisitTypeDeclaration(ICSharpCode.NRefactory.Ast.TypeDeclaration typeDeclaration, object data)
{
throw new NotImplementedException();
}
public virtual object VisitTypeOfExpression(ICSharpCode.NRefactory.Ast.TypeOfExpression typeOfExpression, object data)
{
throw new NotImplementedException();
}
public virtual object VisitTypeOfIsExpression(ICSharpCode.NRefactory.Ast.TypeOfIsExpression typeOfIsExpression, object data)
{
throw new NotImplementedException();
}
public virtual object VisitTypeReference(ICSharpCode.NRefactory.Ast.TypeReference typeReference, object data)
{
throw new NotImplementedException();
}
public virtual object VisitTypeReferenceExpression(ICSharpCode.NRefactory.Ast.TypeReferenceExpression typeReferenceExpression, object data)
{
throw new NotImplementedException();
}
public virtual object VisitUnaryOperatorExpression(ICSharpCode.NRefactory.Ast.UnaryOperatorExpression unaryOperatorExpression, object data)
{
throw new NotImplementedException();
}
public virtual object VisitUncheckedExpression(ICSharpCode.NRefactory.Ast.UncheckedExpression uncheckedExpression, object data)
{
throw new NotImplementedException();
}
public virtual object VisitUncheckedStatement(ICSharpCode.NRefactory.Ast.UncheckedStatement uncheckedStatement, object data)
{
throw new NotImplementedException();
}
public virtual object VisitUnsafeStatement(ICSharpCode.NRefactory.Ast.UnsafeStatement unsafeStatement, object data)
{
throw new NotImplementedException();
}
public virtual object VisitUsing(ICSharpCode.NRefactory.Ast.Using @using, object data)
{
throw new NotImplementedException();
}
public virtual object VisitUsingDeclaration(ICSharpCode.NRefactory.Ast.UsingDeclaration usingDeclaration, object data)
{
throw new NotImplementedException();
}
public virtual object VisitUsingStatement(ICSharpCode.NRefactory.Ast.UsingStatement usingStatement, object data)
{
throw new NotImplementedException();
}
public virtual object VisitVariableDeclaration(ICSharpCode.NRefactory.Ast.VariableDeclaration variableDeclaration, object data)
{
throw new NotImplementedException();
}
public virtual object VisitWithStatement(ICSharpCode.NRefactory.Ast.WithStatement withStatement, object data)
{
throw new NotImplementedException();
}
public virtual object VisitYieldStatement(ICSharpCode.NRefactory.Ast.YieldStatement yieldStatement, object data)
{
throw new NotImplementedException();
}
}
}

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

@ -1,77 +0,0 @@ @@ -1,77 +0,0 @@
// <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)
{
if (identifier == "this") {
return context.GetThisValue();
}
Value arg = context.GetArgumentValue(identifier);
if (arg != null) return arg;
Value local = context.GetLocalVariableValue(identifier);
if (local != null) return local;
if (!context.MethodInfo.IsStatic) {
Value member = context.GetThisValue().GetMemberValue(identifier);
if (member != null) return member;
} else {
MetaData.MemberInfo memberInfo = context.MethodInfo.DeclaringType.GetMember(identifier);
if (memberInfo != null && memberInfo.IsStatic) {
return Value.GetMemberValue(null, memberInfo, null);
}
}
throw new GetValueException("Identifier \"" + identifier + "\" not found");
}
#region GetHashCode and Equals
public override int GetHashCode()
{
int hashCode = 0;
unchecked {
if (identifier != null) hashCode += 1000000007 * identifier.GetHashCode();
}
return hashCode;
}
public override bool Equals(object obj)
{
SimpleIdentifierExpression other = obj as SimpleIdentifierExpression;
if (other == null) return false;
return this.identifier == other.identifier;
}
#endregion
}
}

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

@ -1,70 +0,0 @@ @@ -1,70 +0,0 @@
// <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);
Value memberValue = targetValue.GetMemberValue(member);
if (memberValue != null) {
return memberValue;
} else {
throw new GetValueException("Member \"" + member + "\" not found");
}
}
#region GetHashCode and Equals
public override int GetHashCode()
{
int hashCode = 0;
unchecked {
if (targetObject != null) hashCode += 1000000007 * targetObject.GetHashCode();
if (member != null) hashCode += 1000000009 * member.GetHashCode();
}
return hashCode;
}
public override bool Equals(object obj)
{
SimpleMemberReferenceExpression other = obj as SimpleMemberReferenceExpression;
if (other == null) return false;
return object.Equals(this.targetObject, other.targetObject) && this.member == other.member;
}
#endregion
}
}

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

@ -1,27 +0,0 @@ @@ -1,27 +0,0 @@
// <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);
}
}
}
}

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

@ -37,7 +37,7 @@ @@ -37,7 +37,7 @@
//
#endregion
using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor;
using ICSharpCode.NRefactory;
using System;
using System.Diagnostics;
using System.IO;
@ -45,11 +45,13 @@ using System.Security.Cryptography; @@ -45,11 +45,13 @@ using System.Security.Cryptography;
using System.Text;
using System.Windows.Forms;
using Debugger;
using Debugger.AddIn;
using Debugger.AddIn.TreeModel;
using Debugger.Core.Wrappers.CorPub;
using Debugger.Expressions;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Debugging;
using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Project;
using Bitmap = System.Drawing.Bitmap;
@ -321,17 +323,12 @@ namespace ICSharpCode.SharpDevelop.Services @@ -321,17 +323,12 @@ namespace ICSharpCode.SharpDevelop.Services
/// Gets variable of given name.
/// Returns null if unsuccessful.
/// </summary>
public Value GetValueFromName(string variableName)
public AbstractNode GetValueFromName(string variableName)
{
if (debuggedProcess == null || debuggedProcess.IsRunning || debuggedProcess.SelectedStackFrame == null) {
return null;
} else {
Expression expression = Debugger.Expressions.SimpleParser.Parse(variableName);
try {
return expression.Evaluate(debuggedProcess.SelectedStackFrame);
} catch (GetValueException) {
return null;
}
return AstEvaluator.Evaluate(variableName, SupportedLanguage.CSharp, debuggedProcess.SelectedStackFrame);
}
}
@ -354,12 +351,12 @@ namespace ICSharpCode.SharpDevelop.Services @@ -354,12 +351,12 @@ namespace ICSharpCode.SharpDevelop.Services
/// </summary>
public string GetValueAsString(string variableName)
{
Value val = GetValueFromName(variableName);
ValueNode node = GetValueFromName(variableName) as ValueNode;
if (val == null) {
if (node == null) {
return null;
} else {
return val.AsString;
return node.Text;
}
}
@ -369,18 +366,14 @@ namespace ICSharpCode.SharpDevelop.Services @@ -369,18 +366,14 @@ namespace ICSharpCode.SharpDevelop.Services
/// </summary>
public DebuggerGridControl GetTooltipControl(string variableName)
{
Value val = GetValueFromName(variableName);
AbstractNode node = GetValueFromName(variableName);
if (val == null) {
if (node == null) {
return null;
} else {
try {
currentTooltipExpression = val.Expression;
currentTooltipRow = new DynamicTreeDebuggerRow(DebuggedProcess, ValueNode.Create(val.Expression));
return new DebuggerGridControl(currentTooltipRow);
} catch (AbortedBecauseDebuggeeResumedException) {
return null;
}
currentTooltipRow = new DynamicTreeDebuggerRow(DebuggedProcess, node);
currentTooltipExpression = node is ValueNode ? ((ValueNode)node).Expression : null;
return new DebuggerGridControl(currentTooltipRow);
}
}

4
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/TreeModel/ValueNode.cs

@ -50,13 +50,13 @@ namespace Debugger.AddIn.TreeModel @@ -50,13 +50,13 @@ namespace Debugger.AddIn.TreeModel
}
/// <summary>
/// Private constructor used by the factory method Create()
/// Constructor used by the factory method Create()
/// </summary>
/// <param name="val"></param>
/// <exception cref="System.Management.Automation.GetValueException">
/// Can be thrown by InvokeToString()
/// </exception>
private ValueNode(Value val)
public ValueNode(Value val)
{
this.expression = val.Expression;

Loading…
Cancel
Save