Browse Source

Removed some code duplication the metadata wrapper.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@2925 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
David Srbecký 18 years ago
parent
commit
a9d96c6716
  1. 18
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Interop/MetaData/IMetaDataImport.cs
  2. 49
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Wrappers/MetaData/MetaDataImport.cs

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

@ -23,11 +23,11 @@ namespace Debugger.Interop.MetaData @@ -23,11 +23,11 @@ namespace Debugger.Interop.MetaData
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
void ResetEnum(IntPtr hEnum, uint ulPos);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
void EnumTypeDefs(ref IntPtr phEnum, ref uint rTypeDefs, uint cMax, ref uint pcTypeDefs);
void EnumTypeDefs([In, Out] ref IntPtr phEnum, ref uint rTypeDefs, uint cMax, ref uint pcTypeDefs);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
void EnumInterfaceImpls(ref IntPtr phEnum, uint td, ref uint rImpls, uint cMax, ref uint pcImpls);
void EnumInterfaceImpls([In, Out] ref IntPtr phEnum, uint td, ref uint rImpls, uint cMax, ref uint pcImpls);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
void EnumTypeRefs(ref IntPtr phEnum, ref uint rTypeRefs, uint cMax, ref uint pcTypeRefs);
void EnumTypeRefs([In, Out] ref IntPtr phEnum, ref uint rTypeRefs, uint cMax, ref uint pcTypeRefs);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
void FindTypeDefByName([In, MarshalAs(UnmanagedType.LPWStr)] string szTypeDef, [In] uint tkEnclosingClass, out uint ptd);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
@ -43,21 +43,21 @@ namespace Debugger.Interop.MetaData @@ -43,21 +43,21 @@ namespace Debugger.Interop.MetaData
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
void ResolveTypeRef(uint tr, ref Guid riid, [MarshalAs(UnmanagedType.IUnknown)] ref object ppIScope, ref uint ptd);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
void EnumMembers([In] ref IntPtr phEnum, [In] uint cl, out uint rMembers, [In] uint cMax, out uint pcTokens);
void EnumMembers([In, Out] ref IntPtr phEnum, [In] uint cl, out uint rMembers, [In] uint cMax, out uint pcTokens);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
void EnumMembersWithName([In, Out] ref IntPtr phEnum, [In] uint cl, [In, MarshalAs(UnmanagedType.LPWStr)] string szName, out uint rMembers, [In] uint cMax, out uint pcTokens);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
void EnumMethods([In] ref IntPtr phEnum, [In] uint cl, out uint rMethods, [In] uint cMax, out uint pcTokens);
void EnumMethods([In, Out] ref IntPtr phEnum, [In] uint cl, out uint rMethods, [In] uint cMax, out uint pcTokens);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
void EnumMethodsWithName([In] ref IntPtr phEnum, [In] uint cl, [In, MarshalAs(UnmanagedType.LPWStr)] string szName, out uint rMethods, [In] uint cMax, out uint pcTokens);
void EnumMethodsWithName([In, Out] ref IntPtr phEnum, [In] uint cl, [In, MarshalAs(UnmanagedType.LPWStr)] string szName, out uint rMethods, [In] uint cMax, out uint pcTokens);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
void EnumFields([In, Out] ref IntPtr phEnum, [In] uint cl, out uint rFields, [In] uint cMax, out uint pcTokens);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
void EnumFieldsWithName([In, Out] ref IntPtr phEnum, [In] uint cl, [In, MarshalAs(UnmanagedType.LPWStr)] string szName, out uint rFields, [In] uint cMax, out uint pcTokens);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
void EnumParams([In] ref IntPtr phEnum, [In] uint mb, out uint rParams, [In] uint cMax, out uint pcTokens);
void EnumParams([In, Out] ref IntPtr phEnum, [In] uint mb, out uint rParams, [In] uint cMax, out uint pcTokens);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
void EnumMemberRefs([In] ref IntPtr phEnum, [In] uint tkParent, out uint rMemberRefs, [In] uint cMax, out uint pcTokens);
void EnumMemberRefs([In, Out] ref IntPtr phEnum, [In] uint tkParent, out uint rMemberRefs, [In] uint cMax, out uint pcTokens);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
void EnumMethodImpls([In, Out] ref IntPtr phEnum, [In] uint td, out uint rMethodBody, out uint rMethodDecl, [In] uint cMax, out uint pcTokens);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
@ -75,7 +75,7 @@ namespace Debugger.Interop.MetaData @@ -75,7 +75,7 @@ namespace Debugger.Interop.MetaData
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
void GetMemberRefProps([In] uint mr, out uint ptk, [Out, MarshalAs(UnmanagedType.LPWStr)] string szMember, [In] uint cchMember, out uint pchMember, [Out] IntPtr ppvSigBlob, out uint pbSig);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
void EnumProperties([In] ref IntPtr phEnum, [In] uint td, out uint rProperties, [In] uint cMax, out uint pcProperties);
void EnumProperties([In, Out] ref IntPtr phEnum, [In] uint td, out uint rProperties, [In] uint cMax, out uint pcProperties);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
void EnumEvents([In, Out] ref IntPtr phEnum, [In] uint td, out uint rEvents, [In] uint cMax, out uint pcEvents);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]

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

@ -87,16 +87,8 @@ namespace Debugger.Wrappers.MetaData @@ -87,16 +87,8 @@ namespace Debugger.Wrappers.MetaData
public IEnumerable<FieldProps> EnumFields(uint typeToken)
{
IntPtr enumerator = IntPtr.Zero;
while (true) {
uint fieldToken;
uint fieldsFetched;
metaData.EnumFields(ref enumerator, typeToken, out fieldToken, 1, out fieldsFetched);
if (fieldsFetched == 0) {
metaData.CloseEnum(enumerator);
break;
}
yield return GetFieldProps(fieldToken);
foreach(uint token in EnumerateTokens(metaData.EnumFields, typeToken)) {
yield return GetFieldProps(token);
}
}
@ -125,16 +117,8 @@ namespace Debugger.Wrappers.MetaData @@ -125,16 +117,8 @@ namespace Debugger.Wrappers.MetaData
public IEnumerable<MethodProps> EnumMethods(uint typeToken)
{
IntPtr enumerator = IntPtr.Zero;
while(true) {
uint methodToken;
uint methodsFetched;
metaData.EnumMethods(ref enumerator, typeToken, out methodToken, 1, out methodsFetched);
if (methodsFetched == 0) {
metaData.CloseEnum(enumerator);
break;
}
yield return GetMethodProps(methodToken);
foreach(uint token in EnumerateTokens(metaData.EnumMethods, typeToken)) {
yield return GetMethodProps(token);
}
}
@ -176,17 +160,7 @@ namespace Debugger.Wrappers.MetaData @@ -176,17 +160,7 @@ namespace Debugger.Wrappers.MetaData
public IEnumerable<uint> EnumParams(uint mb)
{
IntPtr enumerator = IntPtr.Zero;
while(true) {
uint token;
uint fetched;
metaData.EnumParams(ref enumerator, mb, out token, 1, out fetched);
if (fetched == 0) {
metaData.CloseEnum(enumerator);
break;
}
yield return token;
}
return EnumerateTokens(metaData.EnumParams, mb);
}
public int GetParamCount(uint methodToken)
@ -239,12 +213,21 @@ namespace Debugger.Wrappers.MetaData @@ -239,12 +213,21 @@ namespace Debugger.Wrappers.MetaData
}
public IEnumerable<uint> EnumGenericParams(uint typeDef_methodDef)
{
return EnumerateTokens(metaData.EnumGenericParams, typeDef_methodDef);
}
#region Util
delegate void TokenEnumerator(ref IntPtr phEnum, uint parameter, out uint token, uint maxCount, out uint fetched);
IEnumerable<uint> EnumerateTokens(TokenEnumerator tokenEnumerator, uint parameter)
{
IntPtr enumerator = IntPtr.Zero;
while(true) {
uint token;
uint fetched;
metaData.EnumGenericParams(ref enumerator, typeDef_methodDef, out token, 1, out fetched);
tokenEnumerator(ref enumerator, parameter, out token, 1, out fetched);
if (fetched == 0) {
metaData.CloseEnum(enumerator);
break;
@ -252,6 +235,8 @@ namespace Debugger.Wrappers.MetaData @@ -252,6 +235,8 @@ namespace Debugger.Wrappers.MetaData
yield return token;
}
}
#endregion
}
}

Loading…
Cancel
Save