Skip to content

Commit

Permalink
Add Mono.Cecil.WindowsPdb
Browse files Browse the repository at this point in the history
  • Loading branch information
tmat committed Jun 19, 2017
1 parent e0df4cd commit eeec54a
Show file tree
Hide file tree
Showing 16 changed files with 847 additions and 24 deletions.
13 changes: 1 addition & 12 deletions Mono.Cecil.Cil/PortablePdb.cs
Original file line number Diff line number Diff line change
Expand Up @@ -311,23 +311,12 @@ public ImageDebugHeader GetDebugHeader ()
TimeDateStamp = (int) module.timestamp,
};

var buffer = new ByteBuffer ();
// RSDS
buffer.WriteUInt32 (0x53445352);
// Module ID
buffer.WriteBytes (module.Mvid.ToByteArray ());
// PDB Age
buffer.WriteUInt32 (1);
// PDB Path
var filename = writer.BaseStream.GetFileName ();
if (!string.IsNullOrEmpty (filename))
filename = Path.GetFileName (filename);

buffer.WriteBytes (System.Text.Encoding.UTF8.GetBytes (filename));
buffer.WriteByte (0);
var data = Mixin.GetCodeViewData (module.Mvid, filename, age: 1);

var data = new byte [buffer.length];
Buffer.BlockCopy (buffer.buffer, 0, data, 0, buffer.length);
directory.SizeOfData = data.Length;

return new ImageDebugHeader (new ImageDebugHeaderEntry (directory, data));
Expand Down
22 changes: 22 additions & 0 deletions Mono.Cecil.Cil/Symbols.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

using Mono.Collections.Generic;
using Mono.Cecil.Cil;
using Mono.Cecil.PE;

namespace Mono.Cecil.Cil {

Expand Down Expand Up @@ -939,6 +940,27 @@ public static ImageDebugHeaderEntry GetCodeViewEntry (this ImageDebugHeader head
return GetEntry (header, ImageDebugType.CodeView);
}

#if !READ_ONLY

public static byte[] GetCodeViewData (Guid pdb_id, string pdb_path, int age)
{
var buffer = new ByteBuffer ();
// RSDS
buffer.WriteUInt32 (0x53445352);
// Module ID
buffer.WriteBytes (pdb_id.ToByteArray ());
// PDB Age
buffer.WriteInt32 (age);
// PDB Path
buffer.WriteBytes (System.Text.Encoding.UTF8.GetBytes (pdb_path));
buffer.WriteByte (0);

var data = new byte[buffer.length];
Buffer.BlockCopy (buffer.buffer, 0, data, 0, buffer.length);
return data;
}
#endif

public static ImageDebugHeaderEntry GetDeterministicEntry (this ImageDebugHeader header)
{
return GetEntry (header, ImageDebugType.Deterministic);
Expand Down
4 changes: 2 additions & 2 deletions Mono.Cecil.props
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,9 @@
<TargetFramework Condition="'$(IsTestProject)' == 'true'">net462</TargetFramework>
<TargetFramework Condition="'$(IsTestProject)' != 'true'">netstandard1.3</TargetFramework>
</PropertyGroup>
<Import Project="NetStandard.props" Condition=" $(NetStandard) " />
<Import Project="NetStandard.props" Condition="'$(NetStandard)' == 'true'" />
<!-- Shared References -->
<ItemGroup Condition=" ! $(NetStandard) ">
<ItemGroup Condition="'$(NetStandard)' != 'true'">
<Reference Include="System.Core" />
<Reference Include="System" />
</ItemGroup>
Expand Down
53 changes: 43 additions & 10 deletions Mono.Cecil.sln
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.25420.1
# Visual Studio 15
VisualStudioVersion = 15.0.26612.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{74E5ECE0-06B4-401C-AEBA-E8DD53E17943}"
EndProject
Expand All @@ -22,6 +22,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.Cecil.Rocks.Tests", "r
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.Cecil.Rocks", "rocks\Mono.Cecil.Rocks.csproj", "{FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.Cecil.WindowsPdb", "symbols\pdb.windows\Mono.Cecil.WindowsPdb.csproj", "{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.Cecil.WindowsPdb.Tests", "symbols\pdb.windows\Test\Mono.Cecil.WindowsPdb.Tests.csproj", "{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
net_3_5_Debug_ReadOnly|Any CPU = net_3_5_Debug_ReadOnly|Any CPU
Expand Down Expand Up @@ -79,11 +83,9 @@ Global
{A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.net_4_0_Release|Any CPU.ActiveCfg = net_4_0_Release|Any CPU
{A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.net_4_0_Release|Any CPU.Build.0 = net_4_0_Release|Any CPU
{A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.netstandard_Debug_ReadOnly|Any CPU.ActiveCfg = netstandard_Debug_ReadOnly|Any CPU
{A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.netstandard_Debug_ReadOnly|Any CPU.Build.0 = netstandard_Debug_ReadOnly|Any CPU
{A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.netstandard_Debug|Any CPU.ActiveCfg = netstandard_Debug|Any CPU
{A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.netstandard_Debug|Any CPU.Build.0 = netstandard_Debug|Any CPU
{A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.netstandard_Release_ReadOnly|Any CPU.ActiveCfg = netstandard_Release_ReadOnly|Any CPU
{A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.netstandard_Release_ReadOnly|Any CPU.Build.0 = netstandard_Release_ReadOnly|Any CPU
{A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.netstandard_Release|Any CPU.ActiveCfg = netstandard_Release|Any CPU
{A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.netstandard_Release|Any CPU.Build.0 = netstandard_Release|Any CPU
{8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_3_5_Debug_ReadOnly|Any CPU.ActiveCfg = net_3_5_Debug_ReadOnly|Any CPU
Expand Down Expand Up @@ -127,11 +129,9 @@ Global
{AC71DF9C-99FA-4A63-990A-66C8010355A6}.net_4_0_Release|Any CPU.ActiveCfg = net_4_0_Release|Any CPU
{AC71DF9C-99FA-4A63-990A-66C8010355A6}.net_4_0_Release|Any CPU.Build.0 = net_4_0_Release|Any CPU
{AC71DF9C-99FA-4A63-990A-66C8010355A6}.netstandard_Debug_ReadOnly|Any CPU.ActiveCfg = netstandard_Debug_ReadOnly|Any CPU
{AC71DF9C-99FA-4A63-990A-66C8010355A6}.netstandard_Debug_ReadOnly|Any CPU.Build.0 = netstandard_Debug_ReadOnly|Any CPU
{AC71DF9C-99FA-4A63-990A-66C8010355A6}.netstandard_Debug|Any CPU.ActiveCfg = netstandard_Debug|Any CPU
{AC71DF9C-99FA-4A63-990A-66C8010355A6}.netstandard_Debug|Any CPU.Build.0 = netstandard_Debug|Any CPU
{AC71DF9C-99FA-4A63-990A-66C8010355A6}.netstandard_Release_ReadOnly|Any CPU.ActiveCfg = netstandard_Release_ReadOnly|Any CPU
{AC71DF9C-99FA-4A63-990A-66C8010355A6}.netstandard_Release_ReadOnly|Any CPU.Build.0 = netstandard_Release_ReadOnly|Any CPU
{AC71DF9C-99FA-4A63-990A-66C8010355A6}.netstandard_Release|Any CPU.ActiveCfg = netstandard_Release|Any CPU
{AC71DF9C-99FA-4A63-990A-66C8010355A6}.netstandard_Release|Any CPU.Build.0 = netstandard_Release|Any CPU
{63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_3_5_Debug_ReadOnly|Any CPU.ActiveCfg = net_3_5_Debug_ReadOnly|Any CPU
Expand Down Expand Up @@ -175,11 +175,9 @@ Global
{29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.net_4_0_Release|Any CPU.ActiveCfg = net_4_0_Release|Any CPU
{29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.net_4_0_Release|Any CPU.Build.0 = net_4_0_Release|Any CPU
{29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.netstandard_Debug_ReadOnly|Any CPU.ActiveCfg = netstandard_Debug_ReadOnly|Any CPU
{29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.netstandard_Debug_ReadOnly|Any CPU.Build.0 = netstandard_Debug_ReadOnly|Any CPU
{29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.netstandard_Debug|Any CPU.ActiveCfg = netstandard_Debug|Any CPU
{29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.netstandard_Debug|Any CPU.Build.0 = netstandard_Debug|Any CPU
{29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.netstandard_Release_ReadOnly|Any CPU.ActiveCfg = netstandard_Release_ReadOnly|Any CPU
{29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.netstandard_Release_ReadOnly|Any CPU.Build.0 = netstandard_Release_ReadOnly|Any CPU
{29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.netstandard_Release|Any CPU.ActiveCfg = netstandard_Release|Any CPU
{29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.netstandard_Release|Any CPU.Build.0 = netstandard_Release|Any CPU
{C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.net_3_5_Debug_ReadOnly|Any CPU.ActiveCfg = net_3_5_Debug_ReadOnly|Any CPU
Expand All @@ -199,11 +197,9 @@ Global
{C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.net_4_0_Release|Any CPU.ActiveCfg = net_4_0_Release|Any CPU
{C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.net_4_0_Release|Any CPU.Build.0 = net_4_0_Release|Any CPU
{C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.netstandard_Debug_ReadOnly|Any CPU.ActiveCfg = netstandard_Debug_ReadOnly|Any CPU
{C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.netstandard_Debug_ReadOnly|Any CPU.Build.0 = netstandard_Debug_ReadOnly|Any CPU
{C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.netstandard_Debug|Any CPU.ActiveCfg = netstandard_Debug|Any CPU
{C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.netstandard_Debug|Any CPU.Build.0 = netstandard_Debug|Any CPU
{C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.netstandard_Release_ReadOnly|Any CPU.ActiveCfg = netstandard_Release_ReadOnly|Any CPU
{C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.netstandard_Release_ReadOnly|Any CPU.Build.0 = netstandard_Release_ReadOnly|Any CPU
{C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.netstandard_Release|Any CPU.ActiveCfg = netstandard_Release|Any CPU
{C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.netstandard_Release|Any CPU.Build.0 = netstandard_Release|Any CPU
{FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.net_3_5_Debug_ReadOnly|Any CPU.ActiveCfg = net_3_5_Debug_ReadOnly|Any CPU
Expand All @@ -230,6 +226,38 @@ Global
{FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.netstandard_Release_ReadOnly|Any CPU.Build.0 = netstandard_Release_ReadOnly|Any CPU
{FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.netstandard_Release|Any CPU.ActiveCfg = netstandard_Release|Any CPU
{FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.netstandard_Release|Any CPU.Build.0 = netstandard_Release|Any CPU
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}.net_3_5_Debug_ReadOnly|Any CPU.ActiveCfg = net_3_5_Debug_ReadOnly|Any CPU
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}.net_3_5_Debug|Any CPU.ActiveCfg = net_3_5_Debug|Any CPU
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}.net_3_5_Release_ReadOnly|Any CPU.ActiveCfg = net_3_5_Release_ReadOnly|Any CPU
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}.net_3_5_Release|Any CPU.ActiveCfg = net_3_5_Release|Any CPU
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}.net_4_0_Debug_ReadOnly|Any CPU.ActiveCfg = net_4_0_Debug_ReadOnly|Any CPU
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}.net_4_0_Debug|Any CPU.ActiveCfg = net_4_0_Debug|Any CPU
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}.net_4_0_Release_ReadOnly|Any CPU.ActiveCfg = net_4_0_Release_ReadOnly|Any CPU
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}.net_4_0_Release|Any CPU.ActiveCfg = net_4_0_Release|Any CPU
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}.netstandard_Debug_ReadOnly|Any CPU.ActiveCfg = netstandard_Debug_ReadOnly|Any CPU
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}.netstandard_Debug_ReadOnly|Any CPU.Build.0 = netstandard_Debug_ReadOnly|Any CPU
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}.netstandard_Debug|Any CPU.ActiveCfg = netstandard_Debug|Any CPU
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}.netstandard_Debug|Any CPU.Build.0 = netstandard_Debug|Any CPU
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}.netstandard_Release_ReadOnly|Any CPU.ActiveCfg = netstandard_Release_ReadOnly|Any CPU
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}.netstandard_Release_ReadOnly|Any CPU.Build.0 = netstandard_Release_ReadOnly|Any CPU
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}.netstandard_Release|Any CPU.ActiveCfg = netstandard_Release|Any CPU
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}.netstandard_Release|Any CPU.Build.0 = netstandard_Release|Any CPU
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}.net_3_5_Debug_ReadOnly|Any CPU.ActiveCfg = net_3_5_Debug_ReadOnly|Any CPU
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}.net_3_5_Debug|Any CPU.ActiveCfg = net_3_5_Debug|Any CPU
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}.net_3_5_Release_ReadOnly|Any CPU.ActiveCfg = net_3_5_Release_ReadOnly|Any CPU
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}.net_3_5_Release|Any CPU.ActiveCfg = net_3_5_Release|Any CPU
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}.net_4_0_Debug_ReadOnly|Any CPU.ActiveCfg = net_4_0_Debug_ReadOnly|Any CPU
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}.net_4_0_Debug|Any CPU.ActiveCfg = net_4_0_Debug|Any CPU
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}.net_4_0_Release_ReadOnly|Any CPU.ActiveCfg = net_4_0_Release_ReadOnly|Any CPU
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}.net_4_0_Release|Any CPU.ActiveCfg = net_4_0_Release|Any CPU
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}.netstandard_Debug_ReadOnly|Any CPU.ActiveCfg = netstandard_Debug_ReadOnly|Any CPU
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}.netstandard_Debug_ReadOnly|Any CPU.Build.0 = netstandard_Debug_ReadOnly|Any CPU
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}.netstandard_Debug|Any CPU.ActiveCfg = netstandard_Debug|Any CPU
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}.netstandard_Debug|Any CPU.Build.0 = netstandard_Debug|Any CPU
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}.netstandard_Release_ReadOnly|Any CPU.ActiveCfg = netstandard_Release_ReadOnly|Any CPU
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}.netstandard_Release_ReadOnly|Any CPU.Build.0 = netstandard_Release_ReadOnly|Any CPU
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}.netstandard_Release|Any CPU.ActiveCfg = netstandard_Release|Any CPU
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}.netstandard_Release|Any CPU.Build.0 = netstandard_Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand All @@ -241,5 +269,10 @@ Global
{63E6915C-7EA4-4D76-AB28-0D7191EEA626} = {929D5B3B-E29A-40CC-93D8-0FF43A6F9FA1}
{29300103-CB76-4A1D-B6FD-FFD91C1EC8AA} = {74E5ECE0-06B4-401C-AEBA-E8DD53E17943}
{C6CFD7E1-B855-44DC-B4CE-9CD72984AF52} = {74E5ECE0-06B4-401C-AEBA-E8DD53E17943}
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE} = {929D5B3B-E29A-40CC-93D8-0FF43A6F9FA1}
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397} = {74E5ECE0-06B4-401C-AEBA-E8DD53E17943}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {9F99F5B5-3BEF-4AC3-8E6A-94BA9CFA9381}
EndGlobalSection
EndGlobal
1 change: 1 addition & 0 deletions Mono.Cecil/AssemblyInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
[assembly: Guid ("fd225bb4-fa53-44b2-a6db-85f5e48dcb54")]
#endif

[assembly: InternalsVisibleTo ("Mono.Cecil.WindowsPdb, PublicKey=" + Consts.PublicKey)]
[assembly: InternalsVisibleTo ("Mono.Cecil.Pdb, PublicKey=" + Consts.PublicKey)]
[assembly: InternalsVisibleTo ("Mono.Cecil.Mdb, PublicKey=" + Consts.PublicKey)]
[assembly: InternalsVisibleTo ("Mono.Cecil.Rocks, PublicKey=" + Consts.PublicKey)]
Expand Down
8 changes: 8 additions & 0 deletions symbols/pdb.windows/Mono.Cecil.Pdb/AssemblyInfo.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using System;
using System.Reflection;

[assembly: AssemblyTitle ("Mono.Cecil.WindowsPdb")]

[assembly: CLSCompliant (false)]
102 changes: 102 additions & 0 deletions symbols/pdb.windows/Mono.Cecil.Pdb/ModuleMetadata.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

#if !READ_ONLY

using System.Collections.Generic;
using System.Reflection;
using Microsoft.DiaSymReader;

namespace Mono.Cecil.WindowsPdb {

class ModuleMetadata : ISymWriterMetadataProvider {

readonly ModuleDefinition module;

Dictionary<uint, TypeDefinition> types;
Dictionary<uint, MethodDefinition> methods;

public ModuleMetadata (ModuleDefinition module)
{
this.module = module;
}

bool TryGetType (uint token, out TypeDefinition type)
{
if (types == null)
InitializeMetadata (module);

return types.TryGetValue (token, out type);
}

bool TryGetMethod (uint token, out MethodDefinition method)
{
if (methods == null)
InitializeMetadata (module);

return methods.TryGetValue (token, out method);
}

void InitializeMetadata (ModuleDefinition module)
{
types = new Dictionary<uint, TypeDefinition> ();
methods = new Dictionary<uint, MethodDefinition> ();

foreach (var type in module.GetTypes ()) {
types.Add (type.MetadataToken.ToUInt32 (), type);
InitializeMethods (type);
}
}

void InitializeMethods (TypeDefinition type)
{
foreach (var method in type.Methods)
methods.Add (method.MetadataToken.ToUInt32 (), method);
}

public bool TryGetTypeDefinitionInfo (int typeDefinitionToken, out string namespaceName, out string typeName, out System.Reflection.TypeAttributes attributes, out int baseTypeToken)
{
TypeDefinition type;
if (!TryGetType ((uint)typeDefinitionToken, out type)) {
namespaceName = null;
typeName = null;
attributes = 0;
baseTypeToken = 0;
return false;
}

typeName = type.IsNested ? type.Name : type.FullName;
namespaceName = type.Namespace;
attributes = (System.Reflection.TypeAttributes)type.Attributes;
baseTypeToken = type.BaseType.MetadataToken.ToInt32 ();
return true;
}

public bool TryGetEnclosingType (int nestedTypeToken, out int enclosingTypeToken)
{
TypeDefinition type;
if (!TryGetType ((uint)nestedTypeToken, out type) || !type.IsNested) {
enclosingTypeToken = 0;
return false;
}

enclosingTypeToken = type.DeclaringType.MetadataToken.ToInt32 ();
return true;
}

public bool TryGetMethodInfo (int methodDefinitionToken, out string methodName, out int declaringTypeToken)
{
MethodDefinition method;
if (!TryGetMethod ((uint)methodDefinitionToken, out method)) {
methodName = null;
declaringTypeToken = 0;
return false;
}

declaringTypeToken = method.DeclaringType.MetadataToken.ToInt32 ();
methodName = method.Name;
return true;
}
}
}

#endif
Loading

0 comments on commit eeec54a

Please sign in to comment.