提交 790c2574 编写于 作者: T Tomas Matousek

Avoid constructing SymReader explictly in tests

上级 0e17f665
......@@ -154,12 +154,7 @@ static dynamic ForceDynamicAttribute()
}
}";
var comp = CreateCompilationWithMscorlib(source, new[] { SystemCoreRef, CSharpRef }, options: TestOptions.DebugDll);
byte[] exeBytes;
byte[] pdbBytes;
ImmutableArray<MetadataReference> references;
comp.EmitAndGetReferences(out exeBytes, out pdbBytes, out references);
var runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes, exeBytes));
var runtime = CreateRuntimeInstance(comp);
var context = CreateMethodContext(runtime, "C.M");
var testData = new CompilationTestData();
......@@ -198,12 +193,7 @@ static dynamic ForceDynamicAttribute()
}
}";
var comp = CreateCompilationWithMscorlib(source, new[] { SystemCoreRef, CSharpRef }, options: TestOptions.DebugDll);
byte[] exeBytes;
byte[] pdbBytes;
ImmutableArray<MetadataReference> references;
comp.EmitAndGetReferences(out exeBytes, out pdbBytes, out references);
var runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes, exeBytes));
var runtime = CreateRuntimeInstance(comp);
var context = CreateMethodContext(runtime, "C.M");
var testData = new CompilationTestData();
......@@ -247,12 +237,7 @@ class Generic<T>
}
";
var comp = CreateCompilationWithMscorlib(source, new[] { SystemCoreRef, CSharpRef }, options: TestOptions.DebugDll);
byte[] exeBytes;
byte[] pdbBytes;
ImmutableArray<MetadataReference> references;
comp.EmitAndGetReferences(out exeBytes, out pdbBytes, out references);
var runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes, exeBytes));
var runtime = CreateRuntimeInstance(comp);
var context = CreateMethodContext(runtime, "C.M");
var testData = new CompilationTestData();
......
// 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.Generic;
using System.Collections.Immutable;
using System.Linq;
using System.Reflection.Metadata;
......@@ -46,21 +47,25 @@ public override void Dispose()
_runtimeInstances.Free();
}
internal RuntimeInstance CreateRuntimeInstance(Compilation compilation, DebugInformationFormat debugFormat = DebugInformationFormat.Pdb)
internal RuntimeInstance CreateRuntimeInstance(
Compilation compilation,
IEnumerable<MetadataReference> references = null,
DebugInformationFormat debugFormat = DebugInformationFormat.Pdb,
bool includeLocalSignatures = true)
{
var instance = RuntimeInstance.Create(compilation, debugFormat);
var instance = RuntimeInstance.Create(compilation, references, debugFormat, includeLocalSignatures);
_runtimeInstances.Add(instance);
return instance;
}
internal RuntimeInstance CreateRuntimeInstance(
string assemblyName,
ImmutableArray<MetadataReference> references,
byte[] exeBytes,
IEnumerable<MetadataReference> references,
ImmutableArray<byte> peImage,
ISymUnmanagedReader symReader,
string assemblyName = null,
bool includeLocalSignatures = true)
{
var instance = RuntimeInstance.Create(assemblyName, references, exeBytes.ToImmutableArray(), symReader, includeLocalSignatures);
var instance = RuntimeInstance.Create(references, peImage, symReader, assemblyName, includeLocalSignatures);
_runtimeInstances.Add(instance);
return instance;
}
......@@ -175,7 +180,7 @@ internal RuntimeInstance CreateRuntimeInstance(Compilation compilation, DebugInf
source,
options: (outputKind == OutputKind.DynamicallyLinkedLibrary) ? TestOptions.DebugDll : TestOptions.DebugExe);
var runtime = CreateRuntimeInstance(compilation0, includeSymbols ? DebugInformationFormat.Pdb : 0);
var runtime = CreateRuntimeInstance(compilation0, debugFormat: includeSymbols ? DebugInformationFormat.Pdb : 0);
var context = CreateMethodContext(runtime, methodName, atLineNumber);
var testData = new CompilationTestData();
ImmutableArray<AssemblyIdentity> missingAssemblyIdentities;
......
......@@ -334,18 +334,16 @@ static void G()
{
}
}";
var compilationA = CreateCompilationWithMscorlib(
sourceA,
options: TestOptions.DebugDll,
assemblyName: ExpressionCompilerUtilities.GenerateUniqueName());
var compilationA = CreateCompilationWithMscorlib(sourceA, options: TestOptions.DebugDll);
var referenceA = compilationA.EmitToImageReference();
var compilationB = CreateCompilationWithMscorlib(
sourceB,
options: TestOptions.DebugDll,
assemblyName: ExpressionCompilerUtilities.GenerateUniqueName(),
references: new MetadataReference[] { referenceA });
byte[] exeBytes;
byte[] pdbBytes;
ImmutableArray<byte> exeBytes;
ImmutableArray<byte> pdbBytes;
ImmutableArray<MetadataReference> references;
compilationB.EmitAndGetReferences(out exeBytes, out pdbBytes, out references);
const int methodVersion = 1;
......@@ -353,7 +351,7 @@ static void G()
CSharpMetadataContext previous = default(CSharpMetadataContext);
int startOffset;
int endOffset;
var runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes));
var runtime = CreateRuntimeInstance(references, exeBytes, SymReaderFactory.CreateReader(pdbBytes));
ImmutableArray<MetadataBlock> typeBlocks;
ImmutableArray<MetadataBlock> methodBlocks;
Guid moduleVersionId;
......@@ -421,7 +419,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, SymReaderFactory.CreateReader(pdbBytes));
runtime = CreateRuntimeInstance(fewerReferences, exeBytes, SymReaderFactory.CreateReader(pdbBytes));
GetContextState(runtime, "C.F", out methodBlocks, out moduleVersionId, out symReader, out methodToken, out localSignatureToken);
// Different references. No reuse.
......@@ -1085,15 +1083,13 @@ .locals init ([0] class C c)
ImmutableArray<byte> pdbBytes;
EmitILToArray(source, appendDefaultHeader: true, includePdb: true, assemblyBytes: out exeBytes, pdbBytes: out pdbBytes);
var moduleId = Guid.NewGuid();
var runtime = CreateRuntimeInstance(
assemblyName: moduleId.ToString("D"),
references: ImmutableArray.Create(MscorlibRef),
exeBytes: exeBytes.ToArray(),
references: new[] { MscorlibRef },
peImage: exeBytes,
symReader: SymReaderFactory.CreateReader(pdbBytes));
var context = CreateMethodContext(
runtime,
methodName: "C.M");
var context = CreateMethodContext(runtime, methodName: "C.M");
string error;
var testData = new CompilationTestData();
context.CompileExpression("c.F", out error, testData);
......@@ -1137,12 +1133,11 @@ .locals init ([0] class C modopt(int32) modopt(object) c)
ImmutableArray<byte> pdbBytes;
EmitILToArray(source, appendDefaultHeader: true, includePdb: true, assemblyBytes: out exeBytes, pdbBytes: out pdbBytes);
var moduleId = Guid.NewGuid();
var runtime = CreateRuntimeInstance(
assemblyName: moduleId.ToString("D"),
references: ImmutableArray.Create(MscorlibRef),
exeBytes: exeBytes.ToArray(),
references: new[] { MscorlibRef },
peImage: exeBytes,
symReader: SymReaderFactory.CreateReader(pdbBytes));
var context = CreateMethodContext(
runtime,
methodName: "C.M");
......@@ -1188,15 +1183,13 @@ .maxstack 2
ImmutableArray<byte> pdbBytes;
EmitILToArray(source, appendDefaultHeader: true, includePdb: true, assemblyBytes: out exeBytes, pdbBytes: out pdbBytes);
var moduleId = Guid.NewGuid();
var runtime = CreateRuntimeInstance(
assemblyName: moduleId.ToString("D"),
references: ImmutableArray.Create(MscorlibRef),
exeBytes: exeBytes.ToArray(),
references: new[] { MscorlibRef },
peImage: exeBytes,
symReader: SymReaderFactory.CreateReader(pdbBytes));
var context = CreateMethodContext(
runtime,
methodName: "C.M");
var context = CreateMethodContext(runtime, "C.M");
string error;
var testData = new CompilationTestData();
context.CompileExpression("s", out error, testData);
......@@ -3799,41 +3792,19 @@ static void M()
Assert.Equal(((ModuleMetadata)referenceN0.GetMetadata()).Name, ((ModuleMetadata)referenceN1.GetMetadata()).Name); // different netmodule, same name
byte[] exeBytes;
byte[] pdbBytes;
var testData0 = new CompilationTestData();
using (var pdbStream = new MemoryStream())
var references = new[]
{
using (var exeStream = new MemoryStream())
{
var result = compilation.Emit(
peStream: exeStream,
pdbStream: pdbStream,
xmlDocumentationStream: null,
win32Resources: null,
manifestResources: null,
options: EmitOptions.Default,
debugEntryPoint: null,
testData: testData0,
getHostDiagnostics: null,
cancellationToken: default(CancellationToken));
exeBytes = exeStream.ToArray();
pdbBytes = pdbStream.ToArray();
}
}
MscorlibRef,
referenceD0,
referenceN0, // From D0
referenceD1,
referenceN0, // From D1
referenceN1, // From D2
referenceN2, // From D2
};
var references = ImmutableArray.Create(
MscorlibRef,
referenceD0,
referenceN0, // From D0
referenceD1,
referenceN0, // From D1
referenceN1, // From D2
referenceN2); // From D2
var runtime = CreateRuntimeInstance(assemblyName, references, exeBytes, SymReaderFactory.CreateReader(pdbBytes));
var context = CreateMethodContext(
runtime,
methodName: "C.M");
var runtime = CreateRuntimeInstance(compilation, references);
var context = CreateMethodContext(runtime, "C.M");
// Expression references ambiguous modules.
ResultProperties resultProperties;
......@@ -4547,13 +4518,12 @@ public void DateTimeFieldConstant()
EmitILToArray(source, appendDefaultHeader: true, includePdb: true, assemblyBytes: out exeBytes, pdbBytes: out pdbBytes);
var runtime = CreateRuntimeInstance(
assemblyName: ExpressionCompilerUtilities.GenerateUniqueName(),
references: ImmutableArray.Create(MscorlibRef),
exeBytes: exeBytes.ToArray(),
references: new[] { MscorlibRef },
peImage: exeBytes,
symReader: SymReaderFactory.CreateReader(pdbBytes));
var context = CreateMethodContext(
runtime,
methodName: "C.M");
var context = CreateMethodContext(runtime, methodName: "C.M");
string error;
var testData = new CompilationTestData();
context.CompileExpression("D", out error, testData);
......@@ -4724,13 +4694,12 @@ public void StaticLambdaInDisplayClass()
EmitILToArray(source, appendDefaultHeader: true, includePdb: true, assemblyBytes: out exeBytes, pdbBytes: out pdbBytes);
var runtime = CreateRuntimeInstance(
assemblyName: ExpressionCompilerUtilities.GenerateUniqueName(),
references: ImmutableArray.Create(MscorlibRef),
exeBytes: exeBytes.ToArray(),
references: new[] { MscorlibRef },
peImage: exeBytes,
symReader: SymReaderFactory.CreateReader(pdbBytes));
var context = CreateMethodContext(
runtime,
methodName: "C.<>c__DisplayClass2.<Test>b__1");
var context = CreateMethodContext(runtime, methodName: "C.<>c__DisplayClass2.<Test>b__1");
string error;
var testData = new CompilationTestData();
context.CompileExpression("x", out error, testData);
......@@ -5177,10 +5146,9 @@ public void FieldLikeEvent_WinRT()
EmitILToArray(ilSource, appendDefaultHeader: true, includePdb: true, assemblyBytes: out ilBytes, pdbBytes: out ilPdbBytes);
var runtime = CreateRuntimeInstance(
assemblyName: GetUniqueName(),
references: ImmutableArray.Create(WinRtRefs),
exeBytes: ilBytes.ToArray(),
symReader: SymReaderFactory.CreateReader(ilPdbBytes.ToArray()));
references: WinRtRefs,
peImage: ilBytes,
symReader: SymReaderFactory.CreateReader(ilPdbBytes));
var context = CreateMethodContext(runtime, "C.M");
......@@ -5508,12 +5476,12 @@ static void M()
{
}
}";
var comp = CreateCompilationWithMscorlib(source, options: TestOptions.DebugDll, assemblyName: GetUniqueName());
byte[] exeBytes;
byte[] pdbBytes;
ImmutableArray<MetadataReference> references;
comp.EmitAndGetReferences(out exeBytes, out pdbBytes, out references);
var exeReference = AssemblyMetadata.CreateFromImage(exeBytes).GetReference(display: Guid.NewGuid().ToString("D"));
var comp = CreateCompilationWithMscorlib(source, options: TestOptions.DebugDll);
var pdbStream = new MemoryStream();
var peImage = comp.EmitToArray(EmitOptions.Default, pdbStream: pdbStream);
var pdbImage = pdbStream.ToImmutable();
var peReference = AssemblyMetadata.CreateFromImage(peImage).GetReference();
var modulesBuilder = ArrayBuilder<ModuleInstance>.GetInstance();
var corruptMetadata = new ModuleInstance(
......@@ -5526,8 +5494,8 @@ static void M()
includeLocalSignatures: false);
modulesBuilder.Add(corruptMetadata);
modulesBuilder.Add(exeReference.ToModuleInstance(exeBytes, SymReaderFactory.CreateReader(pdbBytes)));
modulesBuilder.AddRange(references.Select(r => r.ToModuleInstance(fullImage: null, symReader: null)));
modulesBuilder.Add(peReference.ToModuleInstance(peImage.ToArray(), SymReaderFactory.CreateReader(pdbImage)));
modulesBuilder.Add(MscorlibRef.ToModuleInstance(fullImage: null, symReader: null));
var modules = modulesBuilder.ToImmutableAndFree();
using (var runtime = new RuntimeInstance(modules))
......@@ -5573,12 +5541,7 @@ public void M(Missing parameter)
var libRef = CreateCompilationWithMscorlib(libSource, assemblyName: "Lib").EmitToImageReference();
var comp = CreateCompilationWithMscorlib(source, new[] { libRef }, TestOptions.DebugDll);
byte[] exeBytes;
byte[] pdbBytes;
ImmutableArray<MetadataReference> unusedReferences;
comp.EmitAndGetReferences(out exeBytes, out pdbBytes, out unusedReferences);
var runtime = CreateRuntimeInstance(GetUniqueName(), ImmutableArray.Create(MscorlibRef), exeBytes, SymReaderFactory.CreateReader(pdbBytes));
var runtime = CreateRuntimeInstance(comp, new[] { MscorlibRef });
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'.";
......@@ -5658,12 +5621,7 @@ public void Test()
// warning CS1701: Assuming assembly reference 'B, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ce65828c82a341f2' used by 'A' matches identity 'B, Version=2.0.0.0, Culture=neutral, PublicKeyToken=ce65828c82a341f2' of 'B', you may need to supply runtime policy
Diagnostic(ErrorCode.WRN_UnifyReferenceMajMin).WithArguments("B, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ce65828c82a341f2", "A", "B, Version=2.0.0.0, Culture=neutral, PublicKeyToken=ce65828c82a341f2", "B").WithLocation(1, 1));
byte[] exeBytes;
byte[] pdbBytes;
ImmutableArray<MetadataReference> unusedReferences;
comp.EmitAndGetReferences(out exeBytes, out pdbBytes, out unusedReferences);
var runtime = CreateRuntimeInstance(GetUniqueName(), ImmutableArray.Create(MscorlibRef, libAv1Ref, libBv2Ref), exeBytes, SymReaderFactory.CreateReader(pdbBytes));
var runtime = CreateRuntimeInstance(comp, new[] { MscorlibRef, libAv1Ref, libBv2Ref });
var context = CreateMethodContext(runtime, "Source.Test");
string error;
......@@ -5784,15 +5742,10 @@ public static void Main()
}
";
var comp = CreateCompilationWithMscorlib(source);
var peImage = comp.EmitToArray();
var symReader = new MockSymUnmanagedReader(ImmutableDictionary<int, MethodDebugInfoBytes>.Empty);
byte[] exeBytes;
byte[] unusedPdbBytes;
ImmutableArray<MetadataReference> references;
comp.EmitAndGetReferences(out exeBytes, out unusedPdbBytes, out references);
ISymUnmanagedReader symReader = new MockSymUnmanagedReader(ImmutableDictionary<int, MethodDebugInfoBytes>.Empty);
var runtime = CreateRuntimeInstance("assemblyName", references, exeBytes, symReader);
var runtime = CreateRuntimeInstance(new[] { MscorlibRef }, peImage, symReader);
var evalContext = CreateMethodContext(runtime, "C.Main");
string error;
var testData = new CompilationTestData();
......@@ -5821,14 +5774,10 @@ public static void Main()
}
";
var comp = CreateCompilationWithMscorlib(source);
byte[] exeBytes;
byte[] unusedPdbBytes;
ImmutableArray<MetadataReference> references;
comp.EmitAndGetReferences(out exeBytes, out unusedPdbBytes, out references);
var runtime = CreateRuntimeInstance("assemblyName", references, exeBytes, NotImplementedSymUnmanagedReader.Instance);
var peImage = comp.EmitToArray();
var runtime = CreateRuntimeInstance(new[] { MscorlibRef }, peImage, NotImplementedSymUnmanagedReader.Instance);
var evalContext = CreateMethodContext(runtime, "C.Main");
string error;
var testData = new CompilationTestData();
evalContext.CompileExpression("1", out error, testData);
......@@ -5971,9 +5920,8 @@ public static void M()
symReader.UpdateSymbolStore(pdbStream2);
var runtime = CreateRuntimeInstance(
GetUniqueName(),
ImmutableArray.Create(MscorlibRef, ExpressionCompilerTestHelpers.IntrinsicAssemblyReference),
peStream2.ToArray(),
new[] { MscorlibRef, ExpressionCompilerTestHelpers.IntrinsicAssemblyReference },
peStream2.ToImmutable(),
symReader);
ImmutableArray<MetadataBlock> blocks;
......
......@@ -634,9 +634,8 @@ class [mscorlib]System.Collections.Generic.IEnumerator`1<object>,
EmitILToArray(ilSource, appendDefaultHeader: true, includePdb: true, assemblyBytes: out ilBytes, pdbBytes: out ilPdbBytes);
var runtime = CreateRuntimeInstance(
assemblyName: GetUniqueName(),
references: ImmutableArray.Create(MscorlibRef),
exeBytes: ilBytes.ToArray(),
references: new[] { MscorlibRef },
peImage: ilBytes,
symReader: SymReaderFactory.CreateReader(ilPdbBytes));
var context = CreateMethodContext(runtime, "C.<I<System.Int32>.F>d__0.MoveNext");
......@@ -789,10 +788,9 @@ public void OldStyleNonCapturingLambda()
EmitILToArray(ilSource, appendDefaultHeader: true, includePdb: true, assemblyBytes: out ilBytes, pdbBytes: out ilPdbBytes);
var runtime = CreateRuntimeInstance(
assemblyName: GetUniqueName(),
references: ImmutableArray.Create(MscorlibRef),
exeBytes: ilBytes.ToArray(),
symReader: SymReaderFactory.CreateReader(ilPdbBytes.ToArray()));
references: new[] { MscorlibRef },
peImage: ilBytes,
symReader: SymReaderFactory.CreateReader(ilPdbBytes));
var context = CreateMethodContext(runtime, "C.<M>b__0");
VerifyNoThis(context);
......
......@@ -148,17 +148,9 @@ void M(int[] a)
}
}
}";
var compilation0 = CreateCompilationWithMscorlib(source, options: TestOptions.DebugDll);
byte[] exeBytes;
byte[] pdbBytes;
ImmutableArray<MetadataReference> references;
compilation0.EmitAndGetReferences(out exeBytes, out pdbBytes, out references);
var runtime = CreateRuntimeInstance(
ExpressionCompilerUtilities.GenerateUniqueName(),
references,
exeBytes,
SymReaderFactory.CreateReader(pdbBytes),
includeLocalSignatures: false);
var comp = CreateCompilationWithMscorlib(source, options: TestOptions.DebugDll);
var runtime = CreateRuntimeInstance(comp, includeLocalSignatures: false);
var context = CreateMethodContext(
runtime,
methodName: "C.M",
......@@ -556,12 +548,8 @@ static void Main()
}
}";
var compilation0 = CreateCompilationWithMscorlib(source, options: TestOptions.DebugExe);
byte[] exeBytes;
byte[] pdbBytes;
ImmutableArray<MetadataReference> references;
compilation0.EmitAndGetReferences(out exeBytes, out pdbBytes, out references);
var runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes, exeBytes));
var runtime = CreateRuntimeInstance(compilation0);
var context = CreateMethodContext(
runtime,
methodName: "C.M");
......@@ -617,15 +605,9 @@ static void Main()
}
}";
var compilation0 = CreateCompilationWithMscorlib(source, options: TestOptions.DebugExe);
byte[] exeBytes;
byte[] pdbBytes;
ImmutableArray<MetadataReference> references;
compilation0.EmitAndGetReferences(out exeBytes, out pdbBytes, out references);
var runtime = CreateRuntimeInstance(compilation0);
var context = CreateMethodContext(runtime, "C.M");
var runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes, exeBytes));
var context = CreateMethodContext(
runtime,
methodName: "C.M");
var testData = new CompilationTestData();
var locals = ArrayBuilder<LocalAndMethod>.GetInstance();
string typeName;
......@@ -1654,20 +1636,9 @@ static void M(A a, B b, C c)
options: TestOptions.DebugDll,
references: new[] { compilation0.EmitToImageReference() });
byte[] exeBytes;
byte[] pdbBytes;
ImmutableArray<MetadataReference> references;
compilation1.EmitAndGetReferences(out exeBytes, out pdbBytes, out references);
var runtime = CreateRuntimeInstance(
ExpressionCompilerUtilities.GenerateUniqueName(),
ImmutableArray.Create(MscorlibRef), // no reference to compilation0
exeBytes,
SymReaderFactory.CreateReader(pdbBytes));
var context = CreateMethodContext(
runtime,
methodName: "C.M");
// no reference to compilation0
var runtime = CreateRuntimeInstance(compilation1, new[] { MscorlibRef });
var context = CreateMethodContext(runtime, "C.M");
var testData = new CompilationTestData();
var locals = ArrayBuilder<LocalAndMethod>.GetInstance();
......@@ -1707,15 +1678,8 @@ public void MissingReference_2()
options: TestOptions.DebugDll,
references: new[] { compilation0.EmitToImageReference() });
byte[] exeBytes;
byte[] pdbBytes;
ImmutableArray<MetadataReference> references;
compilation1.EmitAndGetReferences(out exeBytes, out pdbBytes, out references);
var runtime = CreateRuntimeInstance(
ExpressionCompilerUtilities.GenerateUniqueName(),
ImmutableArray.Create(MscorlibRef), // no reference to compilation0
exeBytes,
SymReaderFactory.CreateReader(pdbBytes));
// no reference to compilation0
var runtime = CreateRuntimeInstance(compilation1, new[] { MscorlibRef });
var context = CreateMethodContext(
runtime,
......@@ -1808,15 +1772,8 @@ static void M()
}
";
var comp = CreateCompilationWithMscorlib(source, options: TestOptions.DebugDll);
byte[] exeBytes;
byte[] pdbBytes;
ImmutableArray<MetadataReference> references;
comp.EmitAndGetReferences(out exeBytes, out pdbBytes, out references);
var runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes, exeBytes));
var context = CreateMethodContext(
runtime,
methodName: "C.M");
var runtime = CreateRuntimeInstance(comp);
var context = CreateMethodContext(runtime, "C.M");
var testData = new CompilationTestData();
var locals = ArrayBuilder<LocalAndMethod>.GetInstance();
......@@ -1847,15 +1804,8 @@ static void M()
}
";
var comp = CreateCompilationWithMscorlib(source, options: TestOptions.DebugDll);
byte[] exeBytes;
byte[] pdbBytes;
ImmutableArray<MetadataReference> references;
comp.EmitAndGetReferences(out exeBytes, out pdbBytes, out references);
var runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes, exeBytes));
var context = CreateMethodContext(
runtime,
methodName: "C.M");
var runtime = CreateRuntimeInstance(comp);
var context = CreateMethodContext(runtime, "C.M");
var testData = new CompilationTestData();
......@@ -1889,15 +1839,8 @@ static void M()
}
";
var comp = CreateCompilationWithMscorlib(source, options: TestOptions.DebugDll);
byte[] exeBytes;
byte[] pdbBytes;
ImmutableArray<MetadataReference> references;
comp.EmitAndGetReferences(out exeBytes, out pdbBytes, out references);
var runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes, exeBytes));
var context = CreateMethodContext(
runtime,
methodName: "C.M");
var runtime = CreateRuntimeInstance(comp);
var context = CreateMethodContext(runtime, methodName: "C.M");
string errorMessage;
var testData = new CompilationTestData();
......@@ -2669,12 +2612,9 @@ void M()
var libRef = CreateCompilationWithMscorlib(libSource).EmitToImageReference();
var comp = CreateCompilationWithMscorlib(source, new[] { SystemRef }, TestOptions.DebugDll);
byte[] exeBytes;
byte[] pdbBytes;
ImmutableArray<MetadataReference> unusedReferences;
comp.EmitAndGetReferences(out exeBytes, out pdbBytes, out unusedReferences);
var runtime = CreateRuntimeInstance(GetUniqueName(), ImmutableArray.Create(MscorlibRef, SystemRef, SystemCoreRef, SystemXmlLinqRef, libRef), exeBytes, SymReaderFactory.CreateReader(pdbBytes));
var runtime = CreateRuntimeInstance(
comp,
new[] { MscorlibRef, SystemRef, SystemCoreRef, SystemXmlLinqRef, libRef });
string typeName;
var locals = ArrayBuilder<LocalAndMethod>.GetInstance();
......
......@@ -82,7 +82,9 @@ public void M(Missing parameter)
";
var libRef = CreateCompilationWithMscorlib(libSource, assemblyName: "Lib").EmitToImageReference();
var comp = CreateCompilationWithMscorlib(source, new[] { libRef }, TestOptions.DebugDll);
var context = CreateMethodContextWithReferences(comp, "C.M", MscorlibRef);
var runtime = CreateRuntimeInstance(comp, new[] { MscorlibRef });
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'.";
var expectedMissingAssemblyIdentity = new AssemblyIdentity("Lib");
......@@ -117,7 +119,9 @@ public void M(int[] array)
}
";
var comp = CreateCompilationWithMscorlib(source, new[] { SystemCoreRef }, TestOptions.DebugDll);
var context = CreateMethodContextWithReferences(comp, "C.M", MscorlibRef);
var runtime = CreateRuntimeInstance(comp, new[] { MscorlibRef });
var context = CreateMethodContext(runtime, "C.M");
var expectedError = "error CS1935: Could not find an implementation of the query pattern for source type 'int[]'. 'Select' not found. Are you missing a reference to 'System.Core.dll' or a using directive for 'System.Linq'?";
var expectedMissingAssemblyIdentity = EvaluationContextBase.SystemCoreIdentity;
......@@ -155,7 +159,8 @@ public void M(int[] array)
}
";
var comp = CreateCompilationWithMscorlib(source, new[] { SystemCoreRef }, TestOptions.DebugDll);
var context = CreateMethodContextWithReferences(comp, "C.M", MscorlibRef);
var runtime = CreateRuntimeInstance(comp, new[] { MscorlibRef });
var context = CreateMethodContext(runtime, "C.M");
var expectedErrorTemplate = "error CS1061: 'int[]' does not contain a definition for '{0}' and no extension method '{0}' accepting a first argument of type 'int[]' could be found (are you missing a using directive or an assembly reference?)";
var expectedMissingAssemblyIdentity = EvaluationContextBase.SystemCoreIdentity;
......@@ -218,7 +223,8 @@ public class Dummy
}
";
var comp = CreateCompilationWithMscorlib(source, options: TestOptions.DebugDll);
var context = CreateMethodContextWithReferences(comp, "C.M", MscorlibRef);
var runtime = CreateRuntimeInstance(comp, new[] { MscorlibRef });
var context = CreateMethodContext(runtime, "C.M");
var expectedErrorTemplate = "error CS1061: 'int[]' does not contain a definition for '{0}' and no extension method '{0}' accepting a first argument of type 'int[]' could be found (are you missing a using directive or an assembly reference?)";
var expectedMissingAssemblyIdentity = EvaluationContextBase.SystemCoreIdentity;
......@@ -476,7 +482,8 @@ static void M()
}
";
var comp = CreateCompilationWithMscorlib(source, options: TestOptions.DebugDll);
var context = CreateMethodContextWithReferences(comp, "C.M", CSharpRef, ExpressionCompilerTestHelpers.IntrinsicAssemblyReference);
var runtime = CreateRuntimeInstance(comp, new[] { CSharpRef });
var context = CreateMethodContext(runtime, "C.M");
const string expectedError = "error CS0012: The type 'Exception' is defined in an assembly that is not referenced. You must add a reference to assembly 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.";
var expectedMissingAssemblyIdentity = comp.Assembly.CorLibrary.Identity;
......@@ -512,7 +519,9 @@ static void M(Windows.Storage.StorageFolder f)
var comp = CreateCompilationWithMscorlib(source, WinRtRefs, TestOptions.DebugDll);
var runtimeAssemblies = ExpressionCompilerTestHelpers.GetRuntimeWinMds("Windows.Storage");
Assert.True(runtimeAssemblies.Any());
var context = CreateMethodContextWithReferences(comp, "C.M", ImmutableArray.Create(MscorlibRef).Concat(runtimeAssemblies));
var runtime = CreateRuntimeInstance(comp, new[] { MscorlibRef }.Concat(runtimeAssemblies));
var context = CreateMethodContext(runtime, "C.M");
const string expectedError = "error CS0234: The type or namespace name 'UI' does not exist in the namespace 'Windows' (are you missing an assembly reference?)";
var expectedMissingAssemblyIdentity = new AssemblyIdentity("Windows.UI", contentType: System.Reflection.AssemblyContentType.WindowsRuntime);
......@@ -551,7 +560,9 @@ static void M(Windows.UI.Colors c)
var comp = CreateCompilationWithMscorlib(source, WinRtRefs, TestOptions.DebugDll);
var runtimeAssemblies = ExpressionCompilerTestHelpers.GetRuntimeWinMds("Windows.UI");
Assert.True(runtimeAssemblies.Any());
var context = CreateMethodContextWithReferences(comp, "C.M", ImmutableArray.Create(MscorlibRef).Concat(runtimeAssemblies));
var runtime = CreateRuntimeInstance(comp, new[] { MscorlibRef }.Concat(runtimeAssemblies));
var context = CreateMethodContext(runtime, "C.M");
const string expectedError = "error CS0234: The type or namespace name 'Xaml' does not exist in the namespace 'Windows.UI' (are you missing an assembly reference?)";
var expectedMissingAssemblyIdentity = new AssemblyIdentity("Windows.UI.Xaml", contentType: System.Reflection.AssemblyContentType.WindowsRuntime);
......@@ -678,15 +689,14 @@ class UseLinq
bool b = Enumerable.Any<int>(null);
}";
var compilation = CreateCompilationWithMscorlibAndSystemCore(source);
byte[] exeBytes, pdbBytes;
ImmutableArray<MetadataReference> references;
compilation.EmitAndGetReferences(out exeBytes, out pdbBytes, out references);
var systemCore = SystemCoreRef.ToModuleInstance(fullImage: null, symReader: null);
var referencesWithoutSystemCore = references.Where(r => r != SystemCoreRef).ToImmutableArray();
var runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), referencesWithoutSystemCore.AddIntrinsicAssembly(), exeBytes, symReader: null);
var compilation = CreateCompilation(source, new[] { MscorlibRef, SystemCoreRef });
var runtime = CreateRuntimeInstance(compilation, new[] { MscorlibRef });
var context = CreateMethodContext(runtime, "C.M");
var fakeSystemLinq = CreateCompilationWithMscorlib45("", assemblyName: "System.Linq").EmitToImageReference().ToModuleInstance(fullImage: null, symReader: null);
var systemCore = SystemCoreRef.ToModuleInstance(fullImage: null, symReader: null);
var fakeSystemLinq = CreateCompilationWithMscorlib45("", assemblyName: "System.Linq").
EmitToImageReference().ToModuleInstance(fullImage: null, symReader: null);
string errorMessage;
CompilationTestData testData;
......@@ -737,22 +747,6 @@ public override CustomTypeInfo GetCustomTypeInfo()
}
}
private EvaluationContext CreateMethodContextWithReferences(Compilation comp, string methodName, params MetadataReference[] references)
{
return CreateMethodContextWithReferences(comp, methodName, ImmutableArray.CreateRange(references));
}
private EvaluationContext CreateMethodContextWithReferences(Compilation comp, string methodName, ImmutableArray<MetadataReference> references)
{
byte[] exeBytes;
byte[] pdbBytes;
ImmutableArray<MetadataReference> unusedReferences;
comp.EmitAndGetReferences(out exeBytes, out pdbBytes, out unusedReferences);
var runtime = CreateRuntimeInstance(GetUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes));
return CreateMethodContext(runtime, methodName);
}
private static AssemblyIdentity GetMissingAssemblyIdentity(ErrorCode code, params object[] arguments)
{
var missingAssemblyIdentities = EvaluationContext.GetMissingAssemblyIdentitiesHelper(code, arguments, EvaluationContextBase.SystemCoreIdentity);
......
......@@ -2,6 +2,7 @@
using System;
using System.Collections.Immutable;
using System.Linq;
using Microsoft.CodeAnalysis.CodeGen;
using Microsoft.CodeAnalysis.CSharp.Test.Utilities;
using Microsoft.CodeAnalysis.ExpressionEvaluator;
......@@ -83,23 +84,10 @@ static void M()
}";
var compilationPIA = CreateCompilationWithMscorlib(sourcePIA, options: TestOptions.DebugDll);
var referencePIA = compilationPIA.EmitToImageReference(embedInteropTypes: true);
var compilation0 = CreateCompilationWithMscorlib(
source,
options: TestOptions.DebugDll,
assemblyName: Guid.NewGuid().ToString("D"),
references: new MetadataReference[] { referencePIA });
byte[] exeBytes;
byte[] pdbBytes;
ImmutableArray<MetadataReference> references;
compilation0.EmitAndGetReferences(out exeBytes, out pdbBytes, out references);
// References should not include PIA.
Assert.Equal(references.Length, 1);
Assert.True(references[0].Display.StartsWith("mscorlib", StringComparison.Ordinal));
var runtime = CreateRuntimeInstance(
Guid.NewGuid().ToString("D"),
references,
exeBytes,
SymReaderFactory.CreateReader(pdbBytes));
var compilation0 = CreateCompilationWithMscorlib(source, new[] { referencePIA }, TestOptions.DebugDll);
var runtime = CreateRuntimeInstance(compilation0);
var context = CreateMethodContext(runtime, "C.M");
string error;
var testData = new CompilationTestData();
......@@ -149,8 +137,8 @@ static void Main()
}
}";
var compilationPIA = CreateCompilationWithMscorlib(sourcePIA, options: TestOptions.DebugDll);
byte[] exePIA;
byte[] pdbPIA;
ImmutableArray<byte> exePIA;
ImmutableArray<byte> pdbPIA;
ImmutableArray<MetadataReference> referencesPIA;
compilationPIA.EmitAndGetReferences(out exePIA, out pdbPIA, out referencesPIA);
var metadataPIA = AssemblyMetadata.CreateFromImage(exePIA);
......@@ -162,8 +150,8 @@ static void Main()
options: TestOptions.DebugDll,
assemblyName: ExpressionCompilerUtilities.GenerateUniqueName(),
references: new MetadataReference[] { metadataPIA.GetReference(embedInteropTypes: true) });
byte[] exeA;
byte[] pdbA;
ImmutableArray<byte> exeA;
ImmutableArray<byte> pdbA;
ImmutableArray<MetadataReference> referencesA;
compilationA.EmitAndGetReferences(out exeA, out pdbA, out referencesA);
var metadataA = AssemblyMetadata.CreateFromImage(exeA);
......@@ -175,8 +163,8 @@ static void Main()
options: TestOptions.DebugExe,
assemblyName: Guid.NewGuid().ToString("D"),
references: new MetadataReference[] { metadataA.GetReference(), metadataPIA.GetReference() });
byte[] exeB;
byte[] pdbB;
ImmutableArray<byte> exeB;
ImmutableArray<byte> pdbB;
ImmutableArray<MetadataReference> referencesB;
compilationB.EmitAndGetReferences(out exeB, out pdbB, out referencesB);
var metadataB = AssemblyMetadata.CreateFromImage(exeB);
......@@ -185,9 +173,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: SymReaderFactory.CreateReader(pdbA)));
modulesBuilder.Add(referenceA.ToModuleInstance(fullImage: exeA.ToArray(), symReader: SymReaderFactory.CreateReader(pdbA)));
modulesBuilder.Add(referencePIA.ToModuleInstance(fullImage: null, symReader: null));
modulesBuilder.Add(referenceB.ToModuleInstance(fullImage: exeB, symReader: SymReaderFactory.CreateReader(pdbB)));
modulesBuilder.Add(referenceB.ToModuleInstance(fullImage: exeB.ToArray(), symReader: SymReaderFactory.CreateReader(pdbB)));
using (var runtime = new RuntimeInstance(modulesBuilder.ToImmutableAndFree()))
{
......
......@@ -2,6 +2,7 @@
using System;
using System.Collections.Immutable;
using System.Linq;
using Microsoft.CodeAnalysis.CodeGen;
using Microsoft.CodeAnalysis.CSharp.Symbols;
using Microsoft.CodeAnalysis.CSharp.Test.Utilities;
......@@ -918,39 +919,33 @@ static void M()
var o = new A<object>();
}
}";
var assemblyNameA = "397300B0-A";
const string assemblyNameA = "397300B0-A";
const string assemblyNameB = "397300B0-B";
var publicKeyA = ImmutableArray.CreateRange(new byte[] { 0x00, 0x24, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x52, 0x53, 0x41, 0x31, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0xED, 0xD3, 0x22, 0xCB, 0x6B, 0xF8, 0xD4, 0xA2, 0xFC, 0xCC, 0x87, 0x37, 0x04, 0x06, 0x04, 0xCE, 0xE7, 0xB2, 0xA6, 0xF8, 0x4A, 0xEE, 0xF3, 0x19, 0xDF, 0x5B, 0x95, 0xE3, 0x7A, 0x6A, 0x28, 0x24, 0xA4, 0x0A, 0x83, 0x83, 0xBD, 0xBA, 0xF2, 0xF2, 0x52, 0x20, 0xE9, 0xAA, 0x3B, 0xD1, 0xDD, 0xE4, 0x9A, 0x9A, 0x9C, 0xC0, 0x30, 0x8F, 0x01, 0x40, 0x06, 0xE0, 0x2B, 0x95, 0x62, 0x89, 0x2A, 0x34, 0x75, 0x22, 0x68, 0x64, 0x6E, 0x7C, 0x2E, 0x83, 0x50, 0x5A, 0xCE, 0x7B, 0x0B, 0xE8, 0xF8, 0x71, 0xE6, 0xF7, 0x73, 0x8E, 0xEB, 0x84, 0xD2, 0x73, 0x5D, 0x9D, 0xBE, 0x5E, 0xF5, 0x90, 0xF9, 0xAB, 0x0A, 0x10, 0x7E, 0x23, 0x48, 0xF4, 0xAD, 0x70, 0x2E, 0xF7, 0xD4, 0x51, 0xD5, 0x8B, 0x3A, 0xF7, 0xCA, 0x90, 0x4C, 0xDC, 0x80, 0x19, 0x26, 0x65, 0xC9, 0x37, 0xBD, 0x52, 0x81, 0xF1, 0x8B, 0xCD });
var compilationA1 = CreateCompilation(
new AssemblyIdentity(assemblyNameA, new Version(1, 1, 1, 1), cultureName: "", publicKeyOrToken: publicKeyA, hasPublicKey: true),
new[] { sourceA },
references: new[] { MscorlibRef_v20 },
options: TestOptions.DebugDll.WithDelaySign(true));
var referenceA1 = compilationA1.EmitToImageReference();
var assemblyNameB = "397300B0-B";
var compilationB1 = CreateCompilation(
new AssemblyIdentity(assemblyNameB, new Version(1, 2, 2, 2)),
new[] { sourceB },
references: new[] { MscorlibRef_v20, referenceA1 },
references: new[] { MscorlibRef_v20, compilationA1.EmitToImageReference() },
options: TestOptions.DebugDll);
// Use mscorlib v4.0.0.0 and A v2.1.2.1 at runtime.
byte[] exeBytes;
byte[] pdbBytes;
ImmutableArray<MetadataReference> references;
compilationB1.EmitAndGetReferences(out exeBytes, out pdbBytes, out references);
var compilationA2 = CreateCompilation(
new AssemblyIdentity(assemblyNameA, new Version(2, 1, 2, 1), cultureName: "", publicKeyOrToken: publicKeyA, hasPublicKey: true),
new[] { sourceA },
references: new[] { MscorlibRef_v20 },
options: TestOptions.DebugDll.WithDelaySign(true));
var referenceA2 = compilationA2.EmitToImageReference();
var runtime = CreateRuntimeInstance(
assemblyNameB,
ImmutableArray.Create(MscorlibRef, referenceA2).AddIntrinsicAssembly(),
exeBytes,
SymReaderFactory.CreateReader(pdbBytes));
//// typeof(Exception), typeof(A<B<object>>), typeof(B<A<object>[]>)
var runtime = CreateRuntimeInstance(compilationB1, new[] { MscorlibRef, compilationA2.EmitToImageReference() });
// typeof(Exception), typeof(A<B<object>>), typeof(B<A<object>[]>)
var context = CreateMethodContext(
runtime,
"C.M");
......@@ -1028,8 +1023,8 @@ static void Main()
}";
var assemblyNameA = "0A93FF0B-31A2-47C8-B24D-16A2D77AB5C5";
var compilationA = CreateCompilationWithMscorlib(sourceA, options: TestOptions.DebugDll, assemblyName: assemblyNameA);
byte[] exeA;
byte[] pdbA;
ImmutableArray<byte> exeA;
ImmutableArray<byte> pdbA;
ImmutableArray<MetadataReference> referencesA;
compilationA.EmitAndGetReferences(out exeA, out pdbA, out referencesA);
var metadataA = AssemblyMetadata.CreateFromImage(exeA);
......@@ -1037,8 +1032,8 @@ static void Main()
var assemblyNameB = "9BAC6622-86EB-4EC5-94A1-9A1E6D0C24B9";
var compilationB = CreateCompilationWithMscorlib(sourceB, options: TestOptions.DebugExe, references: new[] { referenceA }, assemblyName: assemblyNameB);
byte[] exeB;
byte[] pdbB;
ImmutableArray<byte> exeB;
ImmutableArray<byte> pdbB;
ImmutableArray<MetadataReference> referencesB;
compilationB.EmitAndGetReferences(out exeB, out pdbB, out referencesB);
var metadataB = AssemblyMetadata.CreateFromImage(exeB);
......@@ -1046,8 +1041,8 @@ static void Main()
var modulesBuilder = ArrayBuilder<ModuleInstance>.GetInstance();
modulesBuilder.Add(MscorlibRef.ToModuleInstance(fullImage: null, symReader: null));
modulesBuilder.Add(referenceA.ToModuleInstance(fullImage: exeA, symReader: SymReaderFactory.CreateReader(pdbA)));
modulesBuilder.Add(referenceB.ToModuleInstance(fullImage: exeB, symReader: SymReaderFactory.CreateReader(pdbB)));
modulesBuilder.Add(referenceA.ToModuleInstance(fullImage: exeA.ToArray(), symReader: SymReaderFactory.CreateReader(pdbA)));
modulesBuilder.Add(referenceB.ToModuleInstance(fullImage: exeB.ToArray(), symReader: SymReaderFactory.CreateReader(pdbB)));
modulesBuilder.Add(ExpressionCompilerTestHelpers.IntrinsicAssemblyReference.ToModuleInstance(fullImage: null, symReader: null));
using (var runtime = new RuntimeInstance(modulesBuilder.ToImmutableAndFree()))
......
......@@ -115,10 +115,10 @@ public void AccessType()
EmitILToArray(ilSource, appendDefaultHeader: true, includePdb: true, assemblyBytes: out exeBytes, pdbBytes: out pdbBytes);
var runtime = CreateRuntimeInstance(
assemblyName: GetUniqueName(),
references: ImmutableArray.Create(MscorlibRef),
exeBytes: exeBytes.ToArray(),
references: new[] { MscorlibRef },
peImage: exeBytes,
symReader: SymReaderFactory.CreateReader(pdbBytes));
var context = CreateMethodContext(runtime, methodName: "C.Test");
Assert.Equal(DkmEvaluationResultAccessType.Private, GetResultProperties(context, "Private").AccessType);
......
......@@ -14,6 +14,7 @@
using Microsoft.CodeAnalysis.CSharp.UnitTests;
using Microsoft.CodeAnalysis.ExpressionEvaluator;
using Microsoft.CodeAnalysis.ExpressionEvaluator.UnitTests;
using Microsoft.CodeAnalysis.Test.Utilities;
using Microsoft.DiaSymReader;
using Roslyn.Test.PdbUtilities;
using Roslyn.Test.Utilities;
......@@ -330,20 +331,16 @@ public static void Main()
}
";
var comp = CreateCompilationWithMscorlib(source);
byte[] exeBytes;
byte[] unusedPdbBytes;
ImmutableArray<MetadataReference> references;
comp.EmitAndGetReferences(out exeBytes, out unusedPdbBytes, out references);
var peImage = comp.EmitToArray();
var symReader = ExpressionCompilerTestHelpers.ConstructSymReaderWithImports(
exeBytes,
peImage,
"Main",
"USystem", // Valid.
"UACultureInfo TSystem.Globalization.CultureInfo, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", // Invalid - skipped.
"ASI USystem.IO"); // Valid.
var runtime = CreateRuntimeInstance("assemblyName", references, exeBytes, symReader);
var runtime = CreateRuntimeInstance(new[] { MscorlibRef }, peImage, symReader);
var evalContext = CreateMethodContext(runtime, "C.Main");
var compContext = evalContext.CreateCompilationContext(SyntaxFactory.LiteralExpression(SyntaxKind.NullLiteralExpression)); // Used to throw.
var imports = compContext.NamespaceBinder.ImportChain.Single();
......@@ -365,20 +362,16 @@ public static void Main()
}
";
var comp = CreateCompilationWithMscorlib(source);
byte[] exeBytes;
byte[] unusedPdbBytes;
ImmutableArray<MetadataReference> references;
comp.EmitAndGetReferences(out exeBytes, out unusedPdbBytes, out references);
var peImage = comp.EmitToArray();
var symReader = ExpressionCompilerTestHelpers.ConstructSymReaderWithImports(
exeBytes,
peImage,
"Main",
"USystem", // Valid.
"AMy.Alias TSystem.Globalization.CultureInfo, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", // Invalid - skipped.
"ASI USystem.IO"); // Valid.
var runtime = CreateRuntimeInstance("assemblyName", references, exeBytes, symReader);
var runtime = CreateRuntimeInstance(new[] { MscorlibRef }, peImage, symReader);
var evalContext = CreateMethodContext(runtime, "C.Main");
var compContext = evalContext.CreateCompilationContext(SyntaxFactory.LiteralExpression(SyntaxKind.NullLiteralExpression)); // Used to throw.
var imports = compContext.NamespaceBinder.ImportChain.Single();
......@@ -400,14 +393,10 @@ public static void Main()
}
";
var comp = CreateCompilationWithMscorlib(source);
byte[] exeBytes;
byte[] unusedPdbBytes;
ImmutableArray<MetadataReference> references;
comp.EmitAndGetReferences(out exeBytes, out unusedPdbBytes, out references);
var peImage = comp.EmitToArray();
ISymUnmanagedReader symReader;
using (var peReader = new PEReader(ImmutableArray.Create(exeBytes)))
using (var peReader = new PEReader(peImage))
{
var metadataReader = peReader.GetMetadataReader();
var methodHandle = metadataReader.MethodDefinitions.Single(h => metadataReader.StringComparer.Equals(metadataReader.GetMethodDefinition(h).Name, "Main"));
......@@ -419,7 +408,7 @@ public static void Main()
}.ToImmutableDictionary());
}
var runtime = CreateRuntimeInstance("assemblyName", references, exeBytes, symReader);
var runtime = CreateRuntimeInstance(new[] { MscorlibRef }, peImage, symReader);
var evalContext = CreateMethodContext(runtime, "C.Main");
var compContext = evalContext.CreateCompilationContext(SyntaxFactory.LiteralExpression(SyntaxKind.NullLiteralExpression));
var imports = compContext.NamespaceBinder.ImportChain.Single();
......@@ -444,14 +433,10 @@ public static void Main()
}
";
var comp = CreateCompilationWithMscorlib(source);
byte[] exeBytes;
byte[] unusedPdbBytes;
ImmutableArray<MetadataReference> references;
comp.EmitAndGetReferences(out exeBytes, out unusedPdbBytes, out references);
var peImage = comp.EmitToArray();
ISymUnmanagedReader symReader;
using (var peReader = new PEReader(ImmutableArray.Create(exeBytes)))
using (var peReader = new PEReader(peImage))
{
var metadataReader = peReader.GetMetadataReader();
var methodHandle = metadataReader.MethodDefinitions.Single(h => metadataReader.StringComparer.Equals(metadataReader.GetMethodDefinition(h).Name, "Main"));
......@@ -463,7 +448,7 @@ public static void Main()
}.ToImmutableDictionary());
}
var runtime = CreateRuntimeInstance("assemblyName", references, exeBytes, symReader);
var runtime = CreateRuntimeInstance(new[] { MscorlibRef }, peImage, symReader);
var evalContext = CreateMethodContext(runtime, "N.C.Main");
var compContext = evalContext.CreateCompilationContext(SyntaxFactory.LiteralExpression(SyntaxKind.NullLiteralExpression));
var imports = compContext.NamespaceBinder.ImportChain.Single();
......@@ -488,14 +473,10 @@ public static void Main()
}
";
var comp = CreateCompilationWithMscorlib(source);
byte[] exeBytes;
byte[] unusedPdbBytes;
ImmutableArray<MetadataReference> references;
comp.EmitAndGetReferences(out exeBytes, out unusedPdbBytes, out references);
var peImage = comp.EmitToArray();
ISymUnmanagedReader symReader;
using (var peReader = new PEReader(ImmutableArray.Create(exeBytes)))
using (var peReader = new PEReader(peImage))
{
var metadataReader = peReader.GetMetadataReader();
var methodHandle = metadataReader.MethodDefinitions.Single(h => metadataReader.StringComparer.Equals(metadataReader.GetMethodDefinition(h).Name, "Main"));
......@@ -507,7 +488,7 @@ public static void Main()
}.ToImmutableDictionary());
}
var runtime = CreateRuntimeInstance("assemblyName", references, exeBytes, symReader);
var runtime = CreateRuntimeInstance(new[] { MscorlibRef }, peImage, symReader);
var evalContext = CreateMethodContext(runtime, "N.C.Main");
var compContext = evalContext.CreateCompilationContext(SyntaxFactory.LiteralExpression(SyntaxKind.NullLiteralExpression));
var imports = compContext.NamespaceBinder.ImportChain.Single();
......@@ -1071,20 +1052,20 @@ public class C2 : C1
ImmutableArray<MetadataReference> unused;
var comp1 = CreateCompilation(source1, new[] { MscorlibRef_v20 }, TestOptions.DebugDll, assemblyName: "A");
byte[] dllBytes1;
byte[] pdbBytes1;
ImmutableArray<byte> dllBytes1;
ImmutableArray<byte> pdbBytes1;
comp1.EmitAndGetReferences(out dllBytes1, out pdbBytes1, out unused);
var ref1 = AssemblyMetadata.CreateFromImage(dllBytes1).GetReference(display: "A");
var comp2 = CreateCompilation(source2, new[] { MscorlibRef_v4_0_30316_17626, ref1 }, TestOptions.DebugDll, assemblyName: "B");
byte[] dllBytes2;
byte[] pdbBytes2;
ImmutableArray<byte> dllBytes2;
ImmutableArray<byte> pdbBytes2;
comp2.EmitAndGetReferences(out dllBytes2, out pdbBytes2, out unused);
var ref2 = AssemblyMetadata.CreateFromImage(dllBytes2).GetReference(display: "B");
var modulesBuilder = ArrayBuilder<ModuleInstance>.GetInstance();
modulesBuilder.Add(ref1.ToModuleInstance(dllBytes1, SymReaderFactory.CreateReader(pdbBytes1)));
modulesBuilder.Add(ref2.ToModuleInstance(dllBytes2, SymReaderFactory.CreateReader(pdbBytes2)));
modulesBuilder.Add(ref1.ToModuleInstance(dllBytes1.ToArray(), SymReaderFactory.CreateReader(pdbBytes1)));
modulesBuilder.Add(ref2.ToModuleInstance(dllBytes2.ToArray(), SymReaderFactory.CreateReader(pdbBytes2)));
modulesBuilder.Add(MscorlibRef_v4_0_30316_17626.ToModuleInstance(fullImage: null, symReader: null));
modulesBuilder.Add(ExpressionCompilerTestHelpers.IntrinsicAssemblyReference.ToModuleInstance(fullImage: null, symReader: null));
......
......@@ -42,17 +42,13 @@ static void M(Windows.Storage.StorageFolder f, Windows.Foundation.Collections.Pr
options: TestOptions.DebugDll,
assemblyName: ExpressionCompilerUtilities.GenerateUniqueName(),
references: WinRtRefs);
var runtimeAssemblies = ExpressionCompilerTestHelpers.GetRuntimeWinMds("Windows.Storage", "Windows.Foundation.Collections");
Assert.True(runtimeAssemblies.Length >= 2);
byte[] exeBytes;
byte[] pdbBytes;
ImmutableArray<MetadataReference> references;
compilation0.EmitAndGetReferences(out exeBytes, out pdbBytes, out references);
var runtime = CreateRuntimeInstance(
ExpressionCompilerUtilities.GenerateUniqueName(),
ImmutableArray.Create(MscorlibRef).Concat(runtimeAssemblies), // no reference to Windows.winmd
exeBytes,
SymReaderFactory.CreateReader(pdbBytes));
// no reference to Windows.winmd
var runtime = CreateRuntimeInstance(compilation0, new[] { MscorlibRef }.Concat(runtimeAssemblies));
var context = CreateMethodContext(runtime, "C.M");
string error;
var testData = new CompilationTestData();
......@@ -87,17 +83,13 @@ static void M(X::Windows.Storage.StorageFolder f)
options: TestOptions.DebugDll,
assemblyName: ExpressionCompilerUtilities.GenerateUniqueName(),
references: WinRtRefs.Select(r => r.Display == "Windows" ? r.WithAliases(new[] { "X" }) : r));
var runtimeAssemblies = ExpressionCompilerTestHelpers.GetRuntimeWinMds("Windows.Storage");
Assert.True(runtimeAssemblies.Length >= 1);
byte[] exeBytes;
byte[] pdbBytes;
ImmutableArray<MetadataReference> references;
compilation0.EmitAndGetReferences(out exeBytes, out pdbBytes, out references);
var runtime = CreateRuntimeInstance(
ExpressionCompilerUtilities.GenerateUniqueName(),
ImmutableArray.Create(MscorlibRef).Concat(runtimeAssemblies), // no reference to Windows.winmd
exeBytes,
SymReaderFactory.CreateReader(pdbBytes));
// no reference to Windows.winmd
var runtime = CreateRuntimeInstance(compilation0, new[] { MscorlibRef }.Concat(runtimeAssemblies));
var context = CreateMethodContext(runtime, "C.M");
string error;
var testData = new CompilationTestData();
......@@ -179,7 +171,8 @@ static void M(LibraryA.A a, LibraryB.B b, Windows.Data.Text.TextSegment t, Windo
{
}
}";
var runtime = CreateRuntime(source, compileReferences, runtimeReferences);
var compilation0 = CreateCompilationWithMscorlib(source, compileReferences, TestOptions.DebugDll);
var runtime = CreateRuntimeInstance(compilation0, runtimeReferences);
var context = CreateMethodContext(runtime, "C.M");
string error;
var testData = new CompilationTestData();
......@@ -255,16 +248,17 @@ static void M(Windows.Storage.StorageFolder f, Windows.Foundation.Collections.Pr
{
}
}";
var runtime = CreateRuntime(
source,
ImmutableArray.CreateRange(WinRtRefs),
var compilation = CreateCompilationWithMscorlib(source, ImmutableArray.CreateRange(WinRtRefs), TestOptions.DebugDll);
var runtime = CreateRuntimeInstance(
compilation,
ImmutableArray.Create(MscorlibRef).Concat(ExpressionCompilerTestHelpers.GetRuntimeWinMds("Windows.Storage", "Windows.Foundation.Collections")));
var context = CreateMethodContext(
runtime,
"C.M");
var context = CreateMethodContext(runtime, "C.M");
var aliases = ImmutableArray.Create(
VariableAlias("s", "Windows.Storage.StorageFolder, Windows.Storage, Version=255.255.255.255, Culture=neutral, PublicKeyToken=null, ContentType=WindowsRuntime"),
VariableAlias("d", "Windows.Foundation.DateTime, Windows.Foundation, Version=255.255.255.255, Culture=neutral, PublicKeyToken=null, ContentType=WindowsRuntime"));
string error;
var testData = new CompilationTestData();
context.CompileExpression(
......@@ -305,10 +299,11 @@ static void M(Windows.UI.Xaml.FrameworkElement f)
{
}
}";
var runtime = CreateRuntime(
source,
ImmutableArray.CreateRange(WinRtRefs),
var compilation = CreateCompilationWithMscorlib(source, ImmutableArray.CreateRange(WinRtRefs), TestOptions.DebugDll);
var runtime = CreateRuntimeInstance(
compilation,
ImmutableArray.Create(MscorlibRef).Concat(ExpressionCompilerTestHelpers.GetRuntimeWinMds("Windows.Foundation", "Windows.UI", "Windows.UI.Xaml")));
var context = CreateMethodContext(runtime, "C.M");
string error;
ResultProperties resultProperties;
......@@ -339,9 +334,11 @@ static void M(C c)
{
}
}";
var runtime = CreateRuntime(source,
ImmutableArray.Create(WinRtRefs),
var compilation = CreateCompilationWithMscorlib(source, ImmutableArray.CreateRange(WinRtRefs), TestOptions.DebugDll);
var runtime = CreateRuntimeInstance(
compilation,
ImmutableArray.Create(MscorlibRef).Concat(ExpressionCompilerTestHelpers.GetRuntimeWinMds("Windows.UI", "Windows.UI.Xaml")));
string errorMessage;
var testData = new CompilationTestData();
ExpressionCompilerTestHelpers.CompileExpressionWithRetry(
......@@ -371,27 +368,6 @@ .maxstack 1
}");
}
private RuntimeInstance CreateRuntime(
string source,
ImmutableArray<MetadataReference> compileReferences,
ImmutableArray<MetadataReference> runtimeReferences)
{
var compilation0 = CreateCompilationWithMscorlib(
source,
options: TestOptions.DebugDll,
assemblyName: ExpressionCompilerUtilities.GenerateUniqueName(),
references: compileReferences);
byte[] exeBytes;
byte[] pdbBytes;
ImmutableArray<MetadataReference> references;
compilation0.EmitAndGetReferences(out exeBytes, out pdbBytes, out references);
return CreateRuntimeInstance(
ExpressionCompilerUtilities.GenerateUniqueName(),
runtimeReferences.AddIntrinsicAssembly(),
exeBytes,
SymReaderFactory.CreateReader(pdbBytes));
}
private static byte[] ToVersion1_3(byte[] bytes)
{
return ExpressionCompilerTestHelpers.ToVersion1_3(bytes);
......
......@@ -398,16 +398,14 @@ internal static ImmutableArray<string> GetLocalNames(this ISymUnmanagedReader sy
internal static void EmitAndGetReferences(
this Compilation compilation,
out byte[] exeBytes,
out byte[] pdbBytes,
out ImmutableArray<byte> exeBytes,
out ImmutableArray<byte> pdbBytes,
out ImmutableArray<MetadataReference> references)
{
var pdbStream = new MemoryStream();
var peImage = compilation.EmitToArray(EmitOptions.Default, pdbStream: pdbStream);
exeBytes = peImage.ToArray();
pdbBytes = pdbStream.ToArray();
references = GetEmittedReferences(compilation, peImage);
exeBytes = compilation.EmitToArray(EmitOptions.Default, pdbStream: pdbStream);
pdbBytes = pdbStream.ToImmutable();
references = GetEmittedReferences(compilation, exeBytes);
}
internal static ImmutableArray<MetadataReference> GetEmittedReferences(this Compilation compilation, ImmutableArray<byte> peImage)
......@@ -568,9 +566,9 @@ internal static Guid GetModuleVersionId(this MetadataReference reference)
Assert.Equal(((Cci.IMethodDefinition)methodData.Method).CallingConvention, expectedGeneric ? Cci.CallingConvention.Generic : Cci.CallingConvention.Default);
}
internal static ISymUnmanagedReader ConstructSymReaderWithImports(byte[] exeBytes, string methodName, params string[] importStrings)
internal static ISymUnmanagedReader ConstructSymReaderWithImports(ImmutableArray<byte> peImage, string methodName, params string[] importStrings)
{
using (var peReader = new PEReader(ImmutableArray.Create(exeBytes)))
using (var peReader = new PEReader(peImage))
{
var metadataReader = peReader.GetMetadataReader();
var methodHandle = metadataReader.MethodDefinitions.Single(h => metadataReader.StringComparer.Equals(metadataReader.GetMethodDefinition(h).Name, methodName));
......
......@@ -10,6 +10,7 @@
using Microsoft.CodeAnalysis.Test.Utilities;
using System.IO;
using System.Reflection.PortableExecutable;
using System.Collections.Generic;
namespace Microsoft.CodeAnalysis.ExpressionEvaluator.UnitTests
{
......@@ -30,21 +31,32 @@ void IDisposable.Dispose()
}
}
internal static RuntimeInstance Create(Compilation compilation, DebugInformationFormat debugFormat = 0)
internal static RuntimeInstance Create(
Compilation compilation,
IEnumerable<MetadataReference> references = null,
DebugInformationFormat debugFormat = 0,
bool includeLocalSignatures = true)
{
var pdbStream = (debugFormat != 0) ? new MemoryStream() : null;
var peImage = compilation.EmitToArray(new EmitOptions(debugInformationFormat: debugFormat), pdbStream: pdbStream);
var symReader = (debugFormat != 0) ? SymReaderFactory.CreateReader(pdbStream, new PEReader(peImage)) : null;
var references = compilation.GetEmittedReferences(peImage).AddIntrinsicAssembly();
return Create(compilation.AssemblyName, references, peImage, symReader);
if (references == null)
{
references = compilation.GetEmittedReferences(peImage);
}
references = references.Concat(new[] { ExpressionCompilerTestHelpers.IntrinsicAssemblyReference });
return Create(references, peImage, symReader, compilation.AssemblyName, includeLocalSignatures);
}
internal static RuntimeInstance Create(
string assemblyName,
ImmutableArray<MetadataReference> references,
IEnumerable<MetadataReference> references,
ImmutableArray<byte> peImage,
ISymUnmanagedReader symReaderOpt,
string assemblyName = null,
bool includeLocalSignatures = true)
{
var exeReference = AssemblyMetadata.CreateFromImage(peImage).GetReference(display: assemblyName);
......
......@@ -47,21 +47,23 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.ExpressionEvaluator.UnitTests
Friend Function CreateRuntimeInstance(
compilation As Compilation,
Optional debugFormat As DebugInformationFormat = DebugInformationFormat.Pdb) As RuntimeInstance
Optional references As IEnumerable(Of MetadataReference) = Nothing,
Optional debugFormat As DebugInformationFormat = DebugInformationFormat.Pdb,
Optional includeLocalSignatures As Boolean = True) As RuntimeInstance
Dim instance = RuntimeInstance.Create(compilation, debugFormat)
Dim instance = RuntimeInstance.Create(compilation, references, debugFormat, includeLocalSignatures)
_runtimeInstances.Add(instance)
Return instance
End Function
Friend Function CreateRuntimeInstance(
assemblyName As String,
references As ImmutableArray(Of MetadataReference),
exeBytes As Byte(),
references As IEnumerable(Of MetadataReference),
exeBytes As ImmutableArray(Of Byte),
symReader As ISymUnmanagedReader,
Optional assemblyName As String = Nothing,
Optional includeLocalSignatures As Boolean = True) As RuntimeInstance
Dim instance = RuntimeInstance.Create(assemblyName, references, exeBytes.ToImmutableArray(), symReader, includeLocalSignatures)
Dim instance = RuntimeInstance.Create(references, exeBytes, symReader, assemblyName, includeLocalSignatures)
_runtimeInstances.Add(instance)
Return instance
End Function
......@@ -190,7 +192,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.ExpressionEvaluator.UnitTests
{MscorlibRef_v4_0_30316_17626, SystemRef, MsvbRef},
options:=If(outputKind = OutputKind.DynamicallyLinkedLibrary, TestOptions.DebugDll, TestOptions.DebugExe))
Dim runtime = CreateRuntimeInstance(compilation0, If(includeSymbols, DebugInformationFormat.Pdb, Nothing))
Dim runtime = CreateRuntimeInstance(compilation0, debugFormat:=If(includeSymbols, DebugInformationFormat.Pdb, Nothing))
Dim context = CreateMethodContext(runtime, methodName, atLineNumber)
Dim testData = New CompilationTestData()
Dim missingAssemblyIdentities As ImmutableArray(Of AssemblyIdentity) = Nothing
......
......@@ -255,8 +255,8 @@ End Class"
Dim compA = CreateCompilationWithMscorlib({sourceA}, options:=TestOptions.DebugDll)
Dim referenceA = compA.EmitToImageReference()
Dim compB = CreateCompilationWithMscorlib({sourceB}, options:=TestOptions.DebugDll, references:={referenceA})
Dim exeBytes As Byte() = Nothing
Dim pdbBytes As Byte() = Nothing
Dim exeBytes As ImmutableArray(Of Byte) = Nothing
Dim pdbBytes As ImmutableArray(Of Byte) = Nothing
Dim references As ImmutableArray(Of MetadataReference) = Nothing
compB.EmitAndGetReferences(exeBytes, pdbBytes, references)
Const methodVersion = 1
......@@ -264,7 +264,7 @@ End Class"
Dim previous As VisualBasicMetadataContext = Nothing
Dim startOffset = 0
Dim endOffset = 0
Dim runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes))
Dim runtime = CreateRuntimeInstance(references, exeBytes, SymReaderFactory.CreateReader(pdbBytes))
Dim typeBlocks As ImmutableArray(Of MetadataBlock) = Nothing
Dim methodBlocks As ImmutableArray(Of MetadataBlock) = Nothing
Dim moduleVersionId As Guid = Nothing
......@@ -326,7 +326,7 @@ End Class"
' With different references.
Dim fewerReferences = references.Remove(referenceA)
Assert.Equal(fewerReferences.Length, references.Length - 1)
runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), fewerReferences, exeBytes, SymReaderFactory.CreateReader(pdbBytes))
runtime = CreateRuntimeInstance(fewerReferences, exeBytes, SymReaderFactory.CreateReader(pdbBytes), ExpressionCompilerUtilities.GenerateUniqueName())
methodBlocks = Nothing
moduleVersionId = Nothing
symReader = Nothing
......@@ -1089,10 +1089,9 @@ End Class
EmitILToArray(il, appendDefaultHeader:=True, includePdb:=True, assemblyBytes:=exeBytes, pdbBytes:=pdbBytes)
Dim runtime = CreateRuntimeInstance(
assemblyName:=ExpressionCompilerUtilities.GenerateUniqueName(),
references:=ImmutableArray.Create(MscorlibRef),
exeBytes:=exeBytes.ToArray(),
symReader:=SymReaderFactory.CreateReader(pdbBytes))
references:={MscorlibRef},
exeBytes:=exeBytes,
symReader:=SymReaderFactory.CreateReader(pdbBytes))
Dim context = CreateMethodContext(runtime, methodName:="C.M")
Dim errorMessage As String = Nothing
......@@ -1142,10 +1141,9 @@ End Class
EmitILToArray(il, appendDefaultHeader:=True, includePdb:=True, assemblyBytes:=exeBytes, pdbBytes:=pdbBytes)
Dim runtime = CreateRuntimeInstance(
assemblyName:=ExpressionCompilerUtilities.GenerateUniqueName(),
references:=ImmutableArray.Create(MscorlibRef),
exeBytes:=exeBytes.ToArray(),
symReader:=SymReaderFactory.CreateReader(pdbBytes))
references:={MscorlibRef},
exeBytes:=exeBytes,
symReader:=SymReaderFactory.CreateReader(pdbBytes))
Dim context = CreateMethodContext(runtime, methodName:="C.M")
Dim errorMessage As String = Nothing
......@@ -1194,10 +1192,9 @@ End Class
EmitILToArray(il, appendDefaultHeader:=True, includePdb:=True, assemblyBytes:=exeBytes, pdbBytes:=pdbBytes)
Dim runtime = CreateRuntimeInstance(
assemblyName:=ExpressionCompilerUtilities.GenerateUniqueName(),
references:=ImmutableArray.Create(MscorlibRef),
exeBytes:=exeBytes.ToArray(),
symReader:=SymReaderFactory.CreateReader(pdbBytes))
references:={MscorlibRef},
exeBytes:=exeBytes,
symReader:=SymReaderFactory.CreateReader(pdbBytes))
Dim context = CreateMethodContext(runtime, methodName:="C.M")
Dim errorMessage As String = Nothing
......@@ -1743,15 +1740,8 @@ End Class"
MakeSources(source),
options:=TestOptions.DebugDll,
references:=allReferences)
Dim exeBytes As Byte() = Nothing
Dim pdbBytes As Byte() = Nothing
Dim references As ImmutableArray(Of MetadataReference) = Nothing
comp.EmitAndGetReferences(exeBytes, pdbBytes, references)
Dim runtime = CreateRuntimeInstance(
ExpressionCompilerUtilities.GenerateUniqueName(),
allReferences,
exeBytes,
Nothing)
Dim runtime = CreateRuntimeInstance(comp, allReferences)
Dim context = CreateMethodContext(runtime, "C.M")
Dim errorMessage As String = Nothing
Dim testData = New CompilationTestData()
......@@ -1761,7 +1751,7 @@ End Class"
"{
// Code size 22 (0x16)
.maxstack 3
.locals init (String V_0)
.locals init (String V_0) //y
IL_0000: ldarg.0
IL_0001: ldstr ""a""
IL_0006: ldstr """"
......@@ -1785,15 +1775,8 @@ End Class"
MakeSources(source),
options:=TestOptions.DebugDll.WithRootNamespace("Root"),
references:=allReferences)
Dim exeBytes As Byte() = Nothing
Dim pdbBytes As Byte() = Nothing
Dim references As ImmutableArray(Of MetadataReference) = Nothing
comp.EmitAndGetReferences(exeBytes, pdbBytes, references)
Dim runtime = CreateRuntimeInstance(
ExpressionCompilerUtilities.GenerateUniqueName(),
allReferences,
exeBytes,
SymReaderFactory.CreateReader(pdbBytes)) ' Need SymReader to find root namespace.
Dim runtime = CreateRuntimeInstance(comp, allReferences)
Dim context = CreateMethodContext(runtime, "Root.C.M")
Dim errorMessage As String = Nothing
Dim testData = New CompilationTestData()
......@@ -1834,16 +1817,9 @@ End Class"
Dim compReferences = xmlReferences.Concat(ImmutableArray.Create(ref1, ref2))
Dim comp = CreateCompilationWithReferences(tree, compReferences, TestOptions.DebugDll, assemblyName:="Test")
Dim exeBytes As Byte() = Nothing
Dim pdbBytes As Byte() = Nothing
Dim references As ImmutableArray(Of MetadataReference) = Nothing
comp.EmitAndGetReferences(exeBytes, pdbBytes, references)
Dim runtime = CreateRuntimeInstance(
ExpressionCompilerUtilities.GenerateUniqueName(),
compReferences,
exeBytes,
Nothing)
Dim runtime = CreateRuntimeInstance(comp, compReferences)
Dim context = CreateMethodContext(runtime, "C1.M") ' In Module1
Dim errorMessage As String = Nothing
Dim testData = New CompilationTestData()
Dim result = context.CompileExpression("x.@a", errorMessage, testData, DebuggerDiagnosticFormatter.Instance)
......@@ -3093,9 +3069,8 @@ End Class
EmitILToArray(source, appendDefaultHeader:=True, includePdb:=True, assemblyBytes:=exeBytes, pdbBytes:=pdbBytes)
Dim runtime = CreateRuntimeInstance(
assemblyName:=ExpressionCompilerUtilities.GenerateUniqueName(),
references:=ImmutableArray.Create(MscorlibRef),
exeBytes:=exeBytes.ToArray(),
references:={MscorlibRef},
exeBytes:=exeBytes,
symReader:=SymReaderFactory.CreateReader(pdbBytes))
Dim context = CreateMethodContext(
......@@ -3304,15 +3279,8 @@ End Class"
MakeSources(source),
options:=TestOptions.DebugDll,
references:=allReferences)
Dim exeBytes As Byte() = Nothing
Dim pdbBytes As Byte() = Nothing
Dim references As ImmutableArray(Of MetadataReference) = Nothing
comp.EmitAndGetReferences(exeBytes, pdbBytes, references)
Dim runtime = CreateRuntimeInstance(
ExpressionCompilerUtilities.GenerateUniqueName(),
allReferences,
exeBytes,
Nothing)
Dim runtime = CreateRuntimeInstance(comp, allReferences)
Dim context = CreateMethodContext(runtime, "C.M")
Dim errorMessage As String = Nothing
......@@ -3324,7 +3292,7 @@ End Class"
"{
// Code size 25 (0x19)
.maxstack 1
.locals init (String V_0,
.locals init (String V_0, //dummy
Integer? V_1)
IL_0000: ldarg.0
IL_0001: brtrue.s IL_000d
......@@ -3352,7 +3320,7 @@ End Class"
"{
// Code size 32 (0x20)
.maxstack 3
.locals init (String V_0)
.locals init (String V_0) //dummy
IL_0000: ldarg.0
IL_0001: brtrue.s IL_0005
IL_0003: ldnull
......@@ -3384,7 +3352,7 @@ End Class"
"{
// Code size 17 (0x11)
.maxstack 2
.locals init (String V_0)
.locals init (String V_0) //dummy
IL_0000: ldarg.0
IL_0001: callvirt ""Function C.G() As C""
IL_0006: dup
......@@ -3667,8 +3635,8 @@ Class C
End Sub
End Class"
Dim comp = CreateCompilationWithMscorlib({source}, options:=TestOptions.DebugDll, assemblyName:=GetUniqueName())
Dim exeBytes() As Byte = Nothing
Dim pdbBytes() As Byte = Nothing
Dim exeBytes As ImmutableArray(Of Byte) = Nothing
Dim pdbBytes As ImmutableArray(Of Byte) = Nothing
Dim references As ImmutableArray(Of MetadataReference) = Nothing
comp.EmitAndGetReferences(exeBytes, pdbBytes, references)
Dim exeReference = AssemblyMetadata.CreateFromImage(exeBytes).GetReference(display:=Guid.NewGuid().ToString("D"))
......@@ -3684,7 +3652,7 @@ End Class"
includeLocalSignatures:=False)
modulesBuilder.Add(corruptMetadata)
modulesBuilder.Add(exeReference.ToModuleInstance(exeBytes, SymReaderFactory.CreateReader(pdbBytes)))
modulesBuilder.Add(exeReference.ToModuleInstance(exeBytes.ToArray(), SymReaderFactory.CreateReader(pdbBytes)))
modulesBuilder.AddRange(references.Select(Function(r) r.ToModuleInstance(fullImage:=Nothing, symReader:=Nothing)))
Dim modules = modulesBuilder.ToImmutableAndFree()
......@@ -3728,12 +3696,7 @@ End Class
Dim libRef = CreateCompilationWithMscorlib({libSource}, assemblyName:="Lib", options:=TestOptions.DebugDll).EmitToImageReference()
Dim comp = CreateCompilationWithReferences({VisualBasicSyntaxTree.ParseText(source)}, {MscorlibRef, libRef}, TestOptions.DebugDll)
Dim exeBytes As Byte() = Nothing
Dim pdbBytes As Byte() = Nothing
Dim unusedReferences As ImmutableArray(Of MetadataReference) = Nothing
comp.EmitAndGetReferences(exeBytes, pdbBytes, unusedReferences)
Dim runtime = CreateRuntimeInstance(GetUniqueName(), ImmutableArray.Create(MscorlibRef), exeBytes, SymReaderFactory.CreateReader(pdbBytes))
Dim runtime = CreateRuntimeInstance(comp, {MscorlibRef})
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."
......@@ -3858,15 +3821,10 @@ End Class
"
Dim comp = CreateCompilationWithMscorlib({source})
Dim exeBytes As Byte() = Nothing
Dim unusedPdbBytes As Byte() = Nothing
Dim references As ImmutableArray(Of MetadataReference) = Nothing
comp.EmitAndGetReferences(exeBytes, unusedPdbBytes, references)
Dim exeBytes = comp.EmitToArray()
Dim symReader As ISymUnmanagedReader = New MockSymUnmanagedReader(ImmutableDictionary(Of Integer, MethodDebugInfoBytes).Empty)
Dim runtime = CreateRuntimeInstance("assemblyName", references, exeBytes, symReader)
Dim runtime = CreateRuntimeInstance({MscorlibRef}, exeBytes, symReader)
Dim evalContext = CreateMethodContext(runtime, "C.Main")
Dim errorMessage As String = Nothing
Dim testData As New CompilationTestData()
......@@ -3893,13 +3851,9 @@ End Class
"
Dim comp = CreateCompilationWithMscorlib({source})
Dim exeBytes = comp.EmitToArray()
Dim exeBytes As Byte() = Nothing
Dim unusedPdbBytes As Byte() = Nothing
Dim references As ImmutableArray(Of MetadataReference) = Nothing
comp.EmitAndGetReferences(exeBytes, unusedPdbBytes, references)
Dim runtime = CreateRuntimeInstance("assemblyName", references, exeBytes, NotImplementedSymUnmanagedReader.Instance)
Dim runtime = CreateRuntimeInstance({MscorlibRef}, exeBytes, NotImplementedSymUnmanagedReader.Instance)
Dim evalContext = CreateMethodContext(runtime, "C.Main")
Dim errorMessage As String = Nothing
Dim testData As New CompilationTestData()
......@@ -4118,9 +4072,8 @@ End Class
symReader.UpdateSymbolStore(pdbStream2)
Dim runtime = CreateRuntimeInstance(
GetUniqueName(),
ImmutableArray.Create(MscorlibRef, ExpressionCompilerTestHelpers.IntrinsicAssemblyReference),
peStream2.ToArray(),
{MscorlibRef, ExpressionCompilerTestHelpers.IntrinsicAssemblyReference},
peStream2.ToImmutable(),
symReader)
Dim blocks As ImmutableArray(Of MetadataBlock) = Nothing
......
......@@ -487,10 +487,9 @@ End Module
EmitILToArray(ilSource, appendDefaultHeader:=True, includePdb:=True, assemblyBytes:=ilBytes, pdbBytes:=ilPdbBytes)
Dim runtime = CreateRuntimeInstance(
assemblyName:=GetUniqueName(),
references:=ImmutableArray.Create(MscorlibRef),
exeBytes:=ilBytes.ToArray(),
symReader:=SymReaderFactory.CreateReader(ilPdbBytes.ToArray()))
references:={MscorlibRef},
exeBytes:=ilBytes,
symReader:=SymReaderFactory.CreateReader(ilPdbBytes))
Dim context = CreateMethodContext(runtime, "C._Lambda$__1")
VerifyNoMe(context)
......
......@@ -8,6 +8,7 @@ Imports System.Reflection.Metadata.Ecma335
Imports System.Runtime.InteropServices
Imports Microsoft.CodeAnalysis.CodeGen
Imports Microsoft.CodeAnalysis.ExpressionEvaluator.UnitTests
Imports Microsoft.CodeAnalysis.Test.Utilities
Imports Microsoft.CodeAnalysis.VisualBasic.Symbols
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
Imports Microsoft.CodeAnalysis.VisualBasic.UnitTests
......@@ -192,11 +193,7 @@ End Class
"
Dim comp = CreateCompilationWithMscorlib({source})
Dim exeBytes As Byte() = Nothing
Dim unusedPdbBytes As Byte() = Nothing
Dim references As ImmutableArray(Of MetadataReference) = Nothing
comp.EmitAndGetReferences(exeBytes, unusedPdbBytes, references)
Dim exeBytes = comp.EmitToArray()
Dim symReader = ExpressionCompilerTestHelpers.ConstructSymReaderWithImports(
exeBytes,
......@@ -205,7 +202,7 @@ End Class
"@FA:O=1", ' Invalid
"@FA:SC=System.Collections") ' Valid
Dim runtime = CreateRuntimeInstance("assemblyName", references, exeBytes, symReader)
Dim runtime = CreateRuntimeInstance({MscorlibRef}, exeBytes, symReader)
Dim evalContext = CreateMethodContext(runtime, "C.Main")
Dim compContext = evalContext.CreateCompilationContext(SyntaxHelpers.ParseDebuggerExpression("Nothing", consumeFullText:=True)) ' Used to throw.
......@@ -231,11 +228,7 @@ End Class
"
Dim comp = CreateCompilationWithMscorlib({source})
Dim exeBytes As Byte() = Nothing
Dim unusedPdbBypes As Byte() = Nothing
Dim references As ImmutableArray(Of MetadataReference) = Nothing
comp.EmitAndGetReferences(exeBytes, unusedPdbBypes, references)
Dim exeBytes = comp.EmitToArray()
Dim symReader = ExpressionCompilerTestHelpers.ConstructSymReaderWithImports(
exeBytes,
......@@ -244,7 +237,7 @@ End Class
"@FA:S.I=System.IO", ' Invalid
"@FA:SC=System.Collections") ' Valid
Dim runtime = CreateRuntimeInstance("assemblyName", references, exeBytes, symReader)
Dim runtime = CreateRuntimeInstance({MscorlibRef}, exeBytes, symReader)
Dim evalContext = CreateMethodContext(runtime, "C.Main")
Dim compContext = evalContext.CreateCompilationContext(SyntaxHelpers.ParseDebuggerExpression("Nothing", consumeFullText:=True)) ' Used to throw.
......@@ -484,20 +477,20 @@ End Class
"
Dim comp1 = CreateCompilationWithReferences(VisualBasicSyntaxTree.ParseText(source1), {MscorlibRef_v20}, TestOptions.DebugDll, assemblyName:="A")
Dim dllBytes1 As Byte() = Nothing
Dim pdbBytes1 As Byte() = Nothing
Dim dllBytes1 As ImmutableArray(Of Byte) = Nothing
Dim pdbBytes1 As ImmutableArray(Of Byte) = Nothing
comp1.EmitAndGetReferences(dllBytes1, pdbBytes1, Nothing)
Dim ref1 = AssemblyMetadata.CreateFromImage(dllBytes1).GetReference(display:="A")
Dim comp2 = CreateCompilationWithReferences(VisualBasicSyntaxTree.ParseText(source2), {MscorlibRef_v4_0_30316_17626, ref1}, TestOptions.DebugDll, assemblyName:="B")
Dim dllBytes2 As Byte() = Nothing
Dim pdbBytes2 As Byte() = Nothing
Dim dllBytes2 As ImmutableArray(Of Byte) = Nothing
Dim pdbBytes2 As ImmutableArray(Of Byte) = Nothing
comp2.EmitAndGetReferences(dllBytes2, pdbBytes2, Nothing)
Dim ref2 = AssemblyMetadata.CreateFromImage(dllBytes2).GetReference(display:="B")
Dim modulesBuilder = ArrayBuilder(Of ModuleInstance).GetInstance()
modulesBuilder.Add(ref1.ToModuleInstance(dllBytes1, SymReaderFactory.CreateReader(pdbBytes1)))
modulesBuilder.Add(ref2.ToModuleInstance(dllBytes2, SymReaderFactory.CreateReader(pdbBytes2)))
modulesBuilder.Add(ref1.ToModuleInstance(dllBytes1.ToArray(), SymReaderFactory.CreateReader(pdbBytes1)))
modulesBuilder.Add(ref2.ToModuleInstance(dllBytes2.ToArray(), SymReaderFactory.CreateReader(pdbBytes2)))
modulesBuilder.Add(MscorlibRef_v4_0_30316_17626.ToModuleInstance(fullImage:=Nothing, symReader:=Nothing))
modulesBuilder.Add(ExpressionCompilerTestHelpers.IntrinsicAssemblyReference.ToModuleInstance(fullImage:=Nothing, symReader:=Nothing))
......
......@@ -244,15 +244,13 @@ End Class"
End Sub
End Class"
Dim comp = CreateCompilationWithMscorlib({source}, options:=TestOptions.DebugDll)
Dim exeBytes As Byte() = Nothing
Dim pdbBytes As Byte() = Nothing
Dim references As ImmutableArray(Of MetadataReference) = Nothing
comp.EmitAndGetReferences(exeBytes, pdbBytes, references)
Dim runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes), includeLocalSignatures:=False)
Dim runtime = CreateRuntimeInstance(comp, includeLocalSignatures:=False)
Dim context = CreateMethodContext(
runtime,
methodName:="C.M",
atLineNumber:=999)
Dim testData = New CompilationTestData()
Dim locals = ArrayBuilder(Of LocalAndMethod).GetInstance()
Dim typeName As String = Nothing
......@@ -558,14 +556,9 @@ Class C
End Sub
End Class"
Dim comp = CreateCompilationWithMscorlib({source}, options:=TestOptions.DebugExe)
Dim exeBytes As Byte() = Nothing
Dim pdbBytes As Byte() = Nothing
Dim references As ImmutableArray(Of MetadataReference) = Nothing
comp.EmitAndGetReferences(exeBytes, pdbBytes, references)
Dim runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes, exeBytes))
Dim context = CreateMethodContext(
runtime,
methodName:="C.M")
Dim runtime = CreateRuntimeInstance(comp)
Dim context = CreateMethodContext(runtime, "C.M")
Dim testData = New CompilationTestData()
Dim locals = ArrayBuilder(Of LocalAndMethod).GetInstance()
Dim typeName As String = Nothing
......@@ -614,14 +607,10 @@ Class P
End Sub
End Class"
Dim comp = CreateCompilationWithMscorlib({source}, options:=TestOptions.DebugExe)
Dim exeBytes As Byte() = Nothing
Dim pdbBytes As Byte() = Nothing
Dim references As ImmutableArray(Of MetadataReference) = Nothing
comp.EmitAndGetReferences(exeBytes, pdbBytes, references)
Dim runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes, exeBytes))
Dim context = CreateMethodContext(
runtime,
methodName:="C.M")
Dim runtime = CreateRuntimeInstance(comp)
Dim context = CreateMethodContext(runtime, "C.M")
Dim testData = New CompilationTestData()
Dim locals = ArrayBuilder(Of LocalAndMethod).GetInstance()
Dim typeName As String = Nothing
......@@ -1695,19 +1684,10 @@ End Structure"
End Class"
Dim comp0 = CreateCompilationWithMscorlib({source0}, options:=TestOptions.DebugDll)
Dim comp1 = CreateCompilationWithMscorlib({source1}, options:=TestOptions.DebugDll, references:={comp0.EmitToImageReference()})
Dim exeBytes As Byte() = Nothing
Dim pdbBytes As Byte() = Nothing
Dim references As ImmutableArray(Of MetadataReference) = Nothing
comp1.EmitAndGetReferences(exeBytes, pdbBytes, references)
Dim runtime = CreateRuntimeInstance(
ExpressionCompilerUtilities.GenerateUniqueName(),
ImmutableArray.Create(MscorlibRef), ' no reference to compilation0
exeBytes,
SymReaderFactory.CreateReader(pdbBytes))
Dim context = CreateMethodContext(
runtime,
methodName:="C.M")
' no reference to compilation0
Dim runtime = CreateRuntimeInstance(comp1, {MscorlibRef})
Dim context = CreateMethodContext(runtime, "C.M")
Dim testData = New CompilationTestData()
Dim locals = ArrayBuilder(Of LocalAndMethod).GetInstance()
......@@ -1772,15 +1752,9 @@ Class C
End Class
"
Dim comp = CreateCompilationWithMscorlib({source}, options:=TestOptions.DebugDll)
Dim exeBytes As Byte() = Nothing
Dim pdbBytes As Byte() = Nothing
Dim references As ImmutableArray(Of MetadataReference) = Nothing
comp.EmitAndGetReferences(exeBytes, pdbBytes, references)
Dim runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes, exeBytes))
Dim context = CreateMethodContext(
runtime,
methodName:="C.M")
Dim runtime = CreateRuntimeInstance(comp)
Dim context = CreateMethodContext(runtime, "C.M")
Dim errorMessage As String = Nothing
context.CompileAssignment("d", "Nothing", errorMessage, formatter:=DebuggerDiagnosticFormatter.Instance)
......@@ -1821,15 +1795,8 @@ Class C
End Class
"
Dim comp = CreateCompilationWithMscorlib({source}, options:=TestOptions.DebugDll)
Dim exeBytes As Byte() = Nothing
Dim pdbBytes As Byte() = Nothing
Dim references As ImmutableArray(Of MetadataReference) = Nothing
comp.EmitAndGetReferences(exeBytes, pdbBytes, references)
Dim runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes, exeBytes))
Dim context = CreateMethodContext(
runtime,
methodName:="C.M")
Dim runtime = CreateRuntimeInstance(comp)
Dim context = CreateMethodContext(runtime, "C.M")
Dim errorMessage As String = Nothing
context.CompileAssignment("d", "Nothing", errorMessage, formatter:=DebuggerDiagnosticFormatter.Instance)
......@@ -2645,15 +2612,9 @@ End Class
Dim libRef = CreateCompilationWithMscorlib({libSource}, options:=TestOptions.DebugDll).EmitToImageReference()
Dim comp = CreateCompilationWithReferences({VisualBasicSyntaxTree.ParseText(source)}, {MscorlibRef, SystemRef}, TestOptions.DebugDll)
Dim exeBytes As Byte() = Nothing
Dim pdbBytes As Byte() = Nothing
Dim unusedReferences As ImmutableArray(Of MetadataReference) = Nothing
comp.EmitAndGetReferences(exeBytes, pdbBytes, unusedReferences)
' 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, SymReaderFactory.CreateReader(pdbBytes))
Dim runtime = CreateRuntimeInstance(comp, {MscorlibRef, SystemRef, SystemCoreRef, SystemXmlLinqRef, libRef})
Dim typeName As String = Nothing
Dim locals = ArrayBuilder(Of LocalAndMethod).GetInstance()
......
......@@ -87,7 +87,8 @@ End Class
"
Dim libRef = CreateCompilationWithMscorlib({libSource}, {}, TestOptions.DebugDll, assemblyName:="Lib").EmitToImageReference()
Dim comp = CreateCompilationWithMscorlib({source}, {libRef}, TestOptions.DebugDll)
Dim context = CreateMethodContextWithReferences(comp, "C.M", MscorlibRef)
Dim runtime = CreateRuntimeInstance(comp, {MscorlibRef})
Dim context = CreateMethodContext(runtime, "C.M")
Const expectedError = "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."
Dim expectedMissingAssemblyIdentity = New AssemblyIdentity("Lib")
......@@ -177,8 +178,8 @@ Public Class C
End Class
"
Dim comp = CreateCompilationWithMscorlib({source}, {SystemRef, SystemCoreRef, SystemXmlRef, SystemXmlLinqRef}, TestOptions.DebugDll)
comp.AssertNoErrors()
Dim context = CreateMethodContextWithReferences(comp, "C.M", MscorlibRef)
Dim runtime = CreateRuntimeInstance(comp, {MscorlibRef})
Dim context = CreateMethodContext(runtime, "C.M")
Const expectedError = "error BC31190: XML literals and XML axis properties are not available. Add references to System.Xml, System.Xml.Linq, and System.Core or other assemblies declaring System.Linq.Enumerable, System.Xml.Linq.XElement, System.Xml.Linq.XName, System.Xml.Linq.XAttribute and System.Xml.Linq.XNamespace types."
......@@ -213,7 +214,8 @@ Public Class C
End Class
"
Dim comp = CreateCompilationWithMscorlib({source}, options:=TestOptions.DebugDll)
Dim context = CreateMethodContextWithReferences(comp, "C.M", MscorlibRef)
Dim runtime = CreateRuntimeInstance(comp, {MscorlibRef})
Dim context = CreateMethodContext(runtime, "C.M")
Const expectedError = "error BC35000: Requested operation is not available because the runtime library function 'Microsoft.VisualBasic.CompilerServices.Operators.CompareObjectEqual' is not defined."
Dim expectedMissingAssemblyIdentity = EvaluationContextBase.MicrosoftVisualBasicIdentity
......@@ -247,9 +249,13 @@ End Class
"
Dim comp = CreateCompilationWithReferences({VisualBasicSyntaxTree.ParseText(source)}, {MscorlibRef}.Concat(WinRtRefs), TestOptions.DebugDll)
Dim runtimeAssemblies = ExpressionCompilerTestHelpers.GetRuntimeWinMds("Windows.UI")
Assert.True(runtimeAssemblies.Any())
Dim context = CreateMethodContextWithReferences(comp, "C.M", ImmutableArray.Create(MscorlibRef).Concat(runtimeAssemblies))
Dim runtime = CreateRuntimeInstance(comp, {MscorlibRef}.Concat(runtimeAssemblies))
Dim context = CreateMethodContext(runtime, "C.M")
Dim globalNamespace = context.Compilation.GlobalNamespace
Dim expectedIdentity = New AssemblyIdentity("Windows.Storage", contentType:=AssemblyContentType.WindowsRuntime)
......@@ -285,8 +291,8 @@ Public Class C
End Class
"
Dim comp = CreateCompilationWithMscorlib({source}, {SystemCoreRef}, TestOptions.DebugDll)
comp.AssertNoErrors()
Dim context = CreateMethodContextWithReferences(comp, "C.M", MscorlibRef)
Dim runtime = CreateRuntimeInstance(comp, {MscorlibRef})
Dim context = CreateMethodContext(runtime, "C.M")
Const expectedErrorTemplate = "error BC30456: '{0}' is not a member of 'Integer()'."
Dim expectedMissingAssemblyIdentity = EvaluationContextBase.SystemCoreIdentity
......@@ -334,20 +340,9 @@ Public Class C
End Class
"
Dim comp = CreateCompilationWithMscorlib({source}, {}, TestOptions.DebugDll)
Dim runtime = CreateRuntimeInstance(comp, {CSharpRef})
Dim context = CreateMethodContext(runtime, "C.M")
Dim exeBytes As Byte() = Nothing
Dim pdbBytes As Byte() = Nothing
Dim unusedReferences As ImmutableArray(Of MetadataReference) = Nothing
comp.EmitAndGetReferences(exeBytes, pdbBytes, unusedReferences)
Dim runtime = CreateRuntimeInstance(
GetUniqueName(),
ImmutableArray.Create(CSharpRef, ExpressionCompilerTestHelpers.IntrinsicAssemblyReference),
exeBytes,
SymReaderFactory.CreateReader(pdbBytes))
Dim context = CreateMethodContext(
runtime,
"C.M")
Dim aliases = ImmutableArray.Create(ExceptionAlias("Microsoft.CSharp.RuntimeBinder.RuntimeBinderException, Microsoft.CSharp, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a", stowed:=True))
Const expectedError = "error BC30002: Type 'System.Void' is not defined."
......@@ -385,7 +380,9 @@ End Class
Dim comp = CreateCompilationWithReferences({VisualBasicSyntaxTree.ParseText(source)}, {MscorlibRef}.Concat(WinRtRefs), TestOptions.DebugDll)
Dim runtimeAssemblies = ExpressionCompilerTestHelpers.GetRuntimeWinMds("Windows.Storage")
Assert.True(runtimeAssemblies.Any())
Dim context = CreateMethodContextWithReferences(comp, "C.M", ImmutableArray.Create(MscorlibRef).Concat(runtimeAssemblies))
Dim runtime = CreateRuntimeInstance(comp, {MscorlibRef}.Concat(runtimeAssemblies))
Dim context = CreateMethodContext(runtime, "C.M")
Const expectedError = "error BC30456: 'UI' is not a member of 'Windows'."
Dim expectedMissingAssemblyIdentity = New AssemblyIdentity("Windows.UI", contentType:=System.Reflection.AssemblyContentType.WindowsRuntime)
......@@ -423,7 +420,9 @@ End Class
Dim comp = CreateCompilationWithReferences({VisualBasicSyntaxTree.ParseText(source)}, {MscorlibRef}.Concat(WinRtRefs), TestOptions.DebugDll)
Dim runtimeAssemblies = ExpressionCompilerTestHelpers.GetRuntimeWinMds("Windows.UI")
Assert.True(runtimeAssemblies.Any())
Dim context = CreateMethodContextWithReferences(comp, "C.M", ImmutableArray.Create(MscorlibRef).Concat(runtimeAssemblies))
Dim runtime = CreateRuntimeInstance(comp, {MscorlibRef}.Concat(runtimeAssemblies))
Dim context = CreateMethodContext(runtime, "C.M")
Const expectedError = "error BC30456: 'Xaml' is not a member of 'Windows.UI'."
Dim expectedMissingAssemblyIdentity = New AssemblyIdentity("Windows.UI.Xaml", contentType:=System.Reflection.AssemblyContentType.WindowsRuntime)
......@@ -456,9 +455,12 @@ End Class
"
Dim comp = CreateCompilationWithReferences({VisualBasicSyntaxTree.ParseText(source)}, {MscorlibRef}.Concat(WinRtRefs), TestOptions.DebugDll)
Dim runtimeAssemblies = ExpressionCompilerTestHelpers.GetRuntimeWinMds("Windows.Storage")
Assert.True(runtimeAssemblies.Any())
Dim context = CreateMethodContextWithReferences(comp, "C.M", ImmutableArray.Create(MscorlibRef).Concat(runtimeAssemblies))
Dim runtime = CreateRuntimeInstance(comp, {MscorlibRef}.Concat(runtimeAssemblies))
Dim context = CreateMethodContext(runtime, "C.M")
Const expectedError = "error BC30002: Type 'Windows.UI.Colors' is not defined."
Dim expectedMissingAssemblyIdentity = New AssemblyIdentity("Windows.UI", contentType:=System.Reflection.AssemblyContentType.WindowsRuntime)
......@@ -531,14 +533,13 @@ Class UseLinq
End Class"
Dim compilation = CreateCompilationWithMscorlib({source}, references:={SystemCoreRef})
Dim exeBytes() As Byte = Nothing, pdbBytes() As Byte = Nothing
Dim references As ImmutableArray(Of MetadataReference) = Nothing
compilation.EmitAndGetReferences(exeBytes, pdbBytes, references)
Dim systemCore = SystemCoreRef.ToModuleInstance(fullImage:=Nothing, symReader:=Nothing)
Dim referencesWithoutSystemCore = references.Where(Function(r) r IsNot SystemCoreRef).ToImmutableArray()
Dim runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), referencesWithoutSystemCore.AddIntrinsicAssembly(), exeBytes, symReader:=Nothing)
Dim runtime = CreateRuntimeInstance(compilation, {MscorlibRef})
Dim context = CreateMethodContext(runtime, "C.Main")
Dim fakeSystemLinq = CreateCompilationWithMscorlib({""}, options:=TestOptions.ReleaseDll, assemblyName:="System.Linq").EmitToImageReference().ToModuleInstance(fullImage:=Nothing, symReader:=Nothing)
Dim systemCore = SystemCoreRef.ToModuleInstance(fullImage:=Nothing, symReader:=Nothing)
Dim fakeSystemLinq = CreateCompilationWithMscorlib({""}, options:=TestOptions.ReleaseDll, assemblyName:="System.Linq").
EmitToImageReference().ToModuleInstance(fullImage:=Nothing, symReader:=Nothing)
Dim errorMessage As String = Nothing
Dim testData As CompilationTestData = Nothing
......@@ -570,20 +571,6 @@ End Class"
Assert.Equal(2, retryCount)
End Sub
Private Function CreateMethodContextWithReferences(comp As Compilation, methodName As String, ParamArray references As MetadataReference()) As EvaluationContext
Return CreateMethodContextWithReferences(comp, methodName, ImmutableArray.CreateRange(references))
End Function
Private Function CreateMethodContextWithReferences(comp As Compilation, methodName As String, references As ImmutableArray(Of MetadataReference)) As EvaluationContext
Dim exeBytes As Byte() = Nothing
Dim pdbBytes As Byte() = Nothing
Dim unusedReferences As ImmutableArray(Of MetadataReference) = Nothing
comp.EmitAndGetReferences(exeBytes, pdbBytes, unusedReferences)
Dim runtime = CreateRuntimeInstance(GetUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes))
Return CreateMethodContext(runtime, methodName)
End Function
Private Shared Function GetMissingAssemblyIdentities(code As ERRID, ParamArray arguments() As Object) As ImmutableArray(Of AssemblyIdentity)
Return GetMissingAssemblyIdentities(code, arguments, globalNamespace:=Nothing)
End Function
......
......@@ -808,37 +808,31 @@ Class C
Dim o As New A(Of Object)()
End Sub
End Class"
Dim assemblyNameA = "397300B1-A"
Dim publicKeyA = ImmutableArray.CreateRange(Of Byte)({&H00, &H24, &H00, &H00, &H04, &H80, &H00, &H00, &H94, &H00, &H00, &H00, &H06, &H02, &H00, &H00, &H00, &H24, &H00, &H00, &H52, &H53, &H41, &H31, &H00, &H04, &H00, &H00, &H01, &H00, &H01, &H00, &HED, &HD3, &H22, &HCB, &H6B, &HF8, &HD4, &HA2, &HFC, &HCC, &H87, &H37, &H04, &H06, &H04, &HCE, &HE7, &HB2, &HA6, &HF8, &H4A, &HEE, &HF3, &H19, &HDF, &H5B, &H95, &HE3, &H7A, &H6A, &H28, &H24, &HA4, &H0A, &H83, &H83, &HBD, &HBA, &HF2, &HF2, &H52, &H20, &HE9, &HAA, &H3B, &HD1, &HDD, &HE4, &H9A, &H9A, &H9C, &HC0, &H30, &H8F, &H01, &H40, &H06, &HE0, &H2B, &H95, &H62, &H89, &H2A, &H34, &H75, &H22, &H68, &H64, &H6E, &H7C, &H2E, &H83, &H50, &H5A, &HCE, &H7B, &H0B, &HE8, &HF8, &H71, &HE6, &HF7, &H73, &H8E, &HEB, &H84, &HD2, &H73, &H5D, &H9D, &HBE, &H5E, &HF5, &H90, &HF9, &HAB, &H0A, &H10, &H7E, &H23, &H48, &HF4, &HAD, &H70, &H2E, &HF7, &HD4, &H51, &HD5, &H8B, &H3A, &HF7, &HCA, &H90, &H4C, &HDC, &H80, &H19, &H26, &H65, &HC9, &H37, &HBD, &H52, &H81, &HF1, &H8B, &HCD})
Const assemblyNameA = "397300B1-A"
Const assemblyNameB = "397300B1-B"
Dim publicKeyA = ImmutableArray.CreateRange(Of Byte)({&H0, &H24, &H0, &H0, &H4, &H80, &H0, &H0, &H94, &H0, &H0, &H0, &H6, &H2, &H0, &H0, &H0, &H24, &H0, &H0, &H52, &H53, &H41, &H31, &H0, &H4, &H0, &H0, &H1, &H0, &H1, &H0, &HED, &HD3, &H22, &HCB, &H6B, &HF8, &HD4, &HA2, &HFC, &HCC, &H87, &H37, &H4, &H6, &H4, &HCE, &HE7, &HB2, &HA6, &HF8, &H4A, &HEE, &HF3, &H19, &HDF, &H5B, &H95, &HE3, &H7A, &H6A, &H28, &H24, &HA4, &HA, &H83, &H83, &HBD, &HBA, &HF2, &HF2, &H52, &H20, &HE9, &HAA, &H3B, &HD1, &HDD, &HE4, &H9A, &H9A, &H9C, &HC0, &H30, &H8F, &H1, &H40, &H6, &HE0, &H2B, &H95, &H62, &H89, &H2A, &H34, &H75, &H22, &H68, &H64, &H6E, &H7C, &H2E, &H83, &H50, &H5A, &HCE, &H7B, &HB, &HE8, &HF8, &H71, &HE6, &HF7, &H73, &H8E, &HEB, &H84, &HD2, &H73, &H5D, &H9D, &HBE, &H5E, &HF5, &H90, &HF9, &HAB, &HA, &H10, &H7E, &H23, &H48, &HF4, &HAD, &H70, &H2E, &HF7, &HD4, &H51, &HD5, &H8B, &H3A, &HF7, &HCA, &H90, &H4C, &HDC, &H80, &H19, &H26, &H65, &HC9, &H37, &HBD, &H52, &H81, &HF1, &H8B, &HCD})
Dim compilationA1 = CreateCompilation(
New AssemblyIdentity(assemblyNameA, New Version(1, 1, 1, 1), cultureName:="", publicKeyOrToken:=publicKeyA, hasPublicKey:=True),
{sourceA},
references:={MscorlibRef_v20},
options:=TestOptions.DebugDll.WithDelaySign(True))
Dim referenceA1 = compilationA1.EmitToImageReference()
Dim assemblyNameB = "397300B1-B"
Dim compilationB1 = CreateCompilation(
New AssemblyIdentity(assemblyNameB, New Version(1, 2, 2, 2)),
{sourceB},
references:={MscorlibRef_v20, referenceA1},
references:={MscorlibRef_v20, compilationA1.EmitToImageReference()},
options:=TestOptions.DebugDll)
' Use mscorlib v4.0.0.0 and A v2.1.2.1 at runtime.
Dim exeBytes As Byte() = Nothing
Dim pdbBytes As Byte() = Nothing
Dim references As ImmutableArray(Of MetadataReference) = Nothing
compilationB1.EmitAndGetReferences(exeBytes, pdbBytes, references)
Dim compilationA2 = CreateCompilation(
New AssemblyIdentity(assemblyNameA, New Version(2, 1, 2, 1), cultureName:="", publicKeyOrToken:=publicKeyA, hasPublicKey:=True),
{sourceA},
references:={MscorlibRef_v20},
options:=TestOptions.DebugDll.WithDelaySign(True))
Dim referenceA2 = compilationA2.EmitToImageReference()
Dim runtime = CreateRuntimeInstance(
assemblyNameB,
ImmutableArray.Create(MscorlibRef, referenceA2).AddIntrinsicAssembly(),
exeBytes,
SymReaderFactory.CreateReader(pdbBytes))
Dim runtime = CreateRuntimeInstance(compilationB1, {MscorlibRef, compilationA2.EmitToImageReference()})
' GetType(Exception), GetType(A(Of B(Of Object))), GetType(B(Of A(Of Object)()))
Dim context = CreateMethodContext(
......@@ -911,24 +905,24 @@ Class B
End Class"
Dim assemblyNameA = "0B93FF0B-31A2-47C8-B24D-16A2D77AB5C5"
Dim compilationA = CreateCompilationWithMscorlibAndVBRuntime(MakeSources(sourceA, assemblyName:=assemblyNameA), options:=TestOptions.DebugDll)
Dim exeA As Byte() = Nothing
Dim pdbA As Byte() = Nothing
Dim exeA As ImmutableArray(Of Byte) = Nothing
Dim pdbA As ImmutableArray(Of Byte) = Nothing
Dim referencesA As ImmutableArray(Of MetadataReference) = Nothing
compilationA.EmitAndGetReferences(exeA, pdbA, referencesA)
Dim referenceA = AssemblyMetadata.CreateFromImage(exeA).GetReference()
Dim assemblyNameB = "9BBC6622-86EB-4EC5-94A1-9A1E6D0C24B9"
Dim compilationB = CreateCompilationWithMscorlibAndVBRuntimeAndReferences(MakeSources(sourceB, assemblyName:=assemblyNameB), options:=TestOptions.DebugDll, additionalRefs:={referenceA})
Dim exeB As Byte() = Nothing
Dim pdbB As Byte() = Nothing
Dim exeB As ImmutableArray(Of Byte) = Nothing
Dim pdbB As ImmutableArray(Of Byte) = Nothing
Dim referencesB As ImmutableArray(Of MetadataReference) = Nothing
compilationB.EmitAndGetReferences(exeB, pdbB, referencesB)
Dim referenceB = AssemblyMetadata.CreateFromImage(exeB).GetReference()
Dim modulesBuilder = ArrayBuilder(Of ModuleInstance).GetInstance()
modulesBuilder.Add(MscorlibRef.ToModuleInstance(fullImage:=Nothing, symReader:=Nothing))
modulesBuilder.Add(referenceA.ToModuleInstance(fullImage:=exeA, symReader:=SymReaderFactory.CreateReader(pdbA)))
modulesBuilder.Add(referenceB.ToModuleInstance(fullImage:=exeB, symReader:=SymReaderFactory.CreateReader(pdbB)))
modulesBuilder.Add(referenceA.ToModuleInstance(fullImage:=exeA.ToArray(), symReader:=SymReaderFactory.CreateReader(pdbA)))
modulesBuilder.Add(referenceB.ToModuleInstance(fullImage:=exeB.ToArray(), symReader:=SymReaderFactory.CreateReader(pdbB)))
modulesBuilder.Add(ExpressionCompilerTestHelpers.IntrinsicAssemblyReference.ToModuleInstance(fullImage:=Nothing, symReader:=Nothing))
Using runtime = New RuntimeInstance(modulesBuilder.ToImmutableAndFree())
......
......@@ -38,7 +38,7 @@ End Class"
End Class"
' Assembly A, multiple versions, strong name.
Dim assemblyNameA = ExpressionCompilerUtilities.GenerateUniqueName()
Dim publicKeyA = ImmutableArray.CreateRange(Of Byte)({&H00, &H24, &H00, &H00, &H04, &H80, &H00, &H00, &H94, &H00, &H00, &H00, &H06, &H02, &H00, &H00, &H00, &H24, &H00, &H00, &H52, &H53, &H41, &H31, &H00, &H04, &H00, &H00, &H01, &H00, &H01, &H00, &HED, &HD3, &H22, &HCB, &H6B, &HF8, &HD4, &HA2, &HFC, &HCC, &H87, &H37, &H04, &H06, &H04, &HCE, &HE7, &HB2, &HA6, &HF8, &H4A, &HEE, &HF3, &H19, &HDF, &H5B, &H95, &HE3, &H7A, &H6A, &H28, &H24, &HA4, &H0A, &H83, &H83, &HBD, &HBA, &HF2, &HF2, &H52, &H20, &HE9, &HAA, &H3B, &HD1, &HDD, &HE4, &H9A, &H9A, &H9C, &HC0, &H30, &H8F, &H01, &H40, &H06, &HE0, &H2B, &H95, &H62, &H89, &H2A, &H34, &H75, &H22, &H68, &H64, &H6E, &H7C, &H2E, &H83, &H50, &H5A, &HCE, &H7B, &H0B, &HE8, &HF8, &H71, &HE6, &HF7, &H73, &H8E, &HEB, &H84, &HD2, &H73, &H5D, &H9D, &HBE, &H5E, &HF5, &H90, &HF9, &HAB, &H0A, &H10, &H7E, &H23, &H48, &HF4, &HAD, &H70, &H2E, &HF7, &HD4, &H51, &HD5, &H8B, &H3A, &HF7, &HCA, &H90, &H4C, &HDC, &H80, &H19, &H26, &H65, &HC9, &H37, &HBD, &H52, &H81, &HF1, &H8B, &HCD})
Dim publicKeyA = ImmutableArray.CreateRange(Of Byte)({&H0, &H24, &H0, &H0, &H4, &H80, &H0, &H0, &H94, &H0, &H0, &H0, &H6, &H2, &H0, &H0, &H0, &H24, &H0, &H0, &H52, &H53, &H41, &H31, &H0, &H4, &H0, &H0, &H1, &H0, &H1, &H0, &HED, &HD3, &H22, &HCB, &H6B, &HF8, &HD4, &HA2, &HFC, &HCC, &H87, &H37, &H4, &H6, &H4, &HCE, &HE7, &HB2, &HA6, &HF8, &H4A, &HEE, &HF3, &H19, &HDF, &H5B, &H95, &HE3, &H7A, &H6A, &H28, &H24, &HA4, &HA, &H83, &H83, &HBD, &HBA, &HF2, &HF2, &H52, &H20, &HE9, &HAA, &H3B, &HD1, &HDD, &HE4, &H9A, &H9A, &H9C, &HC0, &H30, &H8F, &H1, &H40, &H6, &HE0, &H2B, &H95, &H62, &H89, &H2A, &H34, &H75, &H22, &H68, &H64, &H6E, &H7C, &H2E, &H83, &H50, &H5A, &HCE, &H7B, &HB, &HE8, &HF8, &H71, &HE6, &HF7, &H73, &H8E, &HEB, &H84, &HD2, &H73, &H5D, &H9D, &HBE, &H5E, &HF5, &H90, &HF9, &HAB, &HA, &H10, &H7E, &H23, &H48, &HF4, &HAD, &H70, &H2E, &HF7, &HD4, &H51, &HD5, &H8B, &H3A, &HF7, &HCA, &H90, &H4C, &HDC, &H80, &H19, &H26, &H65, &HC9, &H37, &HBD, &H52, &H81, &HF1, &H8B, &HCD})
Dim compilationAS1 = CreateCompilation(
New AssemblyIdentity(assemblyNameA, New Version(1, 1, 1, 1), cultureName:="", publicKeyOrToken:=publicKeyA, hasPublicKey:=True),
{sourceA},
......@@ -56,7 +56,7 @@ End Class"
' Assembly B, multiple versions, strong name.
Dim assemblyNameB = ExpressionCompilerUtilities.GenerateUniqueName()
Dim publicKeyB = ImmutableArray.CreateRange(Of Byte)({&H00, &H24, &H00, &H00, &H04, &H80, &H00, &H00, &H94, &H00, &H00, &H00, &H06, &H02, &H00, &H00, &H00, &H24, &H00, &H00, &H53, &H52, &H41, &H31, &H00, &H04, &H00, &H00, &H01, &H00, &H01, &H00, &HED, &HD3, &H22, &HCB, &H6B, &HF8, &HD4, &HA2, &HFC, &HCC, &H87, &H37, &H04, &H06, &H04, &HCE, &HE7, &HB2, &HA6, &HF8, &H4A, &HEE, &HF3, &H19, &HDF, &H5B, &H95, &HE3, &H7A, &H6A, &H28, &H24, &HA4, &H0A, &H83, &H83, &HBD, &HBA, &HF2, &HF2, &H52, &H20, &HE9, &HAA, &H3B, &HD1, &HDD, &HE4, &H9A, &H9A, &H9C, &HC0, &H30, &H8F, &H01, &H40, &H06, &HE0, &H2B, &H95, &H62, &H89, &H2A, &H34, &H75, &H22, &H68, &H64, &H6E, &H7C, &H2E, &H83, &H50, &H5A, &HCE, &H7B, &H0B, &HE8, &HF8, &H71, &HE6, &HF7, &H73, &H8E, &HEB, &H84, &HD2, &H73, &H5D, &H9D, &HBE, &H5E, &HF5, &H90, &HF9, &HAB, &H0A, &H10, &H7E, &H23, &H48, &HF4, &HAD, &H70, &H2E, &HF7, &HD4, &H51, &HD5, &H8B, &H3A, &HF7, &HCA, &H90, &H4C, &HDC, &H80, &H19, &H26, &H65, &HC9, &H37, &HBD, &H52, &H81, &HF1, &H8B, &HCD})
Dim publicKeyB = ImmutableArray.CreateRange(Of Byte)({&H0, &H24, &H0, &H0, &H4, &H80, &H0, &H0, &H94, &H0, &H0, &H0, &H6, &H2, &H0, &H0, &H0, &H24, &H0, &H0, &H53, &H52, &H41, &H31, &H0, &H4, &H0, &H0, &H1, &H0, &H1, &H0, &HED, &HD3, &H22, &HCB, &H6B, &HF8, &HD4, &HA2, &HFC, &HCC, &H87, &H37, &H4, &H6, &H4, &HCE, &HE7, &HB2, &HA6, &HF8, &H4A, &HEE, &HF3, &H19, &HDF, &H5B, &H95, &HE3, &H7A, &H6A, &H28, &H24, &HA4, &HA, &H83, &H83, &HBD, &HBA, &HF2, &HF2, &H52, &H20, &HE9, &HAA, &H3B, &HD1, &HDD, &HE4, &H9A, &H9A, &H9C, &HC0, &H30, &H8F, &H1, &H40, &H6, &HE0, &H2B, &H95, &H62, &H89, &H2A, &H34, &H75, &H22, &H68, &H64, &H6E, &H7C, &H2E, &H83, &H50, &H5A, &HCE, &H7B, &HB, &HE8, &HF8, &H71, &HE6, &HF7, &H73, &H8E, &HEB, &H84, &HD2, &H73, &H5D, &H9D, &HBE, &H5E, &HF5, &H90, &HF9, &HAB, &HA, &H10, &H7E, &H23, &H48, &HF4, &HAD, &H70, &H2E, &HF7, &HD4, &H51, &HD5, &H8B, &H3A, &HF7, &HCA, &H90, &H4C, &HDC, &H80, &H19, &H26, &H65, &HC9, &H37, &HBD, &H52, &H81, &HF1, &H8B, &HCD})
Dim compilationBS1 = CreateCompilation(
New AssemblyIdentity(assemblyNameB, New Version(1, 1, 1, 1), cultureName:="", publicKeyOrToken:=publicKeyB, hasPublicKey:=True),
{sourceB},
......@@ -73,73 +73,57 @@ End Class"
Dim identityBS2 = referenceBS2.GetAssemblyIdentity()
' Assembly C, multiple versions, not strong name.
Dim assemblyNameC = ExpressionCompilerUtilities.GenerateUniqueName()
Dim compilationCN1 = CreateCompilation(
New AssemblyIdentity(assemblyNameC, New Version(1, 1, 1, 1)),
New AssemblyIdentity("C", New Version(1, 1, 1, 1)),
{sourceC},
references:={MscorlibRef, referenceBS1},
options:=TestOptions.DebugDll)
Dim exeBytesC1 As Byte() = Nothing
Dim pdbBytesC1 As Byte() = Nothing
Dim references As ImmutableArray(Of MetadataReference) = Nothing
compilationCN1.EmitAndGetReferences(exeBytesC1, pdbBytesC1, references)
Dim compilationCN2 = CreateCompilation(
New AssemblyIdentity(assemblyNameC, New Version(2, 1, 1, 1)),
{sourceC},
references:={MscorlibRef, referenceBS2},
options:=TestOptions.DebugDll)
Dim exeBytesC2 As Byte() = Nothing
Dim pdbBytesC2 As Byte() = Nothing
compilationCN1.EmitAndGetReferences(exeBytesC2, pdbBytesC2, references)
' Duplicate assemblies, target module referencing BS1.
Using runtime = CreateRuntimeInstance(
assemblyNameC,
ImmutableArray.Create(MscorlibRef, referenceAS1, referenceAS2, referenceBS2, referenceBS1, referenceBS2),
exeBytesC1,
SymReaderFactory.CreateReader(pdbBytesC1))
Dim typeBlocks As ImmutableArray(Of MetadataBlock) = Nothing
Dim methodBlocks As ImmutableArray(Of MetadataBlock) = Nothing
Dim moduleVersionId As Guid = Nothing
Dim symReader As ISymUnmanagedReader = Nothing
Dim typeToken = 0
Dim methodToken = 0
Dim localSignatureToken = 0
GetContextState(runtime, "C", typeBlocks, moduleVersionId, symReader, typeToken, localSignatureToken)
GetContextState(runtime, "C.M", methodBlocks, moduleVersionId, symReader, methodToken, localSignatureToken)
' Compile expression with type context.
Dim context = EvaluationContext.CreateTypeContext(
Nothing,
typeBlocks,
moduleVersionId,
typeToken)
Dim errorMessage As String = Nothing
' A is ambiguous since there were no explicit references to AS1 or AS2.
context.CompileExpression("New A()", errorMessage)
Assert.Equal(errorMessage, "error BC30554: 'A' is ambiguous.")
' Ideally, B should be resolved to BS1.
context.CompileExpression("New B()", errorMessage)
Assert.Equal(errorMessage, "error BC30554: 'B' is ambiguous.")
' Compile expression with method context.
Dim previous = New VisualBasicMetadataContext(typeBlocks, context)
context = EvaluationContext.CreateMethodContext(
previous,
methodBlocks,
MakeDummyLazyAssemblyReaders(),
symReader,
moduleVersionId,
methodToken,
methodVersion:=1,
ilOffset:=0,
localSignatureToken:=localSignatureToken)
Assert.Equal(previous.Compilation, context.Compilation) ' re-use type context compilation
' Ideally, B should be resolved to BS1.
context.CompileExpression("New B()", errorMessage)
Assert.Equal(errorMessage, "error BC30554: 'B' is ambiguous.")
End Using
Dim runtime = CreateRuntimeInstance(
compilationCN1,
{MscorlibRef, referenceAS1, referenceAS2, referenceBS2, referenceBS1, referenceBS2})
Dim typeBlocks As ImmutableArray(Of MetadataBlock) = Nothing
Dim methodBlocks As ImmutableArray(Of MetadataBlock) = Nothing
Dim moduleVersionId As Guid = Nothing
Dim symReader As ISymUnmanagedReader = Nothing
Dim typeToken = 0
Dim methodToken = 0
Dim localSignatureToken = 0
GetContextState(runtime, "C", typeBlocks, moduleVersionId, symReader, typeToken, localSignatureToken)
GetContextState(runtime, "C.M", methodBlocks, moduleVersionId, symReader, methodToken, localSignatureToken)
' Compile expression with type context.
Dim context = EvaluationContext.CreateTypeContext(
Nothing,
typeBlocks,
moduleVersionId,
typeToken)
Dim errorMessage As String = Nothing
' A is ambiguous since there were no explicit references to AS1 or AS2.
context.CompileExpression("New A()", errorMessage)
Assert.Equal(errorMessage, "error BC30554: 'A' is ambiguous.")
' Ideally, B should be resolved to BS1.
context.CompileExpression("New B()", errorMessage)
Assert.Equal(errorMessage, "error BC30554: 'B' is ambiguous.")
' Compile expression with method context.
Dim previous = New VisualBasicMetadataContext(typeBlocks, context)
context = EvaluationContext.CreateMethodContext(
previous,
methodBlocks,
MakeDummyLazyAssemblyReaders(),
symReader,
moduleVersionId,
methodToken,
methodVersion:=1,
ilOffset:=0,
localSignatureToken:=localSignatureToken)
Assert.Equal(previous.Compilation, context.Compilation) ' re-use type context compilation
' Ideally, B should be resolved to BS1.
context.CompileExpression("New B()", errorMessage)
Assert.Equal(errorMessage, "error BC30554: 'B' is ambiguous.")
End Sub
<Fact>
......@@ -192,25 +176,25 @@ End Class"
MakeSources(sourceA, assemblyName:=assemblyNameA),
options:=TestOptions.DebugDll,
additionalRefs:={SystemCoreRef})
Dim exeBytesA As Byte() = Nothing
Dim pdbBytesA As Byte() = Nothing
Dim exeBytesA As ImmutableArray(Of Byte) = Nothing
Dim pdbBytesA As ImmutableArray(Of Byte) = Nothing
Dim referencesA As ImmutableArray(Of MetadataReference) = Nothing
compilationA.EmitAndGetReferences(exeBytesA, pdbBytesA, referencesA)
Dim referenceA = AssemblyMetadata.CreateFromImage(exeBytesA).GetReference(display:=assemblyNameA)
Dim identityA = referenceA.GetAssemblyIdentity()
Dim moduleA = referenceA.ToModuleInstance(exeBytesA, SymReaderFactory.CreateReader(pdbBytesA))
Dim moduleA = referenceA.ToModuleInstance(exeBytesA.ToArray(), SymReaderFactory.CreateReader(pdbBytesA))
Dim assemblyNameB = ExpressionCompilerUtilities.GenerateUniqueName()
Dim compilationB = CreateCompilationWithMscorlibAndVBRuntime(
MakeSources(sourceB, assemblyName:=assemblyNameB),
options:=TestOptions.DebugDll,
additionalRefs:={SystemCoreRef, referenceA})
Dim exeBytesB As Byte() = Nothing
Dim pdbBytesB As Byte() = Nothing
Dim exeBytesB As ImmutableArray(Of Byte) = Nothing
Dim pdbBytesB As ImmutableArray(Of Byte) = Nothing
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, SymReaderFactory.CreateReader(pdbBytesB))
Dim moduleB = referenceB.ToModuleInstance(exeBytesB.ToArray(), SymReaderFactory.CreateReader(pdbBytesB))
Dim moduleBuilder = ArrayBuilder(Of ModuleInstance).GetInstance()
moduleBuilder.AddRange(referencesA.Select(Function(r) r.ToModuleInstance(Nothing, Nothing)))
......@@ -319,72 +303,59 @@ Class C
F()
End Sub
End Class"
Dim assemblyNameA = ExpressionCompilerUtilities.GenerateUniqueName()
Dim compilationA1 = CreateCompilation(
New AssemblyIdentity(assemblyNameA, New Version(1, 1, 1, 1)),
Dim referenceA1 = CreateCompilation(
New AssemblyIdentity("A", New Version(1, 1, 1, 1)),
{sourceA},
options:=TestOptions.DebugDll,
references:={MscorlibRef, SystemRef, MsvbRef})
Dim referenceA1 = compilationA1.EmitToImageReference()
references:={MscorlibRef, SystemRef, MsvbRef}).EmitToImageReference()
Dim compilationA2 = CreateCompilation(
New AssemblyIdentity(assemblyNameA, New Version(2, 1, 1, 2)),
Dim referenceA2 = CreateCompilation(
New AssemblyIdentity("A", New Version(2, 1, 1, 2)),
{sourceA},
options:=TestOptions.DebugDll,
references:={MscorlibRef, SystemRef, MsvbRef})
Dim referenceA2 = compilationA2.EmitToImageReference()
references:={MscorlibRef, SystemRef, MsvbRef}).EmitToImageReference()
Dim assemblyNameB = ExpressionCompilerUtilities.GenerateUniqueName()
Dim compilationB = CreateCompilation(
New AssemblyIdentity(assemblyNameB, New Version(1, 1, 1, 1)),
New AssemblyIdentity("B", New Version(1, 1, 1, 1)),
{sourceB},
options:=TestOptions.DebugDll,
references:={MscorlibRef, referenceA1})
Dim exeBytesB As Byte() = Nothing
Dim pdbBytesB As Byte() = Nothing
Dim referencesB As ImmutableArray(Of MetadataReference) = Nothing
compilationB.EmitAndGetReferences(exeBytesB, pdbBytesB, referencesB)
Using runtime = CreateRuntimeInstance(
assemblyNameB,
ImmutableArray.Create(MscorlibRef, SystemRef, MsvbRef, referenceA1, referenceA2),
exeBytesB,
SymReaderFactory.CreateReader(pdbBytesB))
Dim blocks As ImmutableArray(Of MetadataBlock) = Nothing
Dim moduleVersionId As Guid = Nothing
Dim symReader As ISymUnmanagedReader = Nothing
Dim typeToken = 0
Dim methodToken = 0
Dim localSignatureToken = 0
GetContextState(runtime, "C.M", blocks, moduleVersionId, symReader, methodToken, localSignatureToken)
Dim context = EvaluationContext.CreateMethodContext(
Nothing,
blocks,
MakeDummyLazyAssemblyReaders(),
symReader,
moduleVersionId,
methodToken,
methodVersion:=1,
ilOffset:=0,
localSignatureToken:=localSignatureToken)
Dim errorMessage As String = Nothing
context.CompileExpression("F()", errorMessage)
Assert.Equal(errorMessage, "error BC30562: 'F' is ambiguous between declarations in Modules 'N.M, N.M'.")
Dim testData As New CompilationTestData()
Dim contextFactory = CreateMethodContextFactory(moduleVersionId, symReader, methodToken, localSignatureToken)
ExpressionCompilerTestHelpers.CompileExpressionWithRetry(blocks, "F()", ImmutableArray(Of [Alias]).Empty, contextFactory, getMetaDataBytesPtr:=Nothing, errorMessage:=errorMessage, testData:=testData)
Assert.Null(errorMessage)
testData.GetMethodData("<>x.<>m0").VerifyIL(
Dim runtime = CreateRuntimeInstance(compilationB, {MscorlibRef, SystemRef, MsvbRef, referenceA1, referenceA2})
Dim blocks As ImmutableArray(Of MetadataBlock) = Nothing
Dim moduleVersionId As Guid = Nothing
Dim symReader As ISymUnmanagedReader = Nothing
Dim typeToken = 0
Dim methodToken = 0
Dim localSignatureToken = 0
GetContextState(runtime, "C.M", blocks, moduleVersionId, symReader, methodToken, localSignatureToken)
Dim context = EvaluationContext.CreateMethodContext(
Nothing,
blocks,
MakeDummyLazyAssemblyReaders(),
symReader,
moduleVersionId,
methodToken,
methodVersion:=1,
ilOffset:=0,
localSignatureToken:=localSignatureToken)
Dim errorMessage As String = Nothing
context.CompileExpression("F()", errorMessage)
Assert.Equal(errorMessage, "error BC30562: 'F' is ambiguous between declarations in Modules 'N.M, N.M'.")
Dim testData As New CompilationTestData()
Dim contextFactory = CreateMethodContextFactory(moduleVersionId, symReader, methodToken, localSignatureToken)
ExpressionCompilerTestHelpers.CompileExpressionWithRetry(blocks, "F()", ImmutableArray(Of [Alias]).Empty, contextFactory, getMetaDataBytesPtr:=Nothing, errorMessage:=errorMessage, testData:=testData)
Assert.Null(errorMessage)
testData.GetMethodData("<>x.<>m0").VerifyIL(
"{
// Code size 6 (0x6)
.maxstack 1
IL_0000: call ""Function N.M.F() As Object""
IL_0005: ret
// Code size 6 (0x6)
.maxstack 1
IL_0000: call ""Function N.M.F() As Object""
IL_0005: ret
}")
End Using
End Sub
<WorkItem(1170032, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1170032")>
......
......@@ -110,11 +110,11 @@ End Class
EmitILToArray(ilSource, appendDefaultHeader:=True, includePdb:=True, assemblyBytes:=exeBytes, pdbBytes:=pdbBytes)
Dim runtime = CreateRuntimeInstance(
assemblyName:=GetUniqueName(),
references:=ImmutableArray.Create(MscorlibRef),
exeBytes:=exeBytes.ToArray(),
references:={MscorlibRef},
exeBytes:=exeBytes,
symReader:=SymReaderFactory.CreateReader(pdbBytes))
Dim context = CreateMethodContext(runtime, methodName:="C.Test")
Dim context = CreateMethodContext(runtime, "C.Test")
Assert.Equal(DkmEvaluationResultAccessType.Private, GetResultProperties(context, "[Private]").AccessType)
Assert.Equal(DkmEvaluationResultAccessType.Protected, GetResultProperties(context, "[Protected]").AccessType)
......@@ -265,10 +265,10 @@ End Class
EmitILToArray(ilSource, appendDefaultHeader:=True, includePdb:=True, assemblyBytes:=exeBytes, pdbBytes:=pdbBytes)
Dim runtime = CreateRuntimeInstance(
assemblyName:=GetUniqueName(),
references:=ImmutableArray.Create(MscorlibRef),
exeBytes:=exeBytes.ToArray(),
references:={MscorlibRef},
exeBytes:=exeBytes,
symReader:=SymReaderFactory.CreateReader(pdbBytes))
Dim context = CreateMethodContext(runtime, methodName:="C.Test")
Assert.Equal(DkmEvaluationResultTypeModifierFlags.None, GetResultProperties(context, "F").ModifierFlags)
......
......@@ -34,15 +34,10 @@ End Class"
Dim comp = CreateCompilationWithMscorlib({source}, options:=TestOptions.DebugDll, references:=WinRtRefs)
Dim runtimeAssemblies = ExpressionCompilerTestHelpers.GetRuntimeWinMds("Windows.Storage", "Windows.Foundation.Collections")
Assert.True(runtimeAssemblies.Length >= 2)
Dim exeBytes As Byte() = Nothing
Dim pdbBytes As Byte() = Nothing
Dim references As ImmutableArray(Of MetadataReference) = Nothing
comp.EmitAndGetReferences(exeBytes, pdbBytes, references)
Dim runtime = CreateRuntimeInstance(
ExpressionCompilerUtilities.GenerateUniqueName(),
ImmutableArray.Create(MscorlibRef).Concat(runtimeAssemblies), ' no reference to Windows.winmd
exeBytes,
SymReaderFactory.CreateReader(pdbBytes))
' no reference to Windows.winmd
Dim runtime = CreateRuntimeInstance(comp, {MscorlibRef}.Concat(runtimeAssemblies))
Dim context = CreateMethodContext(runtime, "C.M")
Dim errorMessage As String = Nothing
Dim testData = New CompilationTestData()
......@@ -120,8 +115,10 @@ End Class"
Shared Sub M(a As LibraryA.A, b As LibraryB.B, t As Windows.Data.Text.TextSegment, f As Windows.Storage.StorageFolder)
End Sub
End Class"
Dim runtime = CreateRuntime(source, compileReferences, runtimeReferences)
Dim c0 = CreateCompilationWithMscorlib({source}, compileReferences, TestOptions.DebugDll)
Dim runtime = CreateRuntimeInstance(c0, runtimeReferences)
Dim context = CreateMethodContext(runtime, "C.M")
Dim errorMessage As String = Nothing
Dim testData = New CompilationTestData()
context.CompileExpression("If(a, If(b, If(t, f)))", errorMessage, testData)
......@@ -161,8 +158,8 @@ End Class"
Dim comp = VisualBasicCompilation.Create(
assemblyName:=ExpressionCompilerUtilities.GenerateUniqueName(),
references:=runtimeReferences.Concat(ImmutableArray.Create(Of MetadataReference)(assemblyReference)))
Dim assembly = ImmutableArray.CreateRange(result.Assembly)
Using metadata = ModuleMetadata.CreateFromImage(ImmutableArray.CreateRange(assembly))
Using metadata = ModuleMetadata.CreateFromImage(result.Assembly)
Dim reader = metadata.MetadataReader
Dim typeDef = reader.GetTypeDef("<>x")
Dim methodHandle = reader.GetMethodDefHandle(typeDef, "<>m0")
......@@ -192,13 +189,12 @@ End Class"
Shared Sub M(f As Windows.Storage.StorageFolder, p As Windows.Foundation.Collections.PropertySet)
End Sub
End Class"
Dim runtime = CreateRuntime(
source,
ImmutableArray.CreateRange(WinRtRefs),
ImmutableArray.Create(MscorlibRef).Concat(ExpressionCompilerTestHelpers.GetRuntimeWinMds("Windows.Storage", "Windows.Foundation.Collections")))
Dim context = CreateMethodContext(
runtime,
"C.M")
Dim comp = CreateCompilationWithMscorlib({source}, WinRtRefs, TestOptions.DebugDll)
Dim runtimeAssemblies = ExpressionCompilerTestHelpers.GetRuntimeWinMds("Windows.Storage", "Windows.Foundation.Collections")
Dim runtime = CreateRuntimeInstance(comp, {MscorlibRef}.Concat(runtimeAssemblies))
Dim context = CreateMethodContext(runtime, "C.M")
Dim aliases = ImmutableArray.Create(
VariableAlias("s", "Windows.Storage.StorageFolder, Windows.Storage, Version=255.255.255.255, Culture=neutral, PublicKeyToken=null, ContentType=WindowsRuntime"),
VariableAlias("d", "Windows.Foundation.DateTime, Windows.Foundation, Version=255.255.255.255, Culture=neutral, PublicKeyToken=null, ContentType=WindowsRuntime"))
......@@ -231,27 +227,6 @@ End Class"
}")
End Sub
Private Function CreateRuntime(
source As String,
compileReferences As ImmutableArray(Of MetadataReference),
runtimeReferences As ImmutableArray(Of MetadataReference)) As RuntimeInstance
Dim comp = CreateCompilationWithMscorlib(
{source},
options:=TestOptions.DebugDll,
assemblyName:=ExpressionCompilerUtilities.GenerateUniqueName(),
references:=compileReferences)
Dim exeBytes As Byte() = Nothing
Dim pdbBytes As Byte() = Nothing
Dim references As ImmutableArray(Of MetadataReference) = Nothing
comp.EmitAndGetReferences(exeBytes, pdbBytes, references)
Return CreateRuntimeInstance(
ExpressionCompilerUtilities.GenerateUniqueName(),
runtimeReferences.AddIntrinsicAssembly(),
exeBytes,
SymReaderFactory.CreateReader(pdbBytes))
End Function
Private Shared Function ToVersion1_3(bytes As Byte()) As Byte()
Return ExpressionCompilerTestHelpers.ToVersion1_3(bytes)
End Function
......@@ -259,8 +234,6 @@ End Class"
Private Shared Function ToVersion1_4(bytes As Byte()) As Byte()
Return ExpressionCompilerTestHelpers.ToVersion1_4(bytes)
End Function
End Class
End Namespace
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册