Browse Source

Arrays support IList<T> and other interfaces. Added support for object creation.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@5165 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
David Srbecký 16 years ago
parent
commit
f9aded7c29
  1. 1
      src/AddIns/Misc/Debugger/Debugger.Core/Debugger.Core.csproj
  2. 31
      src/AddIns/Misc/Debugger/Debugger.Core/Eval.cs
  3. 137
      src/AddIns/Misc/Debugger/Debugger.Core/MetaData/DebugConstructorInfo.cs
  4. 8
      src/AddIns/Misc/Debugger/Debugger.Core/MetaData/DebugMethodInfo.cs
  5. 19
      src/AddIns/Misc/Debugger/Debugger.Core/MetaData/DebugType.cs
  6. 5
      src/AddIns/Misc/Debugger/Debugger.Core/NDebugger.cs
  7. 33
      src/AddIns/Misc/Debugger/Debugger.Core/NRefactory/Visitors/ExpressionEvaluator.cs
  8. 8
      src/AddIns/Misc/Debugger/Debugger.Core/Value.cs
  9. 5
      src/AddIns/Misc/Debugger/Debugger.Tests/Tests/DebugType_Tests.cs
  10. 4
      src/AddIns/Misc/Debugger/Debugger.Tests/Tests/ExpressionEvaluator_Tests.cs

1
src/AddIns/Misc/Debugger/Debugger.Core/Debugger.Core.csproj

@ -54,6 +54,7 @@ @@ -54,6 +54,7 @@
<Reference Include="System.Windows.Forms" />
</ItemGroup>
<ItemGroup>
<Compile Include="MetaData\DebugConstructorInfo.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="AppDomain.cs" />
<Compile Include="AppDomainCollection.cs" />

31
src/AddIns/Misc/Debugger/Debugger.Core/Eval.cs

@ -355,36 +355,37 @@ namespace Debugger @@ -355,36 +355,37 @@ namespace Debugger
#region Convenience methods
public static Value NewObject(DebugType debugType, Value[] constructorArguments, DebugType[] constructorArgumentsTypes)
public static Value NewObject(DebugMethodInfo constructor, Value[] constructorArguments)
{
return AsyncNewObject(debugType, constructorArguments, constructorArgumentsTypes).WaitForResult();
}
public static Value NewObjectNoConstructor(DebugType debugType)
{
return AsyncNewObjectNoConstructor(debugType).WaitForResult();
return AsyncNewObject(constructor, constructorArguments).WaitForResult();
}
#endregion
public static Eval AsyncNewObject(DebugType debugType, Value[] constructorArguments, DebugType[] constructorArgumentsTypes)
public static Eval AsyncNewObject(DebugMethodInfo constructor, Value[] constructorArguments)
{
ICorDebugValue[] constructorArgsCorDebug = ValuesAsCorDebug(constructorArguments);
DebugMethodInfo constructor = (DebugMethodInfo)debugType.GetMethod(".ctor", constructorArgumentsTypes);
if (constructor == null) {
throw new DebuggerException(string.Format("Type {0} has no constructor overload with given argument types.", debugType.FullName));
}
return new Eval(
debugType.AppDomain,
"New object: " + debugType.FullName,
constructor.AppDomain,
"New object: " + constructor.FullName,
delegate(Eval eval) {
eval.CorEval2.NewParameterizedObject(
constructor.CorFunction, (uint)debugType.GetGenericArguments().Length, debugType.GenericArgumentsAsCorDebugType,
constructor.CorFunction,
(uint)constructor.DeclaringType.GetGenericArguments().Length, ((DebugType)constructor.DeclaringType).GenericArgumentsAsCorDebugType,
(uint)constructorArgsCorDebug.Length, constructorArgsCorDebug);
}
);
}
#region Convenience methods
public static Value NewObjectNoConstructor(DebugType debugType)
{
return AsyncNewObjectNoConstructor(debugType).WaitForResult();
}
#endregion
public static Eval AsyncNewObjectNoConstructor(DebugType debugType)
{
return new Eval(

137
src/AddIns/Misc/Debugger/Debugger.Core/MetaData/DebugConstructorInfo.cs

@ -0,0 +1,137 @@ @@ -0,0 +1,137 @@
// <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 System;
using System.Collections.Generic;
using System.Globalization;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Text;
using Debugger.Interop.CorDebug;
using Debugger.Interop.CorSym;
using Debugger.Interop.MetaData;
using Mono.Cecil.Signatures;
namespace Debugger.MetaData
{
public class DebugConstructorInfo: System.Reflection.ConstructorInfo, IDebugMemberInfo
{
DebugMethodInfo methodInfo;
internal DebugConstructorInfo(DebugMethodInfo methodInfo)
{
this.methodInfo = methodInfo;
}
Debugger.Module IDebugMemberInfo.DebugModule {
get { return methodInfo.DebugModule; }
}
/// <inheritdoc/>
public override Type DeclaringType {
get { return methodInfo.DeclaringType; }
}
/// <inheritdoc/>
public override int MetadataToken {
get { return methodInfo.MetadataToken; }
}
/// <inheritdoc/>
public override System.Reflection.Module Module {
get { return methodInfo.Module; }
}
/// <inheritdoc/>
public override string Name {
get { return methodInfo.Name; }
}
/// <inheritdoc/>
public override Type ReflectedType {
get { return methodInfo.ReflectedType; }
}
/// <inheritdoc/>
public override MethodAttributes Attributes {
get { return methodInfo.Attributes; }
}
/// <inheritdoc/>
public override bool ContainsGenericParameters {
get { return methodInfo.ContainsGenericParameters; }
}
/// <inheritdoc/>
public override bool IsGenericMethod {
get { return methodInfo.IsGenericMethod; }
}
/// <inheritdoc/>
public override bool IsGenericMethodDefinition {
get { return methodInfo.IsGenericMethodDefinition; }
}
/// <inheritdoc/>
public override RuntimeMethodHandle MethodHandle {
get { return methodInfo.MethodHandle; }
}
DebugType IDebugMemberInfo.MemberType {
get { return ((IDebugMemberInfo)methodInfo).MemberType; }
}
/// <inheritdoc/>
public override object[] GetCustomAttributes(bool inherit)
{
return methodInfo.GetCustomAttributes(inherit);
}
/// <inheritdoc/>
public override object[] GetCustomAttributes(Type attributeType, bool inherit)
{
return methodInfo.GetCustomAttributes(attributeType, inherit);
}
/// <inheritdoc/>
public override bool IsDefined(Type attributeType, bool inherit)
{
return methodInfo.IsDefined(attributeType, inherit);
}
/// <inheritdoc/>
public override MethodImplAttributes GetMethodImplementationFlags()
{
return methodInfo.GetMethodImplementationFlags();
}
/// <inheritdoc/>
public override object Invoke(object obj, BindingFlags invokeAttr, Binder binder, object[] parameters, CultureInfo culture)
{
return methodInfo.Invoke(null, invokeAttr, binder, parameters, culture);
}
/// <inheritdoc/>
public override object Invoke(BindingFlags invokeAttr, Binder binder, object[] parameters, CultureInfo culture)
{
return methodInfo.Invoke(null, invokeAttr, binder, parameters, culture);
}
/// <inheritdoc/>
public override ParameterInfo[] GetParameters()
{
return methodInfo.GetParameters();
}
/// <inheritdoc/>
public override string ToString()
{
return methodInfo.ToString();
}
}
}

8
src/AddIns/Misc/Debugger/Debugger.Core/MetaData/DebugMethodInfo.cs

@ -126,7 +126,13 @@ namespace Debugger.MetaData @@ -126,7 +126,13 @@ namespace Debugger.MetaData
foreach(object arg in parameters) {
args.Add((Value)arg);
}
return Eval.InvokeMethod(this, (Value)obj, args.ToArray());
if (this.IsSpecialName && this.Name == ".ctor") {
if (obj != null)
throw new GetValueException("'obj' must be null for constructor call");
return Eval.NewObject(this, args.ToArray());
} else {
return Eval.InvokeMethod(this, (Value)obj, args.ToArray());
}
}
/// <inheritdoc/>

19
src/AddIns/Misc/Debugger/Debugger.Core/MetaData/DebugType.cs

@ -246,8 +246,12 @@ namespace Debugger.MetaData @@ -246,8 +246,12 @@ namespace Debugger.MetaData
/// <inheritdoc/>
protected override ConstructorInfo GetConstructorImpl(BindingFlags bindingAttr, Binder binder, CallingConventions callConvention, Type[] types, ParameterModifier[] modifiers)
{
// TODO
throw new NotSupportedException();
if (bindingAttr == BindingFlags.Default)
bindingAttr = BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly;
MethodInfo ctor = GetMethodImpl(".ctor", bindingAttr, binder, callConvention, types, modifiers);
if (ctor == null)
return null;
return new DebugConstructorInfo((DebugMethodInfo)ctor);
}
/// <inheritdoc/>
@ -1091,6 +1095,7 @@ namespace Debugger.MetaData @@ -1091,6 +1095,7 @@ namespace Debugger.MetaData
corElementType == CorElementType.PTR ||
corElementType == CorElementType.BYREF)
{
// CorDebugClass for arrays "is not loaded" and can not be used
this.elementType = CreateFromCorType(appDomain, corType.GetFirstTypeParameter());
this.module = appDomain.Mscorlib;
this.classProps = new TypeDefProps();
@ -1103,6 +1108,8 @@ namespace Debugger.MetaData @@ -1103,6 +1108,8 @@ namespace Debugger.MetaData
this.ns = this.GetElementType().Namespace;
this.name = this.GetElementType().Name + suffix;
this.fullName = this.GetElementType().FullName + suffix;
if (corElementType == CorElementType.ARRAY || corElementType == CorElementType.SZARRAY)
LoadArrayMembers();
}
if (corElementType == CorElementType.OBJECT ||
@ -1219,6 +1226,14 @@ namespace Debugger.MetaData @@ -1219,6 +1226,14 @@ namespace Debugger.MetaData
return name.ToString();
}
void LoadArrayMembers()
{
// Arrays are special and normal loading does not work for them
DebugType iList = DebugType.CreateFromName(this.AppDomain.Mscorlib, typeof(IList<>).FullName, null, new DebugType[] { (DebugType)this.GetElementType() });
this.interfaces.Add(iList);
this.interfaces.AddRange(iList.interfaces);
}
void LoadMembers()
{
// Load interfaces

5
src/AddIns/Misc/Debugger/Debugger.Core/NDebugger.cs

@ -89,14 +89,15 @@ namespace Debugger @@ -89,14 +89,15 @@ namespace Debugger
/// <summary>
/// Get the .NET version of a given program - eg. "v1.1.4322"
/// </summary>
/// <remarks> Returns empty string for unmanaged applications </remarks>
public string GetProgramVersion(string exeFilename)
{
int size;
NativeMethods.GetRequestedRuntimeVersion(exeFilename, null, 0, out size);
StringBuilder sb = new StringBuilder(size);
NativeMethods.GetRequestedRuntimeVersion(exeFilename, sb, sb.Capacity, out size);
sb.Length = size; // TODO: What is the last char? What is the result for unmanaged apps?
return sb.ToString();
sb.Length = size;
return sb.ToString().TrimEnd('\0');
}
/// <summary>

33
src/AddIns/Misc/Debugger/Debugger.Core/NRefactory/Visitors/ExpressionEvaluator.cs

@ -202,6 +202,15 @@ namespace ICSharpCode.NRefactory.Visitors @@ -202,6 +202,15 @@ namespace ICSharpCode.NRefactory.Visitors
return val;
}
List<TypedValue> EvaluateAll(List<Expression> exprs)
{
List<TypedValue> vals = new List<TypedValue>(exprs.Count);
foreach(Expression expr in exprs) {
vals.Add(Evaluate(expr));
}
return vals;
}
int EvaluateAsInt(INode expression)
{
if (expression is PrimitiveExpression) {
@ -426,10 +435,7 @@ namespace ICSharpCode.NRefactory.Visitors @@ -426,10 +435,7 @@ namespace ICSharpCode.NRefactory.Visitors
int index = EvaluateAsInt(indexerExpression.Indexes[0]);
return CreateValue(((string)target.PrimitiveValue)[index]);
} else {
List<TypedValue> indexes = new List<TypedValue>();
foreach(Expression indexExpr in indexerExpression.Indexes) {
indexes.Add(Evaluate(indexExpr));
}
List<TypedValue> indexes = EvaluateAll(indexerExpression.Indexes);
DebugPropertyInfo pi = (DebugPropertyInfo)target.Type.GetProperty("Item", GetTypes(indexes));
if (pi == null)
throw new GetValueException("The object does not have an indexer property");
@ -470,10 +476,7 @@ namespace ICSharpCode.NRefactory.Visitors @@ -470,10 +476,7 @@ namespace ICSharpCode.NRefactory.Visitors
throw new GetValueException("Member reference expected for method invocation");
}
}
List<TypedValue> args = new List<TypedValue>();
foreach(Expression expr in invocationExpression.Arguments) {
args.Add(Evaluate(expr));
}
List<TypedValue> args = EvaluateAll(invocationExpression.Arguments);
MethodInfo method = targetType.GetMethod(methodName, DebugType.BindingFlagsAllInScope, null, GetTypes(args), null);
if (method == null)
throw new GetValueException("Method " + methodName + " not found");
@ -489,14 +492,12 @@ namespace ICSharpCode.NRefactory.Visitors @@ -489,14 +492,12 @@ namespace ICSharpCode.NRefactory.Visitors
throw new EvaluateException(objectCreateExpression.ObjectInitializer, "Object initializers not supported");
DebugType type = objectCreateExpression.CreateType.ResolveType(context.AppDomain);
List<TypedValue> ctorArgs = new List<TypedValue>(objectCreateExpression.Parameters.Count);
foreach(Expression argExpr in objectCreateExpression.Parameters) {
ctorArgs.Add(Evaluate(argExpr));
}
return new TypedValue(
Eval.NewObject((DebugType)type, GetValues(ctorArgs), GetTypes(ctorArgs)),
type
);
List<TypedValue> ctorArgs = EvaluateAll(objectCreateExpression.Parameters);
ConstructorInfo ctor = type.GetConstructor(BindingFlags.Default, null, CallingConventions.Any, GetTypes(ctorArgs), null);
if (ctor == null)
throw new EvaluateException(objectCreateExpression, "Constructor not found");
Value val = (Value)ctor.Invoke(GetValues(ctorArgs));
return new TypedValue(val, type);
}
public override object VisitArrayCreateExpression(ArrayCreateExpression arrayCreateExpression, object data)

8
src/AddIns/Misc/Debugger/Debugger.Core/Value.cs

@ -436,10 +436,12 @@ namespace Debugger @@ -436,10 +436,12 @@ namespace Debugger
#endregion
public static Value SetFieldValue(Value objectInstance, FieldInfo fieldInfo, Value newValue)
public static void SetFieldValue(Value objectInstance, FieldInfo fieldInfo, Value newValue)
{
// TODO
throw new NotImplementedException();
Value val = GetFieldValue(objectInstance, fieldInfo);
if (!fieldInfo.FieldType.IsAssignableFrom(newValue.Type))
throw new GetValueException("Can not assign {0} to {1}", newValue.Type.FullName, fieldInfo.FieldType.FullName);
val.SetValue(newValue);
}
/// <summary> Get the value of given field. </summary>

5
src/AddIns/Misc/Debugger/Debugger.Tests/Tests/DebugType_Tests.cs

@ -1004,6 +1004,7 @@ namespace Debugger.Tests { @@ -1004,6 +1004,7 @@ namespace Debugger.Tests {
FullName="System.Char[]"
GetArrayRank="1"
GetElementType="System.Char"
GetInterfaces="{System.Collections.Generic.IList`1[System.Char], System.Collections.Generic.ICollection`1[System.Char], System.Collections.Generic.IEnumerable`1[System.Char], System.Collections.IEnumerable}"
GetMembers="{System.Object System.Array.GetValue(Int32[] indices), System.Object System.Array.GetValue(Int32 index), System.Object System.Array.GetValue(Int32 index1, Int32 index2), System.Object System.Array.GetValue(Int32 index1, Int32 index2, Int32 index3), System.Object System.Array.GetValue(Int64 index), System.Object System.Array.GetValue(Int64 index1, Int64 index2), System.Object System.Array.GetValue(Int64 index1, Int64 index2, Int64 index3), System.Object System.Array.GetValue(Int64[] indices), void System.Array.SetValue(Object value, Int32 index), void System.Array.SetValue(Object value, Int32 index1, Int32 index2), void System.Array.SetValue(Object value, Int32 index1, Int32 index2, Int32 index3), void System.Array.SetValue(Object value, Int32[] indices), void System.Array.SetValue(Object value, Int64 index), void System.Array.SetValue(Object value, Int64 index1, Int64 index2), void System.Array.SetValue(Object value, Int64 index1, Int64 index2, Int64 index3), void System.Array.SetValue(Object value, Int64[] indices), System.Int32 System.Array.get_Length(), System.Int64 System.Array.get_LongLength(), System.Int32 System.Array.GetLength(Int32 dimension), System.Int64 System.Array.GetLongLength(Int32 dimension), System.Int32 System.Array.get_Rank(), System.Int32 System.Array.GetUpperBound(Int32 dimension), System.Int32 System.Array.GetLowerBound(Int32 dimension), System.Object System.Array.get_SyncRoot(), System.Boolean System.Array.get_IsReadOnly(), System.Boolean System.Array.get_IsFixedSize(), System.Boolean System.Array.get_IsSynchronized(), System.Object System.Array.Clone(), System.Int32 System.Array.CompareTo(Object other, IComparer comparer), System.Boolean System.Array.Equals(Object other, IEqualityComparer comparer), System.Int32 System.Array.GetHashCode(IEqualityComparer comparer), void System.Array.CopyTo(Array array, Int32 index), void System.Array.CopyTo(Array array, Int64 index), System.Collections.IEnumerator System.Array.GetEnumerator(), void System.Array.Initialize(), System.Int32 Length, System.Int64 LongLength, System.Int32 Rank, System.Object SyncRoot, System.Boolean IsReadOnly, System.Boolean IsFixedSize, System.Boolean IsSynchronized, void System.Object..ctor(), System.String System.Object.ToString(), System.Boolean System.Object.Equals(Object obj), System.Int32 System.Object.GetHashCode(), System.Type System.Object.GetType()}"
GetMethods="{System.Object System.Array.GetValue(Int32[] indices), System.Object System.Array.GetValue(Int32 index), System.Object System.Array.GetValue(Int32 index1, Int32 index2), System.Object System.Array.GetValue(Int32 index1, Int32 index2, Int32 index3), System.Object System.Array.GetValue(Int64 index), System.Object System.Array.GetValue(Int64 index1, Int64 index2), System.Object System.Array.GetValue(Int64 index1, Int64 index2, Int64 index3), System.Object System.Array.GetValue(Int64[] indices), void System.Array.SetValue(Object value, Int32 index), void System.Array.SetValue(Object value, Int32 index1, Int32 index2), void System.Array.SetValue(Object value, Int32 index1, Int32 index2, Int32 index3), void System.Array.SetValue(Object value, Int32[] indices), void System.Array.SetValue(Object value, Int64 index), void System.Array.SetValue(Object value, Int64 index1, Int64 index2), void System.Array.SetValue(Object value, Int64 index1, Int64 index2, Int64 index3), void System.Array.SetValue(Object value, Int64[] indices), System.Int32 System.Array.get_Length(), System.Int64 System.Array.get_LongLength(), System.Int32 System.Array.GetLength(Int32 dimension), System.Int64 System.Array.GetLongLength(Int32 dimension), System.Int32 System.Array.get_Rank(), System.Int32 System.Array.GetUpperBound(Int32 dimension), System.Int32 System.Array.GetLowerBound(Int32 dimension), System.Object System.Array.get_SyncRoot(), System.Boolean System.Array.get_IsReadOnly(), System.Boolean System.Array.get_IsFixedSize(), System.Boolean System.Array.get_IsSynchronized(), System.Object System.Array.Clone(), System.Int32 System.Array.CompareTo(Object other, IComparer comparer), System.Boolean System.Array.Equals(Object other, IEqualityComparer comparer), System.Int32 System.Array.GetHashCode(IEqualityComparer comparer), void System.Array.CopyTo(Array array, Int32 index), void System.Array.CopyTo(Array array, Int64 index), System.Collections.IEnumerator System.Array.GetEnumerator(), void System.Array.Initialize(), void System.Object..ctor(), System.String System.Object.ToString(), System.Boolean System.Object.Equals(Object obj), System.Int32 System.Object.GetHashCode(), System.Type System.Object.GetType()}"
GetProperties="{System.Int32 Length, System.Int64 LongLength, System.Int32 Rank, System.Object SyncRoot, System.Boolean IsReadOnly, System.Boolean IsFixedSize, System.Boolean IsSynchronized}"
@ -1041,6 +1042,7 @@ namespace Debugger.Tests { @@ -1041,6 +1042,7 @@ namespace Debugger.Tests {
FullName="System.Char[,]"
GetArrayRank="2"
GetElementType="System.Char"
GetInterfaces="{System.Collections.Generic.IList`1[System.Char], System.Collections.Generic.ICollection`1[System.Char], System.Collections.Generic.IEnumerable`1[System.Char], System.Collections.IEnumerable}"
GetMembers="{System.Object System.Array.GetValue(Int32[] indices), System.Object System.Array.GetValue(Int32 index), System.Object System.Array.GetValue(Int32 index1, Int32 index2), System.Object System.Array.GetValue(Int32 index1, Int32 index2, Int32 index3), System.Object System.Array.GetValue(Int64 index), System.Object System.Array.GetValue(Int64 index1, Int64 index2), System.Object System.Array.GetValue(Int64 index1, Int64 index2, Int64 index3), System.Object System.Array.GetValue(Int64[] indices), void System.Array.SetValue(Object value, Int32 index), void System.Array.SetValue(Object value, Int32 index1, Int32 index2), void System.Array.SetValue(Object value, Int32 index1, Int32 index2, Int32 index3), void System.Array.SetValue(Object value, Int32[] indices), void System.Array.SetValue(Object value, Int64 index), void System.Array.SetValue(Object value, Int64 index1, Int64 index2), void System.Array.SetValue(Object value, Int64 index1, Int64 index2, Int64 index3), void System.Array.SetValue(Object value, Int64[] indices), System.Int32 System.Array.get_Length(), System.Int64 System.Array.get_LongLength(), System.Int32 System.Array.GetLength(Int32 dimension), System.Int64 System.Array.GetLongLength(Int32 dimension), System.Int32 System.Array.get_Rank(), System.Int32 System.Array.GetUpperBound(Int32 dimension), System.Int32 System.Array.GetLowerBound(Int32 dimension), System.Object System.Array.get_SyncRoot(), System.Boolean System.Array.get_IsReadOnly(), System.Boolean System.Array.get_IsFixedSize(), System.Boolean System.Array.get_IsSynchronized(), System.Object System.Array.Clone(), System.Int32 System.Array.CompareTo(Object other, IComparer comparer), System.Boolean System.Array.Equals(Object other, IEqualityComparer comparer), System.Int32 System.Array.GetHashCode(IEqualityComparer comparer), void System.Array.CopyTo(Array array, Int32 index), void System.Array.CopyTo(Array array, Int64 index), System.Collections.IEnumerator System.Array.GetEnumerator(), void System.Array.Initialize(), System.Int32 Length, System.Int64 LongLength, System.Int32 Rank, System.Object SyncRoot, System.Boolean IsReadOnly, System.Boolean IsFixedSize, System.Boolean IsSynchronized, void System.Object..ctor(), System.String System.Object.ToString(), System.Boolean System.Object.Equals(Object obj), System.Int32 System.Object.GetHashCode(), System.Type System.Object.GetType()}"
GetMethods="{System.Object System.Array.GetValue(Int32[] indices), System.Object System.Array.GetValue(Int32 index), System.Object System.Array.GetValue(Int32 index1, Int32 index2), System.Object System.Array.GetValue(Int32 index1, Int32 index2, Int32 index3), System.Object System.Array.GetValue(Int64 index), System.Object System.Array.GetValue(Int64 index1, Int64 index2), System.Object System.Array.GetValue(Int64 index1, Int64 index2, Int64 index3), System.Object System.Array.GetValue(Int64[] indices), void System.Array.SetValue(Object value, Int32 index), void System.Array.SetValue(Object value, Int32 index1, Int32 index2), void System.Array.SetValue(Object value, Int32 index1, Int32 index2, Int32 index3), void System.Array.SetValue(Object value, Int32[] indices), void System.Array.SetValue(Object value, Int64 index), void System.Array.SetValue(Object value, Int64 index1, Int64 index2), void System.Array.SetValue(Object value, Int64 index1, Int64 index2, Int64 index3), void System.Array.SetValue(Object value, Int64[] indices), System.Int32 System.Array.get_Length(), System.Int64 System.Array.get_LongLength(), System.Int32 System.Array.GetLength(Int32 dimension), System.Int64 System.Array.GetLongLength(Int32 dimension), System.Int32 System.Array.get_Rank(), System.Int32 System.Array.GetUpperBound(Int32 dimension), System.Int32 System.Array.GetLowerBound(Int32 dimension), System.Object System.Array.get_SyncRoot(), System.Boolean System.Array.get_IsReadOnly(), System.Boolean System.Array.get_IsFixedSize(), System.Boolean System.Array.get_IsSynchronized(), System.Object System.Array.Clone(), System.Int32 System.Array.CompareTo(Object other, IComparer comparer), System.Boolean System.Array.Equals(Object other, IEqualityComparer comparer), System.Int32 System.Array.GetHashCode(IEqualityComparer comparer), void System.Array.CopyTo(Array array, Int32 index), void System.Array.CopyTo(Array array, Int64 index), System.Collections.IEnumerator System.Array.GetEnumerator(), void System.Array.Initialize(), void System.Object..ctor(), System.String System.Object.ToString(), System.Boolean System.Object.Equals(Object obj), System.Int32 System.Object.GetHashCode(), System.Type System.Object.GetType()}"
GetProperties="{System.Int32 Length, System.Int64 LongLength, System.Int32 Rank, System.Object SyncRoot, System.Boolean IsReadOnly, System.Boolean IsFixedSize, System.Boolean IsSynchronized}"
@ -1078,6 +1080,7 @@ namespace Debugger.Tests { @@ -1078,6 +1080,7 @@ namespace Debugger.Tests {
FullName="System.Char[,][]"
GetArrayRank="1"
GetElementType="System.Char[,]"
GetInterfaces="{System.Collections.Generic.IList`1[System.Char[,]], System.Collections.Generic.ICollection`1[System.Char[,]], System.Collections.Generic.IEnumerable`1[System.Char[,]], System.Collections.IEnumerable}"
GetMembers="{System.Object System.Array.GetValue(Int32[] indices), System.Object System.Array.GetValue(Int32 index), System.Object System.Array.GetValue(Int32 index1, Int32 index2), System.Object System.Array.GetValue(Int32 index1, Int32 index2, Int32 index3), System.Object System.Array.GetValue(Int64 index), System.Object System.Array.GetValue(Int64 index1, Int64 index2), System.Object System.Array.GetValue(Int64 index1, Int64 index2, Int64 index3), System.Object System.Array.GetValue(Int64[] indices), void System.Array.SetValue(Object value, Int32 index), void System.Array.SetValue(Object value, Int32 index1, Int32 index2), void System.Array.SetValue(Object value, Int32 index1, Int32 index2, Int32 index3), void System.Array.SetValue(Object value, Int32[] indices), void System.Array.SetValue(Object value, Int64 index), void System.Array.SetValue(Object value, Int64 index1, Int64 index2), void System.Array.SetValue(Object value, Int64 index1, Int64 index2, Int64 index3), void System.Array.SetValue(Object value, Int64[] indices), System.Int32 System.Array.get_Length(), System.Int64 System.Array.get_LongLength(), System.Int32 System.Array.GetLength(Int32 dimension), System.Int64 System.Array.GetLongLength(Int32 dimension), System.Int32 System.Array.get_Rank(), System.Int32 System.Array.GetUpperBound(Int32 dimension), System.Int32 System.Array.GetLowerBound(Int32 dimension), System.Object System.Array.get_SyncRoot(), System.Boolean System.Array.get_IsReadOnly(), System.Boolean System.Array.get_IsFixedSize(), System.Boolean System.Array.get_IsSynchronized(), System.Object System.Array.Clone(), System.Int32 System.Array.CompareTo(Object other, IComparer comparer), System.Boolean System.Array.Equals(Object other, IEqualityComparer comparer), System.Int32 System.Array.GetHashCode(IEqualityComparer comparer), void System.Array.CopyTo(Array array, Int32 index), void System.Array.CopyTo(Array array, Int64 index), System.Collections.IEnumerator System.Array.GetEnumerator(), void System.Array.Initialize(), System.Int32 Length, System.Int64 LongLength, System.Int32 Rank, System.Object SyncRoot, System.Boolean IsReadOnly, System.Boolean IsFixedSize, System.Boolean IsSynchronized, void System.Object..ctor(), System.String System.Object.ToString(), System.Boolean System.Object.Equals(Object obj), System.Int32 System.Object.GetHashCode(), System.Type System.Object.GetType()}"
GetMethods="{System.Object System.Array.GetValue(Int32[] indices), System.Object System.Array.GetValue(Int32 index), System.Object System.Array.GetValue(Int32 index1, Int32 index2), System.Object System.Array.GetValue(Int32 index1, Int32 index2, Int32 index3), System.Object System.Array.GetValue(Int64 index), System.Object System.Array.GetValue(Int64 index1, Int64 index2), System.Object System.Array.GetValue(Int64 index1, Int64 index2, Int64 index3), System.Object System.Array.GetValue(Int64[] indices), void System.Array.SetValue(Object value, Int32 index), void System.Array.SetValue(Object value, Int32 index1, Int32 index2), void System.Array.SetValue(Object value, Int32 index1, Int32 index2, Int32 index3), void System.Array.SetValue(Object value, Int32[] indices), void System.Array.SetValue(Object value, Int64 index), void System.Array.SetValue(Object value, Int64 index1, Int64 index2), void System.Array.SetValue(Object value, Int64 index1, Int64 index2, Int64 index3), void System.Array.SetValue(Object value, Int64[] indices), System.Int32 System.Array.get_Length(), System.Int64 System.Array.get_LongLength(), System.Int32 System.Array.GetLength(Int32 dimension), System.Int64 System.Array.GetLongLength(Int32 dimension), System.Int32 System.Array.get_Rank(), System.Int32 System.Array.GetUpperBound(Int32 dimension), System.Int32 System.Array.GetLowerBound(Int32 dimension), System.Object System.Array.get_SyncRoot(), System.Boolean System.Array.get_IsReadOnly(), System.Boolean System.Array.get_IsFixedSize(), System.Boolean System.Array.get_IsSynchronized(), System.Object System.Array.Clone(), System.Int32 System.Array.CompareTo(Object other, IComparer comparer), System.Boolean System.Array.Equals(Object other, IEqualityComparer comparer), System.Int32 System.Array.GetHashCode(IEqualityComparer comparer), void System.Array.CopyTo(Array array, Int32 index), void System.Array.CopyTo(Array array, Int64 index), System.Collections.IEnumerator System.Array.GetEnumerator(), void System.Array.Initialize(), void System.Object..ctor(), System.String System.Object.ToString(), System.Boolean System.Object.Equals(Object obj), System.Int32 System.Object.GetHashCode(), System.Type System.Object.GetType()}"
GetProperties="{System.Int32 Length, System.Int64 LongLength, System.Int32 Rank, System.Object SyncRoot, System.Boolean IsReadOnly, System.Boolean IsFixedSize, System.Boolean IsSynchronized}"
@ -1092,6 +1095,7 @@ namespace Debugger.Tests { @@ -1092,6 +1095,7 @@ namespace Debugger.Tests {
FullName="System.Char[,]"
GetArrayRank="2"
GetElementType="System.Char"
GetInterfaces="{System.Collections.Generic.IList`1[System.Char], System.Collections.Generic.ICollection`1[System.Char], System.Collections.Generic.IEnumerable`1[System.Char], System.Collections.IEnumerable}"
GetMembers="{System.Object System.Array.GetValue(Int32[] indices), System.Object System.Array.GetValue(Int32 index), System.Object System.Array.GetValue(Int32 index1, Int32 index2), System.Object System.Array.GetValue(Int32 index1, Int32 index2, Int32 index3), System.Object System.Array.GetValue(Int64 index), System.Object System.Array.GetValue(Int64 index1, Int64 index2), System.Object System.Array.GetValue(Int64 index1, Int64 index2, Int64 index3), System.Object System.Array.GetValue(Int64[] indices), void System.Array.SetValue(Object value, Int32 index), void System.Array.SetValue(Object value, Int32 index1, Int32 index2), void System.Array.SetValue(Object value, Int32 index1, Int32 index2, Int32 index3), void System.Array.SetValue(Object value, Int32[] indices), void System.Array.SetValue(Object value, Int64 index), void System.Array.SetValue(Object value, Int64 index1, Int64 index2), void System.Array.SetValue(Object value, Int64 index1, Int64 index2, Int64 index3), void System.Array.SetValue(Object value, Int64[] indices), System.Int32 System.Array.get_Length(), System.Int64 System.Array.get_LongLength(), System.Int32 System.Array.GetLength(Int32 dimension), System.Int64 System.Array.GetLongLength(Int32 dimension), System.Int32 System.Array.get_Rank(), System.Int32 System.Array.GetUpperBound(Int32 dimension), System.Int32 System.Array.GetLowerBound(Int32 dimension), System.Object System.Array.get_SyncRoot(), System.Boolean System.Array.get_IsReadOnly(), System.Boolean System.Array.get_IsFixedSize(), System.Boolean System.Array.get_IsSynchronized(), System.Object System.Array.Clone(), System.Int32 System.Array.CompareTo(Object other, IComparer comparer), System.Boolean System.Array.Equals(Object other, IEqualityComparer comparer), System.Int32 System.Array.GetHashCode(IEqualityComparer comparer), void System.Array.CopyTo(Array array, Int32 index), void System.Array.CopyTo(Array array, Int64 index), System.Collections.IEnumerator System.Array.GetEnumerator(), void System.Array.Initialize(), System.Int32 Length, System.Int64 LongLength, System.Int32 Rank, System.Object SyncRoot, System.Boolean IsReadOnly, System.Boolean IsFixedSize, System.Boolean IsSynchronized, void System.Object..ctor(), System.String System.Object.ToString(), System.Boolean System.Object.Equals(Object obj), System.Int32 System.Object.GetHashCode(), System.Type System.Object.GetType()}"
GetMethods="{System.Object System.Array.GetValue(Int32[] indices), System.Object System.Array.GetValue(Int32 index), System.Object System.Array.GetValue(Int32 index1, Int32 index2), System.Object System.Array.GetValue(Int32 index1, Int32 index2, Int32 index3), System.Object System.Array.GetValue(Int64 index), System.Object System.Array.GetValue(Int64 index1, Int64 index2), System.Object System.Array.GetValue(Int64 index1, Int64 index2, Int64 index3), System.Object System.Array.GetValue(Int64[] indices), void System.Array.SetValue(Object value, Int32 index), void System.Array.SetValue(Object value, Int32 index1, Int32 index2), void System.Array.SetValue(Object value, Int32 index1, Int32 index2, Int32 index3), void System.Array.SetValue(Object value, Int32[] indices), void System.Array.SetValue(Object value, Int64 index), void System.Array.SetValue(Object value, Int64 index1, Int64 index2), void System.Array.SetValue(Object value, Int64 index1, Int64 index2, Int64 index3), void System.Array.SetValue(Object value, Int64[] indices), System.Int32 System.Array.get_Length(), System.Int64 System.Array.get_LongLength(), System.Int32 System.Array.GetLength(Int32 dimension), System.Int64 System.Array.GetLongLength(Int32 dimension), System.Int32 System.Array.get_Rank(), System.Int32 System.Array.GetUpperBound(Int32 dimension), System.Int32 System.Array.GetLowerBound(Int32 dimension), System.Object System.Array.get_SyncRoot(), System.Boolean System.Array.get_IsReadOnly(), System.Boolean System.Array.get_IsFixedSize(), System.Boolean System.Array.get_IsSynchronized(), System.Object System.Array.Clone(), System.Int32 System.Array.CompareTo(Object other, IComparer comparer), System.Boolean System.Array.Equals(Object other, IEqualityComparer comparer), System.Int32 System.Array.GetHashCode(IEqualityComparer comparer), void System.Array.CopyTo(Array array, Int32 index), void System.Array.CopyTo(Array array, Int64 index), System.Collections.IEnumerator System.Array.GetEnumerator(), void System.Array.Initialize(), void System.Object..ctor(), System.String System.Object.ToString(), System.Boolean System.Object.Equals(Object obj), System.Int32 System.Object.GetHashCode(), System.Type System.Object.GetType()}"
GetProperties="{System.Int32 Length, System.Int64 LongLength, System.Int32 Rank, System.Object SyncRoot, System.Boolean IsReadOnly, System.Boolean IsFixedSize, System.Boolean IsSynchronized}"
@ -1194,6 +1198,7 @@ namespace Debugger.Tests { @@ -1194,6 +1198,7 @@ namespace Debugger.Tests {
FullName="Debugger.Tests.DebugType_Tests+MyGenClass`1[System.Int32][]"
GetArrayRank="1"
GetElementType="Debugger.Tests.DebugType_Tests+MyGenClass`1[System.Int32]"
GetInterfaces="{System.Collections.Generic.IList`1[Debugger.Tests.DebugType_Tests+MyGenClass`1[System.Int32]], System.Collections.Generic.ICollection`1[Debugger.Tests.DebugType_Tests+MyGenClass`1[System.Int32]], System.Collections.Generic.IEnumerable`1[Debugger.Tests.DebugType_Tests+MyGenClass`1[System.Int32]], System.Collections.IEnumerable}"
GetMembers="{System.Object System.Array.GetValue(Int32[] indices), System.Object System.Array.GetValue(Int32 index), System.Object System.Array.GetValue(Int32 index1, Int32 index2), System.Object System.Array.GetValue(Int32 index1, Int32 index2, Int32 index3), System.Object System.Array.GetValue(Int64 index), System.Object System.Array.GetValue(Int64 index1, Int64 index2), System.Object System.Array.GetValue(Int64 index1, Int64 index2, Int64 index3), System.Object System.Array.GetValue(Int64[] indices), void System.Array.SetValue(Object value, Int32 index), void System.Array.SetValue(Object value, Int32 index1, Int32 index2), void System.Array.SetValue(Object value, Int32 index1, Int32 index2, Int32 index3), void System.Array.SetValue(Object value, Int32[] indices), void System.Array.SetValue(Object value, Int64 index), void System.Array.SetValue(Object value, Int64 index1, Int64 index2), void System.Array.SetValue(Object value, Int64 index1, Int64 index2, Int64 index3), void System.Array.SetValue(Object value, Int64[] indices), System.Int32 System.Array.get_Length(), System.Int64 System.Array.get_LongLength(), System.Int32 System.Array.GetLength(Int32 dimension), System.Int64 System.Array.GetLongLength(Int32 dimension), System.Int32 System.Array.get_Rank(), System.Int32 System.Array.GetUpperBound(Int32 dimension), System.Int32 System.Array.GetLowerBound(Int32 dimension), System.Object System.Array.get_SyncRoot(), System.Boolean System.Array.get_IsReadOnly(), System.Boolean System.Array.get_IsFixedSize(), System.Boolean System.Array.get_IsSynchronized(), System.Object System.Array.Clone(), System.Int32 System.Array.CompareTo(Object other, IComparer comparer), System.Boolean System.Array.Equals(Object other, IEqualityComparer comparer), System.Int32 System.Array.GetHashCode(IEqualityComparer comparer), void System.Array.CopyTo(Array array, Int32 index), void System.Array.CopyTo(Array array, Int64 index), System.Collections.IEnumerator System.Array.GetEnumerator(), void System.Array.Initialize(), System.Int32 Length, System.Int64 LongLength, System.Int32 Rank, System.Object SyncRoot, System.Boolean IsReadOnly, System.Boolean IsFixedSize, System.Boolean IsSynchronized, void System.Object..ctor(), System.String System.Object.ToString(), System.Boolean System.Object.Equals(Object obj), System.Int32 System.Object.GetHashCode(), System.Type System.Object.GetType()}"
GetMethods="{System.Object System.Array.GetValue(Int32[] indices), System.Object System.Array.GetValue(Int32 index), System.Object System.Array.GetValue(Int32 index1, Int32 index2), System.Object System.Array.GetValue(Int32 index1, Int32 index2, Int32 index3), System.Object System.Array.GetValue(Int64 index), System.Object System.Array.GetValue(Int64 index1, Int64 index2), System.Object System.Array.GetValue(Int64 index1, Int64 index2, Int64 index3), System.Object System.Array.GetValue(Int64[] indices), void System.Array.SetValue(Object value, Int32 index), void System.Array.SetValue(Object value, Int32 index1, Int32 index2), void System.Array.SetValue(Object value, Int32 index1, Int32 index2, Int32 index3), void System.Array.SetValue(Object value, Int32[] indices), void System.Array.SetValue(Object value, Int64 index), void System.Array.SetValue(Object value, Int64 index1, Int64 index2), void System.Array.SetValue(Object value, Int64 index1, Int64 index2, Int64 index3), void System.Array.SetValue(Object value, Int64[] indices), System.Int32 System.Array.get_Length(), System.Int64 System.Array.get_LongLength(), System.Int32 System.Array.GetLength(Int32 dimension), System.Int64 System.Array.GetLongLength(Int32 dimension), System.Int32 System.Array.get_Rank(), System.Int32 System.Array.GetUpperBound(Int32 dimension), System.Int32 System.Array.GetLowerBound(Int32 dimension), System.Object System.Array.get_SyncRoot(), System.Boolean System.Array.get_IsReadOnly(), System.Boolean System.Array.get_IsFixedSize(), System.Boolean System.Array.get_IsSynchronized(), System.Object System.Array.Clone(), System.Int32 System.Array.CompareTo(Object other, IComparer comparer), System.Boolean System.Array.Equals(Object other, IEqualityComparer comparer), System.Int32 System.Array.GetHashCode(IEqualityComparer comparer), void System.Array.CopyTo(Array array, Int32 index), void System.Array.CopyTo(Array array, Int64 index), System.Collections.IEnumerator System.Array.GetEnumerator(), void System.Array.Initialize(), void System.Object..ctor(), System.String System.Object.ToString(), System.Boolean System.Object.Equals(Object obj), System.Int32 System.Object.GetHashCode(), System.Type System.Object.GetType()}"
GetProperties="{System.Int32 Length, System.Int64 LongLength, System.Int32 Rank, System.Object SyncRoot, System.Boolean IsReadOnly, System.Boolean IsFixedSize, System.Boolean IsSynchronized}"

4
src/AddIns/Misc/Debugger/Debugger.Tests/Tests/ExpressionEvaluator_Tests.cs

@ -201,6 +201,8 @@ namespace Debugger.Tests { @@ -201,6 +201,8 @@ namespace Debugger.Tests {
list.Add((char)42); list.Add((char)52);
list
list = new System.Collections.Generic.List<char>(array2);
list
i = 10
-i
@ -366,6 +368,8 @@ namespace Debugger.Tests { @@ -366,6 +368,8 @@ namespace Debugger.Tests {
<Eval> </Eval>
<Eval> list.Add((char)42); list.Add((char)52);</Eval>
<Eval> list = List`1 {'H', 'e', 'l', 'l', 'o', '*', '4'} </Eval>
<Eval> list = new System.Collections.Generic.List&lt;char&gt;(array2);</Eval>
<Eval> list = List`1 {'w', 'o', 'r', 'l', 'd'} </Eval>
<Eval> </Eval>
<Eval> i = 10 = 10 </Eval>
<Eval> -i = -10 </Eval>

Loading…
Cancel
Save