Browse Source

Added Module.GetDefinedTypes; Only non-generic types are returned at the moment;

Added test for it

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@3110 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
David Srbecký 17 years ago
parent
commit
ab6a579558
  1. 6
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Module.cs
  2. 2
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Interop/MetaData/IMetaDataImport.cs
  3. 13
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Metadata/DebugType.cs
  4. 28
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Wrappers/MetaData/MetaDataImport.cs
  5. 1
      src/AddIns/Misc/Debugger/Debugger.Tests/Project/Debugger.Tests.csproj
  6. 93
      src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/DefinedTypes.cs

6
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Module.cs

@ -6,6 +6,7 @@ @@ -6,6 +6,7 @@
// </file>
using System;
using System.Collections.Generic;
using Debugger.MetaData;
using Debugger.Wrappers.CorDebug;
@ -127,6 +128,11 @@ namespace Debugger @@ -127,6 +128,11 @@ namespace Debugger
}
}
public List<DebugType> GetDefinedTypes()
{
return DebugType.GetDefinedTypesInModule(this);
}
internal Module(Process process, ICorDebugModule pModule)
{
this.process = process;

2
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Interop/MetaData/IMetaDataImport.cs

@ -23,7 +23,7 @@ namespace Debugger.Interop.MetaData @@ -23,7 +23,7 @@ namespace Debugger.Interop.MetaData
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
void ResetEnum(IntPtr hEnum, uint ulPos);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
void EnumTypeDefs([In, Out] ref IntPtr phEnum, ref uint rTypeDefs, uint cMax, ref uint pcTypeDefs);
void EnumTypeDefs([In, Out] ref IntPtr phEnum, out uint rTypeDefs, uint cMax, out uint pcTypeDefs);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
void EnumInterfaceImpls([In, Out] ref IntPtr phEnum, uint td, out uint rImpls, uint cMax, out uint pcImpls);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]

13
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Metadata/DebugType.cs

@ -398,6 +398,19 @@ namespace Debugger.MetaData @@ -398,6 +398,19 @@ namespace Debugger.MetaData
return type;
}
/// <summary> Returns all non-generic types defined in the given module </summary>
public static List<DebugType> GetDefinedTypesInModule(Module module)
{
// TODO: Generic types
List<DebugType> types = new List<DebugType>();
foreach(TypeDefProps typeDef in module.MetaData.EnumTypeDefs()) {
if (module.MetaData.GetGenericParamCount(typeDef.Token) == 0) {
types.Add(DebugType.Create(module, typeDef.Token));
}
}
return types;
}
string GetFullName()
{
if (IsArray) {

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

@ -52,6 +52,13 @@ namespace Debugger.Wrappers.MetaData @@ -52,6 +52,13 @@ namespace Debugger.Wrappers.MetaData
}
}
public IEnumerable<TypeDefProps> EnumTypeDefs()
{
foreach(uint token in EnumerateTokens(metaData.EnumTypeDefs)) {
yield return GetTypeDefProps(token);
}
}
public TypeDefProps GetTypeDefProps(uint typeToken)
{
TypeDefProps typeDefProps = new TypeDefProps();
@ -234,9 +241,26 @@ namespace Debugger.Wrappers.MetaData @@ -234,9 +241,26 @@ namespace Debugger.Wrappers.MetaData
#region Util
delegate void TokenEnumerator(ref IntPtr phEnum, uint parameter, out uint token, uint maxCount, out uint fetched);
delegate void TokenEnumerator(ref IntPtr phEnum, out uint token, uint maxCount, out uint fetched);
IEnumerable<uint> EnumerateTokens(TokenEnumerator tokenEnumerator)
{
IntPtr enumerator = IntPtr.Zero;
while(true) {
uint token;
uint fetched;
tokenEnumerator(ref enumerator, out token, 1, out fetched);
if (fetched == 0) {
metaData.CloseEnum(enumerator);
break;
}
yield return token;
}
}
delegate void TokenEnumeratorWithParameter(ref IntPtr phEnum, uint parameter, out uint token, uint maxCount, out uint fetched);
IEnumerable<uint> EnumerateTokens(TokenEnumerator tokenEnumerator, uint parameter)
IEnumerable<uint> EnumerateTokens(TokenEnumeratorWithParameter tokenEnumerator, uint parameter)
{
IntPtr enumerator = IntPtr.Zero;
while(true) {

1
src/AddIns/Misc/Debugger/Debugger.Tests/Project/Debugger.Tests.csproj

@ -46,6 +46,7 @@ @@ -46,6 +46,7 @@
<Compile Include="Src\TestPrograms\Breakpoint.cs" />
<Compile Include="Src\TestPrograms\Callstack.cs" />
<Compile Include="Src\TestPrograms\DebuggeeKilled.cs" />
<Compile Include="Src\TestPrograms\DefinedTypes.cs" />
<Compile Include="Src\TestPrograms\Exception.cs" />
<Compile Include="Src\TestPrograms\ExceptionCustom.cs" />
<Compile Include="Src\TestPrograms\Expressions.cs" />

93
src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/DefinedTypes.cs

@ -0,0 +1,93 @@ @@ -0,0 +1,93 @@
// <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;
namespace Debugger.Tests.TestPrograms
{
public class DefinedTypes_Class
{
public static void Main()
{
System.Diagnostics.Debugger.Break();
}
}
public struct DefinedTypes_Struct
{
}
public class DefinedTypes_GenericClass<K, V>
{
}
}
#if TEST_CODE
namespace Debugger.Tests {
public partial class DebuggerTests
{
[NUnit.Framework.Test]
public void DefinedTypes()
{
StartTest("DefinedTypes.cs");
ObjectDump("Types", process.GetModule("DefinedTypes.exe").GetDefinedTypes());
EndTest();
}
}
}
#endif
#if EXPECTED_OUTPUT
<?xml version="1.0" encoding="utf-8"?>
<DebuggerTests>
<Test name="DefinedTypes.cs">
<ProcessStarted />
<ModuleLoaded symbols="False">mscorlib.dll</ModuleLoaded>
<ModuleLoaded symbols="True">DefinedTypes.exe</ModuleLoaded>
<DebuggingPaused>Break</DebuggingPaused>
<Types Type="List`1" ToString="System.Collections.Generic.List`1[Debugger.MetaData.DebugType]">
<Capacity>4</Capacity>
<Count>2</Count>
<Item Type="DebugType" ToString="Debugger.Tests.TestPrograms.DefinedTypes_Class">
<BaseType>System.Object</BaseType>
<FullName>Debugger.Tests.TestPrograms.DefinedTypes_Class</FullName>
<HasElementType>False</HasElementType>
<Interfaces>System.Collections.Generic.List`1[Debugger.MetaData.DebugType]</Interfaces>
<IsArray>False</IsArray>
<IsClass>True</IsClass>
<IsGenericType>False</IsGenericType>
<IsInteger>False</IsInteger>
<IsInterface>False</IsInterface>
<IsPrimitive>False</IsPrimitive>
<IsValueType>False</IsValueType>
<ManagedType>null</ManagedType>
<Module>DefinedTypes.exe</Module>
</Item>
<Item Type="DebugType" ToString="Debugger.Tests.TestPrograms.DefinedTypes_Struct">
<BaseType>System.ValueType</BaseType>
<FullName>Debugger.Tests.TestPrograms.DefinedTypes_Struct</FullName>
<HasElementType>False</HasElementType>
<Interfaces>System.Collections.Generic.List`1[Debugger.MetaData.DebugType]</Interfaces>
<IsArray>False</IsArray>
<IsClass>False</IsClass>
<IsGenericType>False</IsGenericType>
<IsInteger>False</IsInteger>
<IsInterface>False</IsInterface>
<IsPrimitive>False</IsPrimitive>
<IsValueType>True</IsValueType>
<ManagedType>null</ManagedType>
<Module>DefinedTypes.exe</Module>
</Item>
</Types>
<ProcessExited />
</Test>
</DebuggerTests>
#endif // EXPECTED_OUTPUT
Loading…
Cancel
Save