Browse Source

Moved some convenience methods from Expression.Create to MethodInfo

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@3181 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
David Srbecký 18 years ago
parent
commit
8b95a3cfb5
  1. 2
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/TreeModel/StackFrameNode.cs
  2. 11
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/StackFrame.cs
  3. 46
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Expressions/Expression.Create.cs
  4. 83
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Metadata/MethodInfo.cs
  5. 2
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Wrappers/MetaData/MetaDataImport.cs

2
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/TreeModel/StackFrameNode.cs

@ -31,7 +31,7 @@ namespace Debugger.AddIn.TreeModel @@ -31,7 +31,7 @@ namespace Debugger.AddIn.TreeModel
IEnumerable<AbstractNode> GetChildNodes()
{
foreach(Expression expr in Expression.MethodVariables(stackFrame.MethodInfo)) {
foreach(Expression expr in stackFrame.MethodInfo.GetExpressionsForAllVariables()) {
yield return ValueNode.Create(expr);
}
if (stackFrame.Thread.CurrentException != null) {

11
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/StackFrame.cs

@ -306,17 +306,18 @@ namespace Debugger @@ -306,17 +306,18 @@ namespace Debugger
}
/// <summary> Gets all arguments of the stack frame. </summary>
public Value[] GetArgumentValues()
public List<Value> GetArgumentValues()
{
List<Value> values = new List<Value>();
for (int i = 0; i < ArgumentCount; i++) {
values.Add(GetArgumentValue(i));
}
return values.ToArray();
return values;
}
#endregion
/// <summary> Returns value of give local variable </summary>
public Value GetLocalVariableValue(ISymUnmanagedVariable symVar)
{
return new Value(this.Process, new LocalVariableIdentifierExpression(MethodInfo, symVar), GetLocalVariableCorValue(symVar));
@ -346,14 +347,14 @@ namespace Debugger @@ -346,14 +347,14 @@ namespace Debugger
return null;
}
/// <summary> Gets all local variables of the stack frame. </summary>
public Value[] GetLocalVariableValues()
/// <summary> Returns all local variables of the stack frame. </summary>
public List<Value> GetLocalVariableValues()
{
List<Value> values = new List<Value>();
foreach(ISymUnmanagedVariable symVar in this.MethodInfo.LocalVariables) {
values.Add(GetLocalVariableValue(symVar));
}
return values.ToArray();
return values;
}
#endregion

46
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Expressions/Expression.Create.cs

@ -58,51 +58,5 @@ namespace Debugger.Expressions @@ -58,51 +58,5 @@ namespace Debugger.Expressions
members.Sort();
return members.ToArray();
}
/// <summary> Get all variables for a method - this; parameters; local variables </summary>
public static Expression[] MethodVariables(MethodInfo methodInfo)
{
List<Expression> vars = new List<Expression>();
if (!methodInfo.IsStatic) {
vars.Add(MethodThis());
}
vars.AddRange(MethodParameters(methodInfo));
vars.AddRange(MethodLocalVariables(methodInfo));
return vars.ToArray();
}
/// <summary> Get 'this' variable for a method </summary>
public static Expression MethodThis()
{
return new ThisReferenceExpression();
}
/// <summary> Get parameters of a method </summary>
public static Expression[] MethodParameters(MethodInfo methodInfo)
{
List<Expression> pars = new List<Expression>();
for(int i = 0; i < methodInfo.ParameterCount; i++) {
pars.Add(new ParameterIdentifierExpression(methodInfo, i));
}
pars.Sort();
return pars.ToArray();
}
/// <summary> Get local variables of a method </summary>
public static Expression[] MethodLocalVariables(MethodInfo methodInfo)
{
List<Expression> vars = new List<Expression>();
foreach(ISymUnmanagedVariable var in methodInfo.LocalVariables) {
vars.Add(new LocalVariableIdentifierExpression(methodInfo, var));
}
vars.Sort();
return vars.ToArray();
}
}
}

83
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Metadata/MethodInfo.cs

@ -5,9 +5,9 @@ @@ -5,9 +5,9 @@
// <version>$Revision$</version>
// </file>
using Debugger.Expressions;
using System;
using System.Collections.Generic;
using Debugger.Wrappers.CorDebug;
using Debugger.Wrappers.CorSym;
using Debugger.Wrappers.MetaData;
@ -253,5 +253,86 @@ namespace Debugger.MetaData @@ -253,5 +253,86 @@ namespace Debugger.MetaData
}
return vars;
}
#region Convenience methods
/// <summary> Returns expression for 'this' value of the stack frame </summary>
public Expression GetExpressionForThis()
{
return new ThisReferenceExpression();
}
/// <summary> Returns expression for argument with the given index </summary>
public Expression GetExpressionForParameter(int index)
{
return new ParameterIdentifierExpression(this, index);
}
/// <summary> Returns expression for argument with the given name </summary>
public Expression GetExpressionForParameter(string name)
{
for(int i = 0; i < this.ParameterCount; i++) {
if (this.GetParameterName(i) == name) {
return GetExpressionForParameter(i);
}
}
return null;
}
/// <summary> Returns expressions for all arguments of this stack frame </summary>
public List<Expression> GetExpressionsForParameters()
{
List<Expression> ret = new List<Expression>();
for (int i = 0; i < this.ParameterCount; i++) {
ret.Add(GetExpressionForParameter(i));
}
ret.Sort();
return ret;
}
/// <summary> Returns expression for the given local variable </summary>
public Expression GetExpressionForLocalVariable(ISymUnmanagedVariable symVar)
{
return new LocalVariableIdentifierExpression(this, symVar);
}
/// <summary> Returns expression for local variable with the given name </summary>
/// <returns> Null if not found </returns>
public Expression GetExpressionForLocalVariable(string name)
{
foreach(ISymUnmanagedVariable symVar in this.LocalVariables) {
if (symVar.Name == name) {
return GetExpressionForLocalVariable(symVar);
}
}
return null;
}
/// <summary> Returns expressions for all local variables </summary>
public List<Expression> GetExpressionsForLocalVariables()
{
List<Expression> ret = new List<Expression>();
foreach(ISymUnmanagedVariable symVar in this.LocalVariables) {
ret.Add(GetExpressionForLocalVariable(symVar));
}
ret.Sort();
return ret;
}
/// <summary> Returns a combined collection of all variables in this stack frame </summary>
public List<Expression> GetExpressionsForAllVariables()
{
List<Expression> vars = new List<Expression>();
if (!this.IsStatic) {
vars.Add(GetExpressionForThis());
}
vars.AddRange(GetExpressionsForParameters());
vars.AddRange(GetExpressionsForLocalVariables());
return vars;
}
#endregion
}
}

2
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Wrappers/MetaData/MetaDataImport.cs

@ -19,7 +19,7 @@ using Debugger.Wrappers.CorSym; @@ -19,7 +19,7 @@ using Debugger.Wrappers.CorSym;
namespace Debugger.Wrappers.MetaData
{
/// <summary>Wrapper for the unmanaged metadata API.</summary>
/// <remarks>http://msdn.microsoft.com/en-us/library/ms233124.aspx</remarks>
/// <remarks>http://msdn.microsoft.com/en-us/library/ms230172.aspx</remarks>
public class MetaDataImport: IDisposable
{
IMetaDataImport metaData;

Loading…
Cancel
Save