提交 04557c3b 编写于 作者: P Paul Harrington

Made MetadataDecoder.GetSignatureCountsOrThrow static to reduce allocations in PEMethodSymbol.Arity

上级 59931e57
......@@ -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)
......
......@@ -898,11 +898,11 @@ internal ParamInfo<TypeSymbol>[] GetSignatureForMethod(MethodDefinitionHandle me
}
/// <exception cref="BadImageFormatException">An exception from metadata reader.</exception>
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)
/// <exception cref="BadImageFormatException">An exception from metadata reader.</exception>
internal BlobReader DecodeSignatureHeaderOrThrow(BlobHandle signature, out SignatureHeader signatureHeader)
{
BlobReader reader = Module.GetMemoryReaderOrThrow(signature);
return DecodeSignatureHeaderOrThrow(Module, signature, out signatureHeader);
}
/// <exception cref="BadImageFormatException">An exception from metadata reader.</exception>
internal static BlobReader DecodeSignatureHeaderOrThrow(PEModule module, BlobHandle signature, out SignatureHeader signatureHeader)
{
BlobReader reader = module.GetMemoryReaderOrThrow(signature);
signatureHeader = reader.ReadSignatureHeader();
return reader;
}
......
......@@ -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
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册