diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Expressions/Ast/ArrayIndexerExpression.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Expressions/Ast/ArrayIndexerExpression.cs index 82fa8c413f..46a6d802b7 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Expressions/Ast/ArrayIndexerExpression.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Expressions/Ast/ArrayIndexerExpression.cs @@ -18,6 +18,7 @@ namespace Debugger.Expressions { Expression targetObject; Expression[] arguments; + string name; public Expression TargetObject { get { return targetObject; } @@ -39,6 +40,7 @@ namespace Debugger.Expressions indicesAst.Add(new PrimitiveExpression(indice)); } this.arguments = indicesAst.ToArray(); + this.name = GetName(); } public ArrayIndexerExpression(Expression targetObject, Expression[] arguments) @@ -48,6 +50,24 @@ namespace Debugger.Expressions this.targetObject = targetObject; this.arguments = arguments; + this.name = GetName(); + } + + string GetName() + { + StringBuilder sb = new StringBuilder(); + sb.Append("["); + bool isFirst = true; + foreach(Expression argument in arguments) { + if (isFirst) { + isFirst = false; + } else { + sb.Append(", "); + } + sb.Append(argument.Code); + } + sb.Append("]"); + return sb.ToString(); } public override string Code { @@ -58,19 +78,7 @@ namespace Debugger.Expressions public override string CodeTail { get { - StringBuilder sb = new StringBuilder(); - sb.Append("["); - bool isFirst = true; - foreach(Expression argument in arguments) { - if (isFirst) { - isFirst = false; - } else { - sb.Append(", "); - } - sb.Append(argument.Code); - } - sb.Append("]"); - return sb.ToString(); + return name; } } diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Expressions/Ast/LocalVariableIdentifierExpression.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Expressions/Ast/LocalVariableIdentifierExpression.cs index 17769acb6b..fe80973234 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Expressions/Ast/LocalVariableIdentifierExpression.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Expressions/Ast/LocalVariableIdentifierExpression.cs @@ -20,6 +20,7 @@ namespace Debugger.Expressions { MethodInfo method; ISymUnmanagedVariable symVar; + string name; public MethodInfo Method { get { return method; } @@ -36,11 +37,12 @@ namespace Debugger.Expressions this.method = method; this.symVar = symVar; + this.name = symVar.Name; } public override string Code { get { - return symVar.Name; + return name; } } diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Expressions/Ast/MemberReferenceExpression.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Expressions/Ast/MemberReferenceExpression.cs index c637423939..dc81d38a8d 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Expressions/Ast/MemberReferenceExpression.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Expressions/Ast/MemberReferenceExpression.cs @@ -22,6 +22,7 @@ namespace Debugger.Expressions Expression targetObject; MemberInfo memberInfo; Expression[] arguments; + string name; public Expression TargetObject { get { return targetObject; } @@ -42,6 +43,7 @@ namespace Debugger.Expressions this.targetObject = targetObject; this.memberInfo = memberInfo; this.arguments = arguments ?? new Expression[0]; + this.name = GetName(); } public override string Code { @@ -53,38 +55,43 @@ namespace Debugger.Expressions sb.Append(targetObject.Code); } sb.Append("."); - sb.Append(this.CodeTail); + sb.Append(name); return sb.ToString(); } } public override string CodeTail { get { - StringBuilder sb = new StringBuilder(); - sb.Append(memberInfo.Name); - if (arguments.Length > 0) { - if (memberInfo is PropertyInfo) { - sb.Append("["); - } else { - sb.Append("("); - } - bool isFirst = true; - foreach(Expression argument in arguments) { - if (isFirst) { - isFirst = false; - } else { - sb.Append(", "); - } - sb.Append(argument.Code); - } - if (memberInfo is PropertyInfo) { - sb.Append("]"); + return name; + } + } + + string GetName() + { + StringBuilder sb = new StringBuilder(); + sb.Append(memberInfo.Name); + if (arguments.Length > 0) { + if (memberInfo is PropertyInfo) { + sb.Append("["); + } else { + sb.Append("("); + } + bool isFirst = true; + foreach(Expression argument in arguments) { + if (isFirst) { + isFirst = false; } else { - sb.Append(")"); + sb.Append(", "); } + sb.Append(argument.Code); + } + if (memberInfo is PropertyInfo) { + sb.Append("]"); + } else { + sb.Append(")"); } - return sb.ToString(); } + return sb.ToString(); } protected override Value EvaluateInternal(StackFrame context) diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Expressions/Expression.Create.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Expressions/Expression.Create.cs index 0905e491d4..c9179075dd 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Expressions/Expression.Create.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Expressions/Expression.Create.cs @@ -55,6 +55,7 @@ namespace Debugger.Expressions members.Add(this.AppendPropertyReference(property)); } + members.Sort(); return members.ToArray(); } @@ -87,6 +88,7 @@ namespace Debugger.Expressions pars.Add(new ParameterIdentifierExpression(methodInfo, i)); } + pars.Sort(); return pars.ToArray(); } @@ -99,6 +101,7 @@ namespace Debugger.Expressions vars.Add(new LocalVariableIdentifierExpression(methodInfo, var)); } + vars.Sort(); return vars.ToArray(); } } diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Expressions/Expression.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Expressions/Expression.cs index 70969cb63d..1c248c8d4b 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Expressions/Expression.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Expressions/Expression.cs @@ -14,7 +14,7 @@ namespace Debugger.Expressions /// Represents a piece of code that can be evaluated. /// For example "a[15] + 15". /// - public abstract partial class Expression: DebuggerObject + public abstract partial class Expression: DebuggerObject, IComparable { static Dictionary expressionCache; static DebuggeeState expressionCache_debuggerState; @@ -31,6 +31,11 @@ namespace Debugger.Expressions } } + public int CompareTo(Expression other) + { + return this.CodeTail.CompareTo(other.CodeTail); + } + public override string ToString() { return this.Code;