提交 9c51c020 编写于 作者: T Tomáš Matoušek

Merge pull request #6558 from tmat/RemoveSymReaderMock

Remove SymReader mock, use the real reader since we always have ISymUnmanagedReader3 now
......@@ -140,7 +140,7 @@ public void LocalConstant_Simple()
{
var source =
@"class C
{
{
static void M()
{
const dynamic d = null;
......@@ -157,7 +157,7 @@ static dynamic ForceDynamicAttribute()
ImmutableArray<MetadataReference> references;
comp.EmitAndGetReferences(out exeBytes, out pdbBytes, out references);
var runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, new SymReader(pdbBytes, exeBytes));
var runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes, exeBytes));
var context = CreateMethodContext(runtime, "C.M");
var testData = new CompilationTestData();
......@@ -201,7 +201,7 @@ static dynamic ForceDynamicAttribute()
ImmutableArray<MetadataReference> references;
comp.EmitAndGetReferences(out exeBytes, out pdbBytes, out references);
var runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, new SymReader(pdbBytes, exeBytes));
var runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes, exeBytes));
var context = CreateMethodContext(runtime, "C.M");
var testData = new CompilationTestData();
......@@ -250,7 +250,7 @@ class Generic<T>
ImmutableArray<MetadataReference> references;
comp.EmitAndGetReferences(out exeBytes, out pdbBytes, out references);
var runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, new SymReader(pdbBytes, exeBytes));
var runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes, exeBytes));
var context = CreateMethodContext(runtime, "C.M");
var testData = new CompilationTestData();
......
......@@ -51,7 +51,7 @@ public override void Dispose()
ExpressionCompilerUtilities.GenerateUniqueName(),
references.AddIntrinsicAssembly(),
exeBytes,
includeSymbols ? new SymReader(pdbBytes, exeBytes) : null);
includeSymbols ? SymReaderFactory.CreateReader(pdbBytes, exeBytes) : null);
}
internal RuntimeInstance CreateRuntimeInstance(
......
......@@ -353,7 +353,7 @@ static void G()
CSharpMetadataContext previous = default(CSharpMetadataContext);
int startOffset;
int endOffset;
var runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, new SymReader(pdbBytes));
var runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes));
ImmutableArray<MetadataBlock> typeBlocks;
ImmutableArray<MetadataBlock> methodBlocks;
Guid moduleVersionId;
......@@ -421,7 +421,7 @@ static void G()
// With different references.
var fewerReferences = references.Remove(referenceA);
Assert.Equal(fewerReferences.Length, references.Length - 1);
runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), fewerReferences, exeBytes, new SymReader(pdbBytes));
runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), fewerReferences, exeBytes, SymReaderFactory.CreateReader(pdbBytes));
GetContextState(runtime, "C.F", out methodBlocks, out moduleVersionId, out symReader, out methodToken, out localSignatureToken);
// Different references. No reuse.
......@@ -1090,7 +1090,7 @@ .locals init ([0] class C c)
assemblyName: moduleId.ToString("D"),
references: ImmutableArray.Create(MscorlibRef),
exeBytes: exeBytes.ToArray(),
symReader: new SymReader(pdbBytes.ToArray()));
symReader: SymReaderFactory.CreateReader(pdbBytes));
var context = CreateMethodContext(
runtime,
methodName: "C.M");
......@@ -1142,7 +1142,7 @@ .locals init ([0] class C modopt(int32) modopt(object) c)
assemblyName: moduleId.ToString("D"),
references: ImmutableArray.Create(MscorlibRef),
exeBytes: exeBytes.ToArray(),
symReader: new SymReader(pdbBytes.ToArray()));
symReader: SymReaderFactory.CreateReader(pdbBytes));
var context = CreateMethodContext(
runtime,
methodName: "C.M");
......@@ -1193,7 +1193,7 @@ .maxstack 2
assemblyName: moduleId.ToString("D"),
references: ImmutableArray.Create(MscorlibRef),
exeBytes: exeBytes.ToArray(),
symReader: new SymReader(pdbBytes.ToArray()));
symReader: SymReaderFactory.CreateReader(pdbBytes));
var context = CreateMethodContext(
runtime,
methodName: "C.M");
......@@ -3830,7 +3830,7 @@ static void M()
referenceN0, // From D1
referenceN1, // From D2
referenceN2); // From D2
var runtime = CreateRuntimeInstance(assemblyName, references, exeBytes, new SymReader(pdbBytes));
var runtime = CreateRuntimeInstance(assemblyName, references, exeBytes, SymReaderFactory.CreateReader(pdbBytes));
var context = CreateMethodContext(
runtime,
methodName: "C.M");
......@@ -4551,7 +4551,7 @@ public void DateTimeFieldConstant()
assemblyName: ExpressionCompilerUtilities.GenerateUniqueName(),
references: ImmutableArray.Create(MscorlibRef),
exeBytes: exeBytes.ToArray(),
symReader: new SymReader(pdbBytes.ToArray()));
symReader: SymReaderFactory.CreateReader(pdbBytes));
var context = CreateMethodContext(
runtime,
methodName: "C.M");
......@@ -4728,7 +4728,7 @@ public void StaticLambdaInDisplayClass()
assemblyName: ExpressionCompilerUtilities.GenerateUniqueName(),
references: ImmutableArray.Create(MscorlibRef),
exeBytes: exeBytes.ToArray(),
symReader: new SymReader(pdbBytes.ToArray()));
symReader: SymReaderFactory.CreateReader(pdbBytes));
var context = CreateMethodContext(
runtime,
methodName: "C.<>c__DisplayClass2.<Test>b__1");
......@@ -5181,7 +5181,7 @@ public void FieldLikeEvent_WinRT()
assemblyName: GetUniqueName(),
references: ImmutableArray.Create(WinRtRefs),
exeBytes: ilBytes.ToArray(),
symReader: new SymReader(ilPdbBytes.ToArray()));
symReader: SymReaderFactory.CreateReader(ilPdbBytes.ToArray()));
var context = CreateMethodContext(runtime, "C.M");
......@@ -5527,7 +5527,7 @@ static void M()
includeLocalSignatures: false);
modulesBuilder.Add(corruptMetadata);
modulesBuilder.Add(exeReference.ToModuleInstance(exeBytes, new SymReader(pdbBytes)));
modulesBuilder.Add(exeReference.ToModuleInstance(exeBytes, SymReaderFactory.CreateReader(pdbBytes)));
modulesBuilder.AddRange(references.Select(r => r.ToModuleInstance(fullImage: null, symReader: null)));
var modules = modulesBuilder.ToImmutableAndFree();
......@@ -5580,7 +5580,7 @@ public void M(Missing parameter)
var result = comp.EmitAndGetReferences(out exeBytes, out pdbBytes, out unusedReferences);
Assert.True(result);
var runtime = CreateRuntimeInstance(GetUniqueName(), ImmutableArray.Create(MscorlibRef), exeBytes, new SymReader(pdbBytes));
var runtime = CreateRuntimeInstance(GetUniqueName(), ImmutableArray.Create(MscorlibRef), exeBytes, SymReaderFactory.CreateReader(pdbBytes));
var context = CreateMethodContext(runtime, "C.M");
var expectedError = "error CS0012: The type 'Missing' is defined in an assembly that is not referenced. You must add a reference to assembly 'Lib, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'.";
......@@ -5666,7 +5666,7 @@ public void Test()
var result = comp.EmitAndGetReferences(out exeBytes, out pdbBytes, out unusedReferences);
Assert.True(result);
var runtime = CreateRuntimeInstance(GetUniqueName(), ImmutableArray.Create(MscorlibRef, libAv1Ref, libBv2Ref), exeBytes, new SymReader(pdbBytes));
var runtime = CreateRuntimeInstance(GetUniqueName(), ImmutableArray.Create(MscorlibRef, libAv1Ref, libBv2Ref), exeBytes, SymReaderFactory.CreateReader(pdbBytes));
var context = CreateMethodContext(runtime, "Source.Test");
string error;
......@@ -5972,10 +5972,8 @@ public static void M()
pdbStream2.Position = 0;
peStream2.Position = 0;
// Note: This SymReader will behave differently from the ISymUnmanagedReader
// we receive during real debugging. We're just using it as a rough
// approximation of ISymUnmanagedReader3, which is unavailable here.
var symReader = new SymReader(new[] { pdbStream1, pdbStream2 }, peStream2, null);
var symReader = SymReaderFactory.CreateReader(pdbStream1);
symReader.UpdateSymbolStore(pdbStream2);
var runtime = CreateRuntimeInstance(
GetUniqueName(),
......
......@@ -636,7 +636,7 @@ class [mscorlib]System.Collections.Generic.IEnumerator`1<object>,
assemblyName: GetUniqueName(),
references: ImmutableArray.Create(MscorlibRef),
exeBytes: ilBytes.ToArray(),
symReader: new SymReader(ilPdbBytes.ToArray(), ilBytes.ToArray()));
symReader: SymReaderFactory.CreateReader(ilPdbBytes));
var context = CreateMethodContext(runtime, "C.<I<System.Int32>.F>d__0.MoveNext");
VerifyHasThis(context, "C", @"
......@@ -791,7 +791,7 @@ public void OldStyleNonCapturingLambda()
assemblyName: GetUniqueName(),
references: ImmutableArray.Create(MscorlibRef),
exeBytes: ilBytes.ToArray(),
symReader: new SymReader(ilPdbBytes.ToArray()));
symReader: SymReaderFactory.CreateReader(ilPdbBytes.ToArray()));
var context = CreateMethodContext(runtime, "C.<M>b__0");
VerifyNoThis(context);
......
......@@ -157,7 +157,7 @@ void M(int[] a)
ExpressionCompilerUtilities.GenerateUniqueName(),
references,
exeBytes,
new SymReader(pdbBytes),
SymReaderFactory.CreateReader(pdbBytes),
includeLocalSignatures: false);
var context = CreateMethodContext(
runtime,
......@@ -561,7 +561,7 @@ static void Main()
ImmutableArray<MetadataReference> references;
compilation0.EmitAndGetReferences(out exeBytes, out pdbBytes, out references);
var runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, new SymReader(pdbBytes, exeBytes));
var runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes, exeBytes));
var context = CreateMethodContext(
runtime,
methodName: "C.M");
......@@ -622,7 +622,7 @@ static void Main()
ImmutableArray<MetadataReference> references;
compilation0.EmitAndGetReferences(out exeBytes, out pdbBytes, out references);
var runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, new SymReader(pdbBytes, exeBytes));
var runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes, exeBytes));
var context = CreateMethodContext(
runtime,
methodName: "C.M");
......@@ -1663,7 +1663,7 @@ static void M(A a, B b, C c)
ExpressionCompilerUtilities.GenerateUniqueName(),
ImmutableArray.Create(MscorlibRef), // no reference to compilation0
exeBytes,
new SymReader(pdbBytes));
SymReaderFactory.CreateReader(pdbBytes));
var context = CreateMethodContext(
runtime,
......@@ -1715,7 +1715,7 @@ public void MissingReference_2()
ExpressionCompilerUtilities.GenerateUniqueName(),
ImmutableArray.Create(MscorlibRef), // no reference to compilation0
exeBytes,
new SymReader(pdbBytes));
SymReaderFactory.CreateReader(pdbBytes));
var context = CreateMethodContext(
runtime,
......@@ -1813,7 +1813,7 @@ static void M()
ImmutableArray<MetadataReference> references;
comp.EmitAndGetReferences(out exeBytes, out pdbBytes, out references);
var runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, new SymReader(pdbBytes, exeBytes));
var runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes, exeBytes));
var context = CreateMethodContext(
runtime,
methodName: "C.M");
......@@ -1852,7 +1852,7 @@ static void M()
ImmutableArray<MetadataReference> references;
comp.EmitAndGetReferences(out exeBytes, out pdbBytes, out references);
var runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, new SymReader(pdbBytes, exeBytes));
var runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes, exeBytes));
var context = CreateMethodContext(
runtime,
methodName: "C.M");
......@@ -1894,7 +1894,7 @@ static void M()
ImmutableArray<MetadataReference> references;
comp.EmitAndGetReferences(out exeBytes, out pdbBytes, out references);
var runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, new SymReader(pdbBytes, exeBytes));
var runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes, exeBytes));
var context = CreateMethodContext(
runtime,
methodName: "C.M");
......@@ -2675,7 +2675,7 @@ void M()
var result = comp.EmitAndGetReferences(out exeBytes, out pdbBytes, out unusedReferences);
Assert.True(result);
var runtime = CreateRuntimeInstance(GetUniqueName(), ImmutableArray.Create(MscorlibRef, SystemRef, SystemCoreRef, SystemXmlLinqRef, libRef), exeBytes, new SymReader(pdbBytes));
var runtime = CreateRuntimeInstance(GetUniqueName(), ImmutableArray.Create(MscorlibRef, SystemRef, SystemCoreRef, SystemXmlLinqRef, libRef), exeBytes, SymReaderFactory.CreateReader(pdbBytes));
string typeName;
var locals = ArrayBuilder<LocalAndMethod>.GetInstance();
......
......@@ -750,7 +750,7 @@ private EvaluationContext CreateMethodContextWithReferences(Compilation comp, st
var result = comp.EmitAndGetReferences(out exeBytes, out pdbBytes, out unusedReferences);
Assert.True(result);
var runtime = CreateRuntimeInstance(GetUniqueName(), references, exeBytes, new SymReader(pdbBytes));
var runtime = CreateRuntimeInstance(GetUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes));
return CreateMethodContext(runtime, methodName);
}
......
......@@ -98,7 +98,7 @@ static void M()
Guid.NewGuid().ToString("D"),
references,
exeBytes,
new SymReader(pdbBytes));
SymReaderFactory.CreateReader(pdbBytes));
var context = CreateMethodContext(runtime, "C.M");
string error;
var testData = new CompilationTestData();
......@@ -184,9 +184,9 @@ static void Main()
// Create runtime from modules { mscorlib, PIA, A, B }.
var modulesBuilder = ArrayBuilder<ModuleInstance>.GetInstance();
modulesBuilder.Add(MscorlibRef.ToModuleInstance(fullImage: null, symReader: null));
modulesBuilder.Add(referenceA.ToModuleInstance(fullImage: exeA, symReader: new SymReader(pdbA)));
modulesBuilder.Add(referenceA.ToModuleInstance(fullImage: exeA, symReader: SymReaderFactory.CreateReader(pdbA)));
modulesBuilder.Add(referencePIA.ToModuleInstance(fullImage: null, symReader: null));
modulesBuilder.Add(referenceB.ToModuleInstance(fullImage: exeB, symReader: new SymReader(pdbB)));
modulesBuilder.Add(referenceB.ToModuleInstance(fullImage: exeB, symReader: SymReaderFactory.CreateReader(pdbB)));
using (var runtime = new RuntimeInstance(modulesBuilder.ToImmutableAndFree()))
{
......
......@@ -949,7 +949,7 @@ static void M()
assemblyNameB,
ImmutableArray.Create(MscorlibRef, referenceA2).AddIntrinsicAssembly(),
exeBytes,
new SymReader(pdbBytes));
SymReaderFactory.CreateReader(pdbBytes));
//// typeof(Exception), typeof(A<B<object>>), typeof(B<A<object>[]>)
var context = CreateMethodContext(
......@@ -1047,8 +1047,8 @@ static void Main()
var modulesBuilder = ArrayBuilder<ModuleInstance>.GetInstance();
modulesBuilder.Add(MscorlibRef.ToModuleInstance(fullImage: null, symReader: null));
modulesBuilder.Add(referenceA.ToModuleInstance(fullImage: exeA, symReader: new SymReader(pdbA)));
modulesBuilder.Add(referenceB.ToModuleInstance(fullImage: exeB, symReader: new SymReader(pdbB)));
modulesBuilder.Add(referenceA.ToModuleInstance(fullImage: exeA, symReader: SymReaderFactory.CreateReader(pdbA)));
modulesBuilder.Add(referenceB.ToModuleInstance(fullImage: exeB, symReader: SymReaderFactory.CreateReader(pdbB)));
modulesBuilder.Add(ExpressionCompilerTestHelpers.IntrinsicAssemblyReference.ToModuleInstance(fullImage: null, symReader: null));
using (var runtime = new RuntimeInstance(modulesBuilder.ToImmutableAndFree()))
......
......@@ -159,7 +159,7 @@ static void M()
assemblyNameC,
ImmutableArray.Create(MscorlibRef, referenceAS1, referenceAS2, referenceBS2, referenceBS1, referenceBS2),
exeBytesC1,
new SymReader(pdbBytesC1)))
SymReaderFactory.CreateReader(pdbBytesC1)))
{
ImmutableArray<MetadataBlock> typeBlocks;
ImmutableArray<MetadataBlock> methodBlocks;
......@@ -357,7 +357,7 @@ static void M()
compilationA.EmitAndGetReferences(out exeBytesA, out pdbBytesA, out referencesA);
var referenceA = AssemblyMetadata.CreateFromImage(exeBytesA).GetReference(display: assemblyNameA);
var identityA = referenceA.GetAssemblyIdentity();
var moduleA = referenceA.ToModuleInstance(exeBytesA, new SymReader(pdbBytesA));
var moduleA = referenceA.ToModuleInstance(exeBytesA, SymReaderFactory.CreateReader(pdbBytesA));
var assemblyNameB = ExpressionCompilerUtilities.GenerateUniqueName();
var compilationB = CreateCompilationWithMscorlibAndSystemCore(sourceB, options: TestOptions.DebugDll, assemblyName: assemblyNameB, references: new[] { referenceA });
......@@ -366,7 +366,7 @@ static void M()
ImmutableArray<MetadataReference> referencesB;
compilationB.EmitAndGetReferences(out exeBytesB, out pdbBytesB, out referencesB);
var referenceB = AssemblyMetadata.CreateFromImage(exeBytesB).GetReference(display: assemblyNameB);
var moduleB = referenceB.ToModuleInstance(exeBytesB, new SymReader(pdbBytesB));
var moduleB = referenceB.ToModuleInstance(exeBytesB, SymReaderFactory.CreateReader(pdbBytesB));
var moduleBuilder = ArrayBuilder<ModuleInstance>.GetInstance();
moduleBuilder.AddRange(referencesA.Select(r => r.ToModuleInstance(null, null)));
......@@ -493,7 +493,7 @@ class C
compilationA.EmitAndGetReferences(out exeBytesA, out pdbBytesA, out referencesA);
var referenceA = AssemblyMetadata.CreateFromImage(exeBytesA).GetReference(display: assemblyNameA);
var identityA = referenceA.GetAssemblyIdentity();
var moduleA = referenceA.ToModuleInstance(exeBytesA, new SymReader(pdbBytesA));
var moduleA = referenceA.ToModuleInstance(exeBytesA, SymReaderFactory.CreateReader(pdbBytesA));
var assemblyNameB = ExpressionCompilerUtilities.GenerateUniqueName();
var compilationB = CreateCompilation(
......@@ -506,7 +506,7 @@ class C
ImmutableArray<MetadataReference> referencesB;
compilationB.EmitAndGetReferences(out exeBytesB, out pdbBytesB, out referencesB);
var referenceB = AssemblyMetadata.CreateFromImage(exeBytesB).GetReference(display: assemblyNameB);
var moduleB = referenceB.ToModuleInstance(exeBytesB, new SymReader(pdbBytesB));
var moduleB = referenceB.ToModuleInstance(exeBytesB, SymReaderFactory.CreateReader(pdbBytesB));
// Include an empty assembly to verify that not all assemblies
// with no references are treated as mscorlib.
......@@ -681,7 +681,7 @@ static void M(A a)
compilationA.EmitAndGetReferences(out exeBytesA, out pdbBytesA, out referencesA);
var referenceA = AssemblyMetadata.CreateFromImage(exeBytesA).GetReference(display: assemblyNameA);
var identityA = referenceA.GetAssemblyIdentity();
var moduleA = referenceA.ToModuleInstance(exeBytesA, new SymReader(pdbBytesA));
var moduleA = referenceA.ToModuleInstance(exeBytesA, SymReaderFactory.CreateReader(pdbBytesA));
var assemblyNameB = ExpressionCompilerUtilities.GenerateUniqueName();
var compilationB = CreateCompilationWithMscorlibAndSystemCore(sourceB, options: TestOptions.DebugDll, assemblyName: assemblyNameB, references: new[] { referenceA });
......@@ -690,7 +690,7 @@ static void M(A a)
ImmutableArray<MetadataReference> referencesB;
compilationB.EmitAndGetReferences(out exeBytesB, out pdbBytesB, out referencesB);
var referenceB = AssemblyMetadata.CreateFromImage(exeBytesB).GetReference(display: assemblyNameB);
var moduleB = referenceB.ToModuleInstance(exeBytesB, new SymReader(pdbBytesB));
var moduleB = referenceB.ToModuleInstance(exeBytesB, SymReaderFactory.CreateReader(pdbBytesB));
var moduleBuilder = ArrayBuilder<ModuleInstance>.GetInstance();
moduleBuilder.AddRange(referencesA.Select(r => r.ToModuleInstance(null, null)));
......
......@@ -118,7 +118,7 @@ public void AccessType()
assemblyName: GetUniqueName(),
references: ImmutableArray.Create(MscorlibRef),
exeBytes: exeBytes.ToArray(),
symReader: new SymReader(pdbBytes.ToArray()));
symReader: SymReaderFactory.CreateReader(pdbBytes));
var context = CreateMethodContext(runtime, methodName: "C.Test");
Assert.Equal(DkmEvaluationResultAccessType.Private, GetResultProperties(context, "Private").AccessType);
......
......@@ -259,10 +259,8 @@ private static ImmutableArray<ImmutableArray<string>> GetGroupedImportStrings(Co
// SymReader implements ISymUnmanagedReader3 and the COM object
// might not.
pdbbits.Position = 0;
using (var reader = new SymReader(pdbbits.ToArray()))
{
return reader.GetCSharpGroupedImportStrings(methodToken, methodVersion: 1, externAliasStrings: out externAliasStrings);
}
var reader = SymReaderFactory.CreateReader(pdbbits);
return reader.GetCSharpGroupedImportStrings(methodToken, methodVersion: 1, externAliasStrings: out externAliasStrings);
}
}
}
......@@ -1090,8 +1088,8 @@ public class C2 : C1
var ref2 = AssemblyMetadata.CreateFromImage(dllBytes2).GetReference(display: "B");
var modulesBuilder = ArrayBuilder<ModuleInstance>.GetInstance();
modulesBuilder.Add(ref1.ToModuleInstance(dllBytes1, new SymReader(pdbBytes1, dllBytes1)));
modulesBuilder.Add(ref2.ToModuleInstance(dllBytes2, new SymReader(pdbBytes2, dllBytes2)));
modulesBuilder.Add(ref1.ToModuleInstance(dllBytes1, SymReaderFactory.CreateReader(pdbBytes1)));
modulesBuilder.Add(ref2.ToModuleInstance(dllBytes2, SymReaderFactory.CreateReader(pdbBytes2)));
modulesBuilder.Add(MscorlibRef_v4_0_30316_17626.ToModuleInstance(fullImage: null, symReader: null));
modulesBuilder.Add(ExpressionCompilerTestHelpers.IntrinsicAssemblyReference.ToModuleInstance(fullImage: null, symReader: null));
......
......@@ -52,7 +52,7 @@ static void M(Windows.Storage.StorageFolder f, Windows.Foundation.Collections.Pr
ExpressionCompilerUtilities.GenerateUniqueName(),
ImmutableArray.Create(MscorlibRef).Concat(runtimeAssemblies), // no reference to Windows.winmd
exeBytes,
new SymReader(pdbBytes));
SymReaderFactory.CreateReader(pdbBytes));
var context = CreateMethodContext(runtime, "C.M");
string error;
var testData = new CompilationTestData();
......@@ -97,7 +97,7 @@ static void M(X::Windows.Storage.StorageFolder f)
ExpressionCompilerUtilities.GenerateUniqueName(),
ImmutableArray.Create(MscorlibRef).Concat(runtimeAssemblies), // no reference to Windows.winmd
exeBytes,
new SymReader(pdbBytes));
SymReaderFactory.CreateReader(pdbBytes));
var context = CreateMethodContext(runtime, "C.M");
string error;
var testData = new CompilationTestData();
......@@ -389,7 +389,7 @@ .maxstack 1
ExpressionCompilerUtilities.GenerateUniqueName(),
runtimeReferences.AddIntrinsicAssembly(),
exeBytes,
new SymReader(pdbBytes));
SymReaderFactory.CreateReader(pdbBytes));
}
private static byte[] ToVersion1_3(byte[] bytes)
......
......@@ -485,7 +485,7 @@ End Namespace
End Using
Assert.Equal(makePdb, pdbBytes IsNot Nothing)
Dim compRef = AssemblyMetadata.CreateFromImage(peBytes).GetReference()
Return compRef.ToModuleInstance(peBytes, If(makePdb, New SymReader(pdbBytes), Nothing))
Return compRef.ToModuleInstance(peBytes, If(makePdb, SymReaderFactory.CreateReader(pdbBytes), Nothing))
End Function
Private Shared Function GetModuleInstanceForIL(ilSource As String) As ModuleInstance
......@@ -493,7 +493,7 @@ End Namespace
Dim pdbBytes As ImmutableArray(Of Byte) = Nothing
EmitILToArray(ilSource, appendDefaultHeader:=False, includePdb:=True, assemblyBytes:=peBytes, pdbBytes:=pdbBytes)
Dim compRef = AssemblyMetadata.CreateFromImage(peBytes).GetReference()
Return compRef.ToModuleInstance(peBytes.ToArray(), New SymReader(pdbBytes.ToArray()))
Return compRef.ToModuleInstance(peBytes.ToArray(), SymReaderFactory.CreateReader(pdbBytes))
End Function
Private Shared Sub CheckDteeMethodDebugInfo(methodDebugInfo As MethodDebugInfo, ParamArray namespaceNames As String())
......
......@@ -50,7 +50,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.UnitTests
ExpressionCompilerUtilities.GenerateUniqueName(),
references.AddIntrinsicAssembly(),
exeBytes,
If(includeSymbols, New SymReader(pdbBytes, exeBytes), Nothing))
If(includeSymbols, SymReaderFactory.CreateReader(pdbBytes, exeBytes), Nothing))
End Function
Friend Function CreateRuntimeInstance(
......
......@@ -263,7 +263,7 @@ End Class"
Dim previous As VisualBasicMetadataContext = Nothing
Dim startOffset = 0
Dim endOffset = 0
Dim runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, New SymReader(pdbBytes))
Dim runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes))
Dim typeBlocks As ImmutableArray(Of MetadataBlock) = Nothing
Dim methodBlocks As ImmutableArray(Of MetadataBlock) = Nothing
Dim moduleVersionId As Guid = Nothing
......@@ -325,7 +325,7 @@ End Class"
' With different references.
Dim fewerReferences = references.Remove(referenceA)
Assert.Equal(fewerReferences.Length, references.Length - 1)
runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), fewerReferences, exeBytes, New SymReader(pdbBytes))
runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), fewerReferences, exeBytes, SymReaderFactory.CreateReader(pdbBytes))
methodBlocks = Nothing
moduleVersionId = Nothing
symReader = Nothing
......@@ -1091,7 +1091,7 @@ End Class
assemblyName:=ExpressionCompilerUtilities.GenerateUniqueName(),
references:=ImmutableArray.Create(MscorlibRef),
exeBytes:=exeBytes.ToArray(),
symReader:=New SymReader(pdbBytes.ToArray()))
symReader:=SymReaderFactory.CreateReader(pdbBytes))
Dim context = CreateMethodContext(runtime, methodName:="C.M")
Dim errorMessage As String = Nothing
......@@ -1144,7 +1144,7 @@ End Class
assemblyName:=ExpressionCompilerUtilities.GenerateUniqueName(),
references:=ImmutableArray.Create(MscorlibRef),
exeBytes:=exeBytes.ToArray(),
symReader:=New SymReader(pdbBytes.ToArray()))
symReader:=SymReaderFactory.CreateReader(pdbBytes))
Dim context = CreateMethodContext(runtime, methodName:="C.M")
Dim errorMessage As String = Nothing
......@@ -1196,7 +1196,7 @@ End Class
assemblyName:=ExpressionCompilerUtilities.GenerateUniqueName(),
references:=ImmutableArray.Create(MscorlibRef),
exeBytes:=exeBytes.ToArray(),
symReader:=New SymReader(pdbBytes.ToArray()))
symReader:=SymReaderFactory.CreateReader(pdbBytes))
Dim context = CreateMethodContext(runtime, methodName:="C.M")
Dim errorMessage As String = Nothing
......@@ -1792,7 +1792,7 @@ End Class"
ExpressionCompilerUtilities.GenerateUniqueName(),
allReferences,
exeBytes,
New SymReader(pdbBytes, exeBytes)) ' Need SymReader to find root namespace.
SymReaderFactory.CreateReader(pdbBytes)) ' Need SymReader to find root namespace.
Dim context = CreateMethodContext(runtime, "Root.C.M")
Dim errorMessage As String = Nothing
Dim testData = New CompilationTestData()
......@@ -3095,7 +3095,7 @@ End Class
assemblyName:=ExpressionCompilerUtilities.GenerateUniqueName(),
references:=ImmutableArray.Create(MscorlibRef),
exeBytes:=exeBytes.ToArray(),
symReader:=New SymReader(pdbBytes.ToArray()))
symReader:=SymReaderFactory.CreateReader(pdbBytes))
Dim context = CreateMethodContext(
runtime,
......@@ -3683,7 +3683,7 @@ End Class"
includeLocalSignatures:=False)
modulesBuilder.Add(corruptMetadata)
modulesBuilder.Add(exeReference.ToModuleInstance(exeBytes, New SymReader(pdbBytes)))
modulesBuilder.Add(exeReference.ToModuleInstance(exeBytes, SymReaderFactory.CreateReader(pdbBytes)))
modulesBuilder.AddRange(references.Select(Function(r) r.ToModuleInstance(fullImage:=Nothing, symReader:=Nothing)))
Dim modules = modulesBuilder.ToImmutableAndFree()
......@@ -3733,7 +3733,7 @@ End Class
Dim result = comp.EmitAndGetReferences(exeBytes, pdbBytes, unusedReferences)
Assert.True(result)
Dim runtime = CreateRuntimeInstance(GetUniqueName(), ImmutableArray.Create(MscorlibRef), exeBytes, New SymReader(pdbBytes))
Dim runtime = CreateRuntimeInstance(GetUniqueName(), ImmutableArray.Create(MscorlibRef), exeBytes, SymReaderFactory.CreateReader(pdbBytes))
Dim context = CreateMethodContext(runtime, "C.M")
Const expectedError1 = "error BC30652: Reference required to assembly 'Lib, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' containing the type 'Missing'. Add one to your project."
......@@ -4116,10 +4116,8 @@ End Class
pdbStream2.Position = 0
peStream2.Position = 0
' Note: This SymReader will behave differently from the ISymUnmanagedReader
' we receive during real debugging. We're just using it as a rough
' approximation of ISymUnmanagedReader3, which is unavailable here.
Dim symReader = New SymReader({pdbStream1, pdbStream2}, peStream2, Nothing)
Dim symReader = SymReaderFactory.CreateReader(pdbStream1)
symReader.UpdateSymbolStore(pdbStream2)
Dim runtime = CreateRuntimeInstance(
GetUniqueName(),
......
......@@ -489,7 +489,7 @@ End Module
assemblyName:=GetUniqueName(),
references:=ImmutableArray.Create(MscorlibRef),
exeBytes:=ilBytes.ToArray(),
symReader:=New SymReader(ilPdbBytes.ToArray()))
symReader:=SymReaderFactory.CreateReader(ilPdbBytes.ToArray()))
Dim context = CreateMethodContext(runtime, "C._Lambda$__1")
VerifyNoMe(context)
......
......@@ -130,9 +130,8 @@ End Namespace
Dim methodToken = metadataReader.GetToken(methodHandle)
pdbbits.Position = 0
Using reader As New SymReader(pdbbits)
Return reader.GetVisualBasicImportStrings(methodToken, methodVersion:=1)
End Using
Dim reader = SymReaderFactory.CreateReader(pdbbits)
Return reader.GetVisualBasicImportStrings(methodToken, methodVersion:=1)
End Using
End Using
End Using
......@@ -500,8 +499,8 @@ End Class
Dim ref2 = AssemblyMetadata.CreateFromImage(dllBytes2).GetReference(display:="B")
Dim modulesBuilder = ArrayBuilder(Of ModuleInstance).GetInstance()
modulesBuilder.Add(ref1.ToModuleInstance(dllBytes1, New SymReader(pdbBytes1, dllBytes1)))
modulesBuilder.Add(ref2.ToModuleInstance(dllBytes2, New SymReader(pdbBytes2, dllBytes2)))
modulesBuilder.Add(ref1.ToModuleInstance(dllBytes1, SymReaderFactory.CreateReader(pdbBytes1)))
modulesBuilder.Add(ref2.ToModuleInstance(dllBytes2, SymReaderFactory.CreateReader(pdbBytes2)))
modulesBuilder.Add(MscorlibRef_v4_0_30316_17626.ToModuleInstance(fullImage:=Nothing, symReader:=Nothing))
modulesBuilder.Add(ExpressionCompilerTestHelpers.IntrinsicAssemblyReference.ToModuleInstance(fullImage:=Nothing, symReader:=Nothing))
......
......@@ -247,7 +247,7 @@ End Class"
Dim pdbBytes As Byte() = Nothing
Dim references As ImmutableArray(Of MetadataReference) = Nothing
comp.EmitAndGetReferences(exeBytes, pdbBytes, references)
Dim runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, New SymReader(pdbBytes), includeLocalSignatures:=False)
Dim runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes), includeLocalSignatures:=False)
Dim context = CreateMethodContext(
runtime,
methodName:="C.M",
......@@ -561,7 +561,7 @@ End Class"
Dim pdbBytes As Byte() = Nothing
Dim references As ImmutableArray(Of MetadataReference) = Nothing
comp.EmitAndGetReferences(exeBytes, pdbBytes, references)
Dim runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, New SymReader(pdbBytes, exeBytes))
Dim runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes, exeBytes))
Dim context = CreateMethodContext(
runtime,
methodName:="C.M")
......@@ -617,7 +617,7 @@ End Class"
Dim pdbBytes As Byte() = Nothing
Dim references As ImmutableArray(Of MetadataReference) = Nothing
comp.EmitAndGetReferences(exeBytes, pdbBytes, references)
Dim runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, New SymReader(pdbBytes, exeBytes))
Dim runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes, exeBytes))
Dim context = CreateMethodContext(
runtime,
methodName:="C.M")
......@@ -1702,7 +1702,7 @@ End Class"
ExpressionCompilerUtilities.GenerateUniqueName(),
ImmutableArray.Create(MscorlibRef), ' no reference to compilation0
exeBytes,
New SymReader(pdbBytes))
SymReaderFactory.CreateReader(pdbBytes))
Dim context = CreateMethodContext(
runtime,
......@@ -1776,7 +1776,7 @@ End Class
Dim references As ImmutableArray(Of MetadataReference) = Nothing
comp.EmitAndGetReferences(exeBytes, pdbBytes, references)
Dim runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, New SymReader(pdbBytes, exeBytes))
Dim runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes, exeBytes))
Dim context = CreateMethodContext(
runtime,
methodName:="C.M")
......@@ -1825,7 +1825,7 @@ End Class
Dim references As ImmutableArray(Of MetadataReference) = Nothing
comp.EmitAndGetReferences(exeBytes, pdbBytes, references)
Dim runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, New SymReader(pdbBytes, exeBytes))
Dim runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes, exeBytes))
Dim context = CreateMethodContext(
runtime,
methodName:="C.M")
......@@ -2653,7 +2653,7 @@ End Class
' Referencing SystemCoreRef and SystemXmlLinqRef will cause Microsoft.VisualBasic.Embedded to be compiled
' and it depends on EditorBrowsableAttribute.
Dim runtimeReferences = ImmutableArray.Create(MscorlibRef, SystemRef, SystemCoreRef, SystemXmlLinqRef, libRef)
Dim runtime = CreateRuntimeInstance(GetUniqueName(), runtimeReferences, exeBytes, New SymReader(pdbBytes))
Dim runtime = CreateRuntimeInstance(GetUniqueName(), runtimeReferences, exeBytes, SymReaderFactory.CreateReader(pdbBytes))
Dim typeName As String = Nothing
Dim locals = ArrayBuilder(Of LocalAndMethod).GetInstance()
......
......@@ -343,7 +343,7 @@ End Class
GetUniqueName(),
ImmutableArray.Create(CSharpRef, ExpressionCompilerTestHelpers.IntrinsicAssemblyReference),
exeBytes,
New SymReader(pdbBytes))
SymReaderFactory.CreateReader(pdbBytes))
Dim context = CreateMethodContext(
runtime,
"C.M")
......@@ -580,7 +580,7 @@ End Class"
Dim result = comp.EmitAndGetReferences(exeBytes, pdbBytes, unusedReferences)
Assert.True(result)
Dim runtime = CreateRuntimeInstance(GetUniqueName(), references, exeBytes, New SymReader(pdbBytes))
Dim runtime = CreateRuntimeInstance(GetUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes))
Return CreateMethodContext(runtime, methodName)
End Function
......
......@@ -836,7 +836,7 @@ End Class"
assemblyNameB,
ImmutableArray.Create(MscorlibRef, referenceA2).AddIntrinsicAssembly(),
exeBytes,
New SymReader(pdbBytes))
SymReaderFactory.CreateReader(pdbBytes))
' GetType(Exception), GetType(A(Of B(Of Object))), GetType(B(Of A(Of Object)()))
Dim context = CreateMethodContext(
......@@ -925,8 +925,8 @@ End Class"
Dim modulesBuilder = ArrayBuilder(Of ModuleInstance).GetInstance()
modulesBuilder.Add(MscorlibRef.ToModuleInstance(fullImage:=Nothing, symReader:=Nothing))
modulesBuilder.Add(referenceA.ToModuleInstance(fullImage:=exeA, symReader:=New SymReader(pdbA)))
modulesBuilder.Add(referenceB.ToModuleInstance(fullImage:=exeB, symReader:=New SymReader(pdbB)))
modulesBuilder.Add(referenceA.ToModuleInstance(fullImage:=exeA, symReader:=SymReaderFactory.CreateReader(pdbA)))
modulesBuilder.Add(referenceB.ToModuleInstance(fullImage:=exeB, symReader:=SymReaderFactory.CreateReader(pdbB)))
modulesBuilder.Add(ExpressionCompilerTestHelpers.IntrinsicAssemblyReference.ToModuleInstance(fullImage:=Nothing, symReader:=Nothing))
Using runtime = New RuntimeInstance(modulesBuilder.ToImmutableAndFree())
......
......@@ -96,7 +96,7 @@ End Class"
assemblyNameC,
ImmutableArray.Create(MscorlibRef, referenceAS1, referenceAS2, referenceBS2, referenceBS1, referenceBS2),
exeBytesC1,
New SymReader(pdbBytesC1))
SymReaderFactory.CreateReader(pdbBytesC1))
Dim typeBlocks As ImmutableArray(Of MetadataBlock) = Nothing
Dim methodBlocks As ImmutableArray(Of MetadataBlock) = Nothing
......@@ -197,7 +197,7 @@ End Class"
compilationA.EmitAndGetReferences(exeBytesA, pdbBytesA, referencesA)
Dim referenceA = AssemblyMetadata.CreateFromImage(exeBytesA).GetReference(display:=assemblyNameA)
Dim identityA = referenceA.GetAssemblyIdentity()
Dim moduleA = referenceA.ToModuleInstance(exeBytesA, New SymReader(pdbBytesA))
Dim moduleA = referenceA.ToModuleInstance(exeBytesA, SymReaderFactory.CreateReader(pdbBytesA))
Dim assemblyNameB = ExpressionCompilerUtilities.GenerateUniqueName()
Dim compilationB = CreateCompilationWithMscorlibAndVBRuntime(
......@@ -209,7 +209,7 @@ End Class"
Dim referencesB As ImmutableArray(Of MetadataReference) = Nothing
compilationB.EmitAndGetReferences(exeBytesB, pdbBytesB, referencesB)
Dim referenceB = AssemblyMetadata.CreateFromImage(exeBytesB).GetReference(display:=assemblyNameB)
Dim moduleB = referenceB.ToModuleInstance(exeBytesB, New SymReader(pdbBytesB))
Dim moduleB = referenceB.ToModuleInstance(exeBytesB, SymReaderFactory.CreateReader(pdbBytesB))
Dim moduleBuilder = ArrayBuilder(Of ModuleInstance).GetInstance()
moduleBuilder.AddRange(referencesA.Select(Function(r) r.ToModuleInstance(Nothing, Nothing)))
......@@ -348,7 +348,7 @@ End Class"
assemblyNameB,
ImmutableArray.Create(MscorlibRef, SystemRef, MsvbRef, referenceA1, referenceA2),
exeBytesB,
New SymReader(pdbBytesB))
SymReaderFactory.CreateReader(pdbBytesB))
Dim blocks As ImmutableArray(Of MetadataBlock) = Nothing
Dim moduleVersionId As Guid = Nothing
......
......@@ -111,7 +111,7 @@ End Class
assemblyName:=GetUniqueName(),
references:=ImmutableArray.Create(MscorlibRef),
exeBytes:=exeBytes.ToArray(),
symReader:=New SymReader(pdbBytes.ToArray()))
symReader:=SymReaderFactory.CreateReader(pdbBytes))
Dim context = CreateMethodContext(runtime, methodName:="C.Test")
Assert.Equal(DkmEvaluationResultAccessType.Private, GetResultProperties(context, "[Private]").AccessType)
......@@ -266,7 +266,7 @@ End Class
assemblyName:=GetUniqueName(),
references:=ImmutableArray.Create(MscorlibRef),
exeBytes:=exeBytes.ToArray(),
symReader:=New SymReader(pdbBytes.ToArray()))
symReader:=SymReaderFactory.CreateReader(pdbBytes))
Dim context = CreateMethodContext(runtime, methodName:="C.Test")
Assert.Equal(DkmEvaluationResultTypeModifierFlags.None, GetResultProperties(context, "F").ModifierFlags)
......
......@@ -41,7 +41,7 @@ End Class"
ExpressionCompilerUtilities.GenerateUniqueName(),
ImmutableArray.Create(MscorlibRef).Concat(runtimeAssemblies), ' no reference to Windows.winmd
exeBytes,
New SymReader(pdbBytes))
SymReaderFactory.CreateReader(pdbBytes))
Dim context = CreateMethodContext(runtime, "C.M")
Dim errorMessage As String = Nothing
Dim testData = New CompilationTestData()
......@@ -248,7 +248,7 @@ End Class"
ExpressionCompilerUtilities.GenerateUniqueName(),
runtimeReferences.AddIntrinsicAssembly(),
exeBytes,
New SymReader(pdbBytes))
SymReaderFactory.CreateReader(pdbBytes))
End Function
Private Shared Function ToVersion1_3(bytes As Byte()) As Byte()
......
// 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.Collections.Immutable;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection.Metadata;
using System.Reflection.PortableExecutable;
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.ComTypes;
using Microsoft.DiaSymReader;
using Roslyn.Utilities;
namespace Roslyn.Test.PdbUtilities
{
// TODO: remove, use SymReaderFactory instead
public sealed class SymReader : ISymUnmanagedReader, ISymUnmanagedReader2, ISymUnmanagedReader3, IDisposable
{
/// <summary>
/// Mock implementation: instead of a single reader with multiple versions, we'll use an array
/// of readers - each with a single version. We do this so that we can implement
/// <see cref="ISymUnmanagedReader3.GetSymAttributeByVersion"/> on top of
/// <see cref="ISymUnmanagedReader.GetSymAttribute"/>.
/// </summary>
private readonly ISymUnmanagedReader[] _readerVersions;
private readonly DummyMetadataImport _metadataImport;
private readonly PEReader _peReaderOpt;
private bool _isDisposed;
public SymReader(Stream pdbStream)
: this(new[] { pdbStream }, null, null)
{
}
public SymReader(byte[] pdbImage)
: this(new[] { new MemoryStream(pdbImage) }, null, null)
{
}
public SymReader(byte[] pdbImage, byte[] peImage)
: this(new[] { new MemoryStream(pdbImage) }, new MemoryStream(peImage), null)
{
}
public SymReader(Stream pdbStream, Stream peStream)
: this(new[] { pdbStream }, peStream, null)
{
}
public SymReader(Stream pdbStream, MetadataReader metadataReader)
: this(new[] { pdbStream }, null, metadataReader)
{
}
public SymReader(Stream[] pdbStreamsByVersion, Stream peStreamOpt, MetadataReader metadataReaderOpt)
{
if (peStreamOpt != null)
{
_peReaderOpt = new PEReader(peStreamOpt);
_metadataImport = new DummyMetadataImport(_peReaderOpt.GetMetadataReader());
}
else
{
_metadataImport = new DummyMetadataImport(metadataReaderOpt);
}
_readerVersions = pdbStreamsByVersion.Select(
pdbStream => CreateReader(pdbStream, _metadataImport)).ToArray();
// If ISymUnmanagedReader3 is available, then we shouldn't be passing in multiple byte streams - one should suffice.
Debug.Assert(!(UnversionedReader is ISymUnmanagedReader3) || _readerVersions.Length == 1);
}
private static ISymUnmanagedReader CreateReader(Stream pdbStream, object metadataImporter)
{
// NOTE: The product uses a different GUID (Microsoft.CodeAnalysis.ExpressionEvaluator.DkmUtilities.s_symUnmanagedReaderClassId).
Guid corSymReaderSxS = new Guid("0A3976C5-4529-4ef8-B0B0-42EED37082CD");
var reader = (ISymUnmanagedReader)Activator.CreateInstance(Marshal.GetTypeFromCLSID(corSymReaderSxS));
int hr = reader.Initialize(metadataImporter, null, null, new ComStreamWrapper(pdbStream));
SymUnmanagedReaderExtensions.ThrowExceptionForHR(hr);
return reader;
}
private ISymUnmanagedReader UnversionedReader => _readerVersions[0];
public int GetDocuments(int cDocs, out int pcDocs, ISymUnmanagedDocument[] pDocs)
{
return UnversionedReader.GetDocuments(cDocs, out pcDocs, pDocs);
}
public int GetMethod(int methodToken, out ISymUnmanagedMethod retVal)
{
// The EE should never be calling ISymUnmanagedReader.GetMethod. In order to account
// for EnC updates, it should always be calling GetMethodByVersion instead.
throw ExceptionUtilities.Unreachable;
}
public int GetMethodByVersion(int methodToken, int version, out ISymUnmanagedMethod retVal)
{
// Versions are 1-based.
Debug.Assert(version >= 1);
var reader = _readerVersions[version - 1];
version = _readerVersions.Length > 1 ? 1 : version;
return reader.GetMethodByVersion(methodToken, version, out retVal);
}
public int GetSymAttribute(int token, string name, int sizeBuffer, out int lengthBuffer, byte[] buffer)
{
// The EE should never be calling ISymUnmanagedReader.GetSymAttribute.
// In order to account for EnC updates, it should always be calling
// ISymUnmanagedReader3.GetSymAttributeByVersion instead.
throw ExceptionUtilities.Unreachable;
}
public int GetSymAttributeByVersion(int methodToken, int version, string name, int bufferLength, out int count, byte[] customDebugInformation)
{
// Versions are 1-based.
Debug.Assert(version >= 1);
return _readerVersions[version - 1].GetSymAttribute(methodToken, name, bufferLength, out count, customDebugInformation);
}
public int GetUserEntryPoint(out int entryPoint)
{
return UnversionedReader.GetUserEntryPoint(out entryPoint);
}
void IDisposable.Dispose()
{
if (!_isDisposed)
{
for (int i = 0; i < _readerVersions.Length; i++)
{
int hr = (_readerVersions[i] as ISymUnmanagedDispose).Destroy();
SymUnmanagedReaderExtensions.ThrowExceptionForHR(hr);
_readerVersions[i] = null;
}
_peReaderOpt?.Dispose();
_metadataImport.Dispose();
_isDisposed = true;
}
}
public int GetDocument(string url, Guid language, Guid languageVendor, Guid documentType, out ISymUnmanagedDocument document)
{
return UnversionedReader.GetDocument(url, language, languageVendor, documentType, out document);
}
public int GetVariables(int methodToken, int bufferLength, out int count, ISymUnmanagedVariable[] variables)
{
return UnversionedReader.GetVariables(methodToken, bufferLength, out count, variables);
}
public int GetGlobalVariables(int bufferLength, out int count, ISymUnmanagedVariable[] variables)
{
return UnversionedReader.GetGlobalVariables(bufferLength, out count, variables);
}
public int GetMethodFromDocumentPosition(ISymUnmanagedDocument document, int line, int column, out ISymUnmanagedMethod method)
{
return UnversionedReader.GetMethodFromDocumentPosition(document, line, column, out method);
}
public int GetNamespaces(int bufferLength, out int count, ISymUnmanagedNamespace[] namespaces)
{
return UnversionedReader.GetNamespaces(bufferLength, out count, namespaces);
}
public int Initialize(object metadataImporter, string fileName, string searchPath, IStream stream)
{
return UnversionedReader.Initialize(metadataImporter, fileName, searchPath, stream);
}
public int UpdateSymbolStore(string fileName, IStream stream)
{
return UnversionedReader.UpdateSymbolStore(fileName, stream);
}
public int ReplaceSymbolStore(string fileName, IStream stream)
{
return UnversionedReader.ReplaceSymbolStore(fileName, stream);
}
public int GetSymbolStoreFileName(int bufferLength, out int count, char[] name)
{
return UnversionedReader.GetSymbolStoreFileName(bufferLength, out count, name);
}
public int GetMethodsFromDocumentPosition(ISymUnmanagedDocument document, int line, int column, int bufferLength, out int count, ISymUnmanagedMethod[] methods)
{
return UnversionedReader.GetMethodsFromDocumentPosition(document, line, column, bufferLength, out count, methods);
}
public int GetDocumentVersion(ISymUnmanagedDocument document, out int version, out bool isCurrent)
{
return UnversionedReader.GetDocumentVersion(document, out version, out isCurrent);
}
public int GetMethodVersion(ISymUnmanagedMethod method, out int version)
{
return UnversionedReader.GetMethodVersion(method, out version);
}
public int GetMethodByVersionPreRemap(int methodToken, int version, out ISymUnmanagedMethod method)
{
throw new NotImplementedException();
}
public int GetSymAttributePreRemap(int methodToken, string name, int bufferLength, out int count, byte[] customDebugInformation)
{
throw new NotImplementedException();
}
public int GetMethodsInDocument(ISymUnmanagedDocument document, int bufferLength, out int count, ISymUnmanagedMethod[] methods)
{
throw new NotImplementedException();
}
public int GetSymAttributeByVersionPreRemap(int methodToken, int version, string name, int bufferLength, out int count, byte[] customDebugInformation)
{
throw new NotImplementedException();
}
}
}
// 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.Collections.Immutable;
using System.IO;
using System.Linq;
using System.Reflection.Metadata;
using System.Reflection.PortableExecutable;
using System.Runtime.InteropServices;
using Microsoft.DiaSymReader;
using Roslyn.Utilities;
......@@ -40,6 +43,21 @@ private static ISymUnmanagedReader3 CreateNativeSymReader(Stream pdbStream, obje
return reader;
}
public static ISymUnmanagedReader CreateReader(byte[] pdbImage, byte[] peImageOpt = null)
{
return CreateReader(new MemoryStream(pdbImage), (peImageOpt != null) ? new MemoryStream(peImageOpt) : null);
}
public static ISymUnmanagedReader CreateReader(ImmutableArray<byte> pdbImage, ImmutableArray<byte> peImageOpt = default(ImmutableArray<byte>))
{
return CreateReader(new MemoryStream(pdbImage.ToArray()), peImageOpt.IsDefault ? null : new MemoryStream(peImageOpt.ToArray()));
}
public static ISymUnmanagedReader CreateReader(Stream pdbStream, Stream peStreamOpt = null)
{
return CreateReader(pdbStream, (peStreamOpt != null) ? new PEReader(peStreamOpt, PEStreamOptions.PrefetchMetadata).GetMetadataReader() : null);
}
public static ISymUnmanagedReader CreateReader(Stream pdbStream, MetadataReader metadataReaderOpt)
{
return CreateReader(pdbStream, new DummyMetadataImport(metadataReaderOpt));
......
......@@ -104,7 +104,6 @@
<Compile Include="Pdb\CustomDebugInfoUtilities.cs" />
<Compile Include="Pdb\PdbToXml.cs" />
<Compile Include="Pdb\PdbToXmlOptions.cs" />
<Compile Include="Pdb\SymReader.cs" />
<Compile Include="Pdb\SymReaderFactory.cs" />
<Compile Include="Pdb\Token2SourceLineExporter.cs" />
<Compile Include="Shared\CustomDebugInfoReader.cs" />
......@@ -131,4 +130,4 @@
<ImportGroup Label="Targets">
<Import Project="..\..\..\build\Targets\VSL.Imports.targets" />
</ImportGroup>
</Project>
</Project>
\ No newline at end of file
......@@ -4,6 +4,7 @@
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Diagnostics;
using System.IO;
using System.Runtime.InteropServices;
using Roslyn.Utilities;
......@@ -606,5 +607,11 @@ public static IEnumerable<AsyncStepInfo> GetAsyncStepInfos(this ISymUnmanagedAsy
yield return new AsyncStepInfo(yieldOffsets[i], breakpointOffsets[i], breakpointMethods[i]);
}
}
public static void UpdateSymbolStore(this ISymUnmanagedReader reader, Stream pdbStream)
{
int hr = reader.UpdateSymbolStore(null, new ComStreamWrapper(pdbStream));
ThrowExceptionForHR(hr);
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册