internal static void VerifyIL( this ImmutableArray <byte> assembly, string qualifiedName, string expectedIL, [CallerLineNumber] int expectedValueSourceLine = 0, [CallerFilePath] string expectedValueSourcePath = null) { var parts = qualifiedName.Split('.'); if (parts.Length != 2) { throw new NotImplementedException(); } using (var module = new PEModule(new PEReader(assembly), metadataOpt: IntPtr.Zero, metadataSizeOpt: 0)) { var reader = module.MetadataReader; var typeDef = reader.GetTypeDef(parts[0]); var methodName = parts[1]; var methodHandle = reader.GetMethodDefHandle(typeDef, methodName); var methodBody = module.GetMethodBodyOrThrow(methodHandle); var pooled = PooledStringBuilder.GetInstance(); var builder = pooled.Builder; var writer = new StringWriter(pooled.Builder); var visualizer = new MetadataVisualizer(reader, writer); visualizer.VisualizeMethodBody(methodBody, methodHandle, emitHeader: false); var actualIL = pooled.ToStringAndFree(); AssertEx.AssertEqualToleratingWhitespaceDifferences(expectedIL, actualIL, escapeQuotes: true, expectedValueSourcePath: expectedValueSourcePath, expectedValueSourceLine: expectedValueSourceLine); } }
internal int GetLocalSignatureToken(MethodDefinitionHandle methodHandle) { if (!_includeLocalSignatures) { return(0); } using (var module = new PEModule(new PEReader(ImmutableArray.CreateRange(this.FullImage)), metadataOpt: IntPtr.Zero, metadataSizeOpt: 0)) { var reader = module.MetadataReader; var methodIL = module.GetMethodBodyOrThrow(methodHandle); var localSignatureHandle = methodIL.LocalSignature; return(reader.GetToken(localSignatureHandle)); } }
internal int GetLocalSignatureToken(MethodDefinitionHandle methodHandle) { if (!_includeLocalSignatures) { return 0; } using (var module = new PEModule(new PEReader(ImmutableArray.CreateRange(this.FullImage)), metadataOpt: IntPtr.Zero, metadataSizeOpt: 0)) { var reader = module.MetadataReader; var methodIL = module.GetMethodBodyOrThrow(methodHandle); var localSignatureHandle = methodIL.LocalSignature; return reader.GetToken(localSignatureHandle); } }