diff --git a/src/Compilers/CSharp/Portable/Symbols/Metadata/PE/PEMethodSymbol.cs b/src/Compilers/CSharp/Portable/Symbols/Metadata/PE/PEMethodSymbol.cs index 098dbc4b181a599e312a0225dbeb31be155f6362..b4859c05ad43459d34350146cd66a58bc85b7a4f 100644 --- a/src/Compilers/CSharp/Portable/Symbols/Metadata/PE/PEMethodSymbol.cs +++ b/src/Compilers/CSharp/Portable/Symbols/Metadata/PE/PEMethodSymbol.cs @@ -437,7 +437,7 @@ public override int Arity { int parameterCount; int typeParameterCount; - new MetadataDecoder(_containingType.ContainingPEModule, this).GetSignatureCountsOrThrow(_handle, out parameterCount, out typeParameterCount); + MetadataDecoder.GetSignatureCountsOrThrow(_containingType.ContainingPEModule.Module, _handle, out parameterCount, out typeParameterCount); return typeParameterCount; } catch (BadImageFormatException) @@ -600,7 +600,7 @@ internal override int ParameterCount { int parameterCount; int typeParameterCount; - new MetadataDecoder(_containingType.ContainingPEModule, this).GetSignatureCountsOrThrow(_handle, out parameterCount, out typeParameterCount); + MetadataDecoder.GetSignatureCountsOrThrow(_containingType.ContainingPEModule.Module, _handle, out parameterCount, out typeParameterCount); return parameterCount; } catch (BadImageFormatException) diff --git a/src/Compilers/Core/Portable/MetadataReader/MetadataDecoder.cs b/src/Compilers/Core/Portable/MetadataReader/MetadataDecoder.cs index c79025ed264e32a25e9e86007d2fe52a69646da7..5eefc0fbb449c1b4654714a8d6998fa699d7e30a 100644 --- a/src/Compilers/Core/Portable/MetadataReader/MetadataDecoder.cs +++ b/src/Compilers/Core/Portable/MetadataReader/MetadataDecoder.cs @@ -898,11 +898,11 @@ internal ParamInfo[] GetSignatureForMethod(MethodDefinitionHandle me } /// An exception from metadata reader. - internal void GetSignatureCountsOrThrow(MethodDefinitionHandle methodDef, out int parameterCount, out int typeParameterCount) + internal static void GetSignatureCountsOrThrow(PEModule module, MethodDefinitionHandle methodDef, out int parameterCount, out int typeParameterCount) { - BlobHandle signature = Module.GetMethodSignatureOrThrow(methodDef); + BlobHandle signature = module.GetMethodSignatureOrThrow(methodDef); SignatureHeader signatureHeader; - BlobReader signatureReader = DecodeSignatureHeaderOrThrow(signature, out signatureHeader); + BlobReader signatureReader = DecodeSignatureHeaderOrThrow(module, signature, out signatureHeader); GetSignatureCountsOrThrow(ref signatureReader, signatureHeader, out parameterCount, out typeParameterCount); } @@ -1497,7 +1497,13 @@ private TypeSymbol[] DecodeMethodSpecTypeArgumentsOrThrow(BlobHandle signature) /// An exception from metadata reader. internal BlobReader DecodeSignatureHeaderOrThrow(BlobHandle signature, out SignatureHeader signatureHeader) { - BlobReader reader = Module.GetMemoryReaderOrThrow(signature); + return DecodeSignatureHeaderOrThrow(Module, signature, out signatureHeader); + } + + /// An exception from metadata reader. + internal static BlobReader DecodeSignatureHeaderOrThrow(PEModule module, BlobHandle signature, out SignatureHeader signatureHeader) + { + BlobReader reader = module.GetMemoryReaderOrThrow(signature); signatureHeader = reader.ReadSignatureHeader(); return reader; } diff --git a/src/Compilers/VisualBasic/Portable/Symbols/Metadata/PE/PEMethodSymbol.vb b/src/Compilers/VisualBasic/Portable/Symbols/Metadata/PE/PEMethodSymbol.vb index b1e445f918eb8c4dbc3126f1b21bbe00528b93a4..b2b382b3ac9b823fea01c647cece1a94aa02e92f 100644 --- a/src/Compilers/VisualBasic/Portable/Symbols/Metadata/PE/PEMethodSymbol.vb +++ b/src/Compilers/VisualBasic/Portable/Symbols/Metadata/PE/PEMethodSymbol.vb @@ -550,8 +550,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Symbols.Metadata.PE Try Dim paramCount As Integer = 0 Dim typeParamCount As Integer = 0 - Dim decoder As New MetadataDecoder(Me.m_ContainingType.ContainingPEModule, Me) - decoder.GetSignatureCountsOrThrow(Me.m_Handle, paramCount, typeParamCount) + MetadataDecoder.GetSignatureCountsOrThrow(Me.m_ContainingType.ContainingPEModule.Module, Me.m_Handle, paramCount, typeParamCount) Return typeParamCount Catch mrEx As BadImageFormatException Return TypeParameters.Length @@ -673,8 +672,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Symbols.Metadata.PE Try Dim paramCount As Integer = 0 Dim typeParamCount As Integer = 0 - Dim decoder As New MetadataDecoder(Me.m_ContainingType.ContainingPEModule, Me) - decoder.GetSignatureCountsOrThrow(Me.m_Handle, paramCount, typeParamCount) + MetadataDecoder.GetSignatureCountsOrThrow(Me.m_ContainingType.ContainingPEModule.Module, Me.m_Handle, paramCount, typeParamCount) Return paramCount Catch mrEx As BadImageFormatException Return Parameters.Length