From 790c2574b2d972c7e58d87052c1b573f67124d2a Mon Sep 17 00:00:00 2001 From: Tomas Matousek Date: Wed, 27 Jan 2016 18:22:28 -0800 Subject: [PATCH] Avoid constructing SymReader explictly in tests --- .../Test/ExpressionCompiler/DynamicTests.cs | 21 +- .../ExpressionCompilerTestBase.cs | 19 +- .../ExpressionCompilerTests.cs | 176 ++++------ .../ExpressionCompiler/HoistedThisTests.cs | 12 +- .../Test/ExpressionCompiler/LocalsTests.cs | 102 ++---- .../MissingAssemblyTests.cs | 56 ++-- .../Test/ExpressionCompiler/NoPIATests.cs | 38 +-- .../ExpressionCompiler/PseudoVariableTests.cs | 37 +-- .../ReferencedModulesTests.cs | 302 +++++++++--------- .../ResultPropertiesTests.cs | 6 +- .../ExpressionCompiler/UsingDebugInfoTests.cs | 63 ++-- .../Test/ExpressionCompiler/WinMdTests.cs | 78 ++--- .../ExpressionCompilerTestHelpers.cs | 16 +- .../ExpressionCompiler/RuntimeInstance.cs | 22 +- .../ExpressionCompilerTestBase.vb | 16 +- .../ExpressionCompilerTests.vb | 121 +++---- .../Test/ExpressionCompiler/HoistedMeTests.vb | 7 +- .../ImportDebugInfoTests.vb | 29 +- .../Test/ExpressionCompiler/LocalsTests.vb | 75 ++--- .../MissingAssemblyTests.vb | 75 ++--- .../ExpressionCompiler/PseudoVariableTests.vb | 36 +-- .../ReferencedModulesTests.vb | 215 ++++++------- .../ResultPropertiesTests.vb | 14 +- .../Test/ExpressionCompiler/WinMdTests.vb | 57 +--- 24 files changed, 615 insertions(+), 978 deletions(-) diff --git a/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/DynamicTests.cs b/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/DynamicTests.cs index f76bc3ff5a0..8aa3907d700 100644 --- a/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/DynamicTests.cs +++ b/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/DynamicTests.cs @@ -154,12 +154,7 @@ static dynamic ForceDynamicAttribute() } }"; var comp = CreateCompilationWithMscorlib(source, new[] { SystemCoreRef, CSharpRef }, options: TestOptions.DebugDll); - byte[] exeBytes; - byte[] pdbBytes; - ImmutableArray 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 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 } "; var comp = CreateCompilationWithMscorlib(source, new[] { SystemCoreRef, CSharpRef }, options: TestOptions.DebugDll); - byte[] exeBytes; - byte[] pdbBytes; - ImmutableArray 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(); diff --git a/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/ExpressionCompilerTestBase.cs b/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/ExpressionCompilerTestBase.cs index fc3cd902977..025137055ca 100644 --- a/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/ExpressionCompilerTestBase.cs +++ b/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/ExpressionCompilerTestBase.cs @@ -1,6 +1,7 @@ // 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 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 references, - byte[] exeBytes, + IEnumerable references, + ImmutableArray 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 missingAssemblyIdentities; diff --git a/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/ExpressionCompilerTests.cs b/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/ExpressionCompilerTests.cs index d28b588bc32..5d72b3a1382 100644 --- a/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/ExpressionCompilerTests.cs +++ b/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/ExpressionCompilerTests.cs @@ -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 exeBytes; + ImmutableArray pdbBytes; ImmutableArray 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 typeBlocks; ImmutableArray 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 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 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 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.b__1"); + + var context = CreateMethodContext(runtime, methodName: "C.<>c__DisplayClass2.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 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.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 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 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.Empty); - byte[] exeBytes; - byte[] unusedPdbBytes; - ImmutableArray references; - comp.EmitAndGetReferences(out exeBytes, out unusedPdbBytes, out references); - - ISymUnmanagedReader symReader = new MockSymUnmanagedReader(ImmutableDictionary.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 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 blocks; diff --git a/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/HoistedThisTests.cs b/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/HoistedThisTests.cs index c28520e87ce..53705a04dfe 100644 --- a/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/HoistedThisTests.cs +++ b/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/HoistedThisTests.cs @@ -634,9 +634,8 @@ class [mscorlib]System.Collections.Generic.IEnumerator`1, 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..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.b__0"); VerifyNoThis(context); diff --git a/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/LocalsTests.cs b/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/LocalsTests.cs index 8763518dfb8..175ca5bf1c0 100644 --- a/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/LocalsTests.cs +++ b/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/LocalsTests.cs @@ -148,17 +148,9 @@ void M(int[] a) } } }"; - var compilation0 = CreateCompilationWithMscorlib(source, options: TestOptions.DebugDll); - byte[] exeBytes; - byte[] pdbBytes; - ImmutableArray 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 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 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.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 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.GetInstance(); @@ -1707,15 +1678,8 @@ public void MissingReference_2() options: TestOptions.DebugDll, references: new[] { compilation0.EmitToImageReference() }); - byte[] exeBytes; - byte[] pdbBytes; - ImmutableArray 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 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.GetInstance(); @@ -1847,15 +1804,8 @@ static void M() } "; var comp = CreateCompilationWithMscorlib(source, options: TestOptions.DebugDll); - byte[] exeBytes; - byte[] pdbBytes; - ImmutableArray 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 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 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.GetInstance(); diff --git a/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/MissingAssemblyTests.cs b/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/MissingAssemblyTests.cs index dc217d6a4cd..1084dc715ea 100644 --- a/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/MissingAssemblyTests.cs +++ b/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/MissingAssemblyTests.cs @@ -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(null); }"; - var compilation = CreateCompilationWithMscorlibAndSystemCore(source); - byte[] exeBytes, pdbBytes; - ImmutableArray 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 references) - { - byte[] exeBytes; - byte[] pdbBytes; - ImmutableArray 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); diff --git a/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/NoPIATests.cs b/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/NoPIATests.cs index 8c06c4ca89b..a450ca93bfd 100644 --- a/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/NoPIATests.cs +++ b/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/NoPIATests.cs @@ -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 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 exePIA; + ImmutableArray pdbPIA; ImmutableArray 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 exeA; + ImmutableArray pdbA; ImmutableArray 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 exeB; + ImmutableArray pdbB; ImmutableArray 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.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())) { diff --git a/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/PseudoVariableTests.cs b/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/PseudoVariableTests.cs index 520969f5e1e..109e57c0e9c 100644 --- a/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/PseudoVariableTests.cs +++ b/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/PseudoVariableTests.cs @@ -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(); } }"; - 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 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>), typeof(B[]>) + var runtime = CreateRuntimeInstance(compilationB1, new[] { MscorlibRef, compilationA2.EmitToImageReference() }); + + // typeof(Exception), typeof(A>), typeof(B[]>) 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 exeA; + ImmutableArray pdbA; ImmutableArray 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 exeB; + ImmutableArray pdbB; ImmutableArray referencesB; compilationB.EmitAndGetReferences(out exeB, out pdbB, out referencesB); var metadataB = AssemblyMetadata.CreateFromImage(exeB); @@ -1046,8 +1041,8 @@ static void Main() var modulesBuilder = ArrayBuilder.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())) diff --git a/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/ReferencedModulesTests.cs b/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/ReferencedModulesTests.cs index e613e42dcd7..87e7900a7de 100644 --- a/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/ReferencedModulesTests.cs +++ b/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/ReferencedModulesTests.cs @@ -135,157 +135,141 @@ static void M() ImmutableArray.Create(mscorlibIdentity, identityAS2, identityBS2)); // Assembly C, multiple versions, not strong name. - var assemblyNameC = ExpressionCompilerUtilities.GenerateUniqueName(); var compilationCN1 = CreateCompilation( - new AssemblyIdentity(assemblyNameC, new Version(1, 1, 1, 1)), + new AssemblyIdentity("C", new Version(1, 1, 1, 1)), new[] { sourceC }, references: new[] { MscorlibRef, referenceBS1 }, options: TestOptions.DebugDll); - byte[] exeBytesC1; - byte[] pdbBytesC1; - ImmutableArray references; - compilationCN1.EmitAndGetReferences(out exeBytesC1, out pdbBytesC1, out references); - var compilationCN2 = CreateCompilation( - new AssemblyIdentity(assemblyNameC, new Version(2, 1, 1, 1)), - new[] { sourceC }, - references: new[] { MscorlibRef, referenceBS2 }, - options: TestOptions.DebugDll); - byte[] exeBytesC2; - byte[] pdbBytesC2; - compilationCN1.EmitAndGetReferences(out exeBytesC2, out pdbBytesC2, out references); // Duplicate assemblies, target module referencing BS1. - using (var runtime = CreateRuntimeInstance( - assemblyNameC, - ImmutableArray.Create(MscorlibRef, referenceAS1, referenceAS2, referenceBS2, referenceBS1, referenceBS2), - exeBytesC1, - SymReaderFactory.CreateReader(pdbBytesC1))) - { - ImmutableArray typeBlocks; - ImmutableArray methodBlocks; - Guid moduleVersionId; - ISymUnmanagedReader symReader; - int typeToken; - int methodToken; - int localSignatureToken; - GetContextState(runtime, "C", out typeBlocks, out moduleVersionId, out symReader, out typeToken, out localSignatureToken); - GetContextState(runtime, "C.M", out methodBlocks, out moduleVersionId, out symReader, out methodToken, out localSignatureToken); - uint ilOffset = ExpressionCompilerTestHelpers.GetOffset(methodToken, symReader); - - // Compile expression with type context with all modules. - var context = EvaluationContext.CreateTypeContext( - default(CSharpMetadataContext), - typeBlocks, - moduleVersionId, - typeToken); - string error; - // A is ambiguous. - var testData = new CompilationTestData(); - context.CompileExpression("new A()", out error, testData); - Assert.True(error.StartsWith("error CS0433: The type 'A' exists in both ")); - testData = new CompilationTestData(); - // B is ambiguous. - context.CompileExpression("new B()", out error, testData); - Assert.True(error.StartsWith("error CS0433: The type 'B' exists in both ")); - var previous = new CSharpMetadataContext(typeBlocks, context); - - // Compile expression with type context with referenced modules only. - context = EvaluationContext.CreateTypeContext( - typeBlocks.ToCompilationReferencedModulesOnly(moduleVersionId), - moduleVersionId, - typeToken); - // A is unrecognized since there were no direct references to AS1 or AS2. - testData = new CompilationTestData(); - context.CompileExpression("new A()", out error, testData); - Assert.Equal(error, "error CS0246: The type or namespace name 'A' could not be found (are you missing a using directive or an assembly reference?)"); - testData = new CompilationTestData(); - // B should be resolved to BS2. - context.CompileExpression("new B()", out error, testData); - var methodData = testData.GetMethodData("<>x.<>m0"); - methodData.VerifyIL( + var runtime = CreateRuntimeInstance( + compilationCN1, + new[] { MscorlibRef, referenceAS1, referenceAS2, referenceBS2, referenceBS1, referenceBS2 }); + + ImmutableArray typeBlocks; + ImmutableArray methodBlocks; + Guid moduleVersionId; + ISymUnmanagedReader symReader; + int typeToken; + int methodToken; + int localSignatureToken; + GetContextState(runtime, "C", out typeBlocks, out moduleVersionId, out symReader, out typeToken, out localSignatureToken); + GetContextState(runtime, "C.M", out methodBlocks, out moduleVersionId, out symReader, out methodToken, out localSignatureToken); + uint ilOffset = ExpressionCompilerTestHelpers.GetOffset(methodToken, symReader); + + // Compile expression with type context with all modules. + var context = EvaluationContext.CreateTypeContext( + default(CSharpMetadataContext), + typeBlocks, + moduleVersionId, + typeToken); + string error; + // A is ambiguous. + var testData = new CompilationTestData(); + context.CompileExpression("new A()", out error, testData); + Assert.True(error.StartsWith("error CS0433: The type 'A' exists in both ")); + testData = new CompilationTestData(); + // B is ambiguous. + context.CompileExpression("new B()", out error, testData); + Assert.True(error.StartsWith("error CS0433: The type 'B' exists in both ")); + var previous = new CSharpMetadataContext(typeBlocks, context); + + // Compile expression with type context with referenced modules only. + context = EvaluationContext.CreateTypeContext( + typeBlocks.ToCompilationReferencedModulesOnly(moduleVersionId), + moduleVersionId, + typeToken); + // A is unrecognized since there were no direct references to AS1 or AS2. + testData = new CompilationTestData(); + context.CompileExpression("new A()", out error, testData); + Assert.Equal(error, "error CS0246: The type or namespace name 'A' could not be found (are you missing a using directive or an assembly reference?)"); + testData = new CompilationTestData(); + // B should be resolved to BS2. + context.CompileExpression("new B()", out error, testData); + var methodData = testData.GetMethodData("<>x.<>m0"); + methodData.VerifyIL( @"{ - // Code size 6 (0x6) - .maxstack 1 - IL_0000: newobj ""B..ctor()"" - IL_0005: ret +// Code size 6 (0x6) +.maxstack 1 +IL_0000: newobj ""B..ctor()"" +IL_0005: ret }"); - Assert.Equal(methodData.Method.ReturnType.ContainingAssembly.ToDisplayString(), identityBS2.GetDisplayName()); - // B.F should result in missing assembly AS2 since there were no direct references to AS2. - ResultProperties resultProperties; - ImmutableArray missingAssemblyIdentities; - testData = new CompilationTestData(); - context.CompileExpression( - "(new B()).F", - DkmEvaluationFlags.None, - NoAliases, - DebuggerDiagnosticFormatter.Instance, - out resultProperties, - out error, - out missingAssemblyIdentities, - EnsureEnglishUICulture.PreferredOrNull, - testData); - AssertEx.Equal(missingAssemblyIdentities, ImmutableArray.Create(identityAS2)); - - // Compile expression with method context with all modules. - context = EvaluationContext.CreateMethodContext( - previous, - methodBlocks, - symReader, - moduleVersionId, - methodToken: methodToken, - methodVersion: 1, - ilOffset: ilOffset, - localSignatureToken: localSignatureToken); - Assert.Equal(previous.Compilation, context.Compilation); // re-use type context compilation - testData = new CompilationTestData(); - // A is ambiguous. - testData = new CompilationTestData(); - context.CompileExpression("new A()", out error, testData); - Assert.True(error.StartsWith("error CS0433: The type 'A' exists in both ")); - testData = new CompilationTestData(); - // B is ambiguous. - context.CompileExpression("new B()", out error, testData); - Assert.True(error.StartsWith("error CS0433: The type 'B' exists in both ")); - - // Compile expression with method context with referenced modules only. - context = EvaluationContext.CreateMethodContext( - methodBlocks.ToCompilationReferencedModulesOnly(moduleVersionId), - symReader, - moduleVersionId, - methodToken: methodToken, - methodVersion: 1, - ilOffset: ilOffset, - localSignatureToken: localSignatureToken); - // A is unrecognized since there were no direct references to AS1 or AS2. - testData = new CompilationTestData(); - context.CompileExpression("new A()", out error, testData); - Assert.Equal(error, "error CS0246: The type or namespace name 'A' could not be found (are you missing a using directive or an assembly reference?)"); - testData = new CompilationTestData(); - // B should be resolved to BS2. - context.CompileExpression("new B()", out error, testData); - methodData = testData.GetMethodData("<>x.<>m0"); - methodData.VerifyIL( + Assert.Equal(methodData.Method.ReturnType.ContainingAssembly.ToDisplayString(), identityBS2.GetDisplayName()); + // B.F should result in missing assembly AS2 since there were no direct references to AS2. + ResultProperties resultProperties; + ImmutableArray missingAssemblyIdentities; + testData = new CompilationTestData(); + context.CompileExpression( + "(new B()).F", + DkmEvaluationFlags.None, + NoAliases, + DebuggerDiagnosticFormatter.Instance, + out resultProperties, + out error, + out missingAssemblyIdentities, + EnsureEnglishUICulture.PreferredOrNull, + testData); + AssertEx.Equal(missingAssemblyIdentities, ImmutableArray.Create(identityAS2)); + + // Compile expression with method context with all modules. + context = EvaluationContext.CreateMethodContext( + previous, + methodBlocks, + symReader, + moduleVersionId, + methodToken: methodToken, + methodVersion: 1, + ilOffset: ilOffset, + localSignatureToken: localSignatureToken); + Assert.Equal(previous.Compilation, context.Compilation); // re-use type context compilation + testData = new CompilationTestData(); + // A is ambiguous. + testData = new CompilationTestData(); + context.CompileExpression("new A()", out error, testData); + Assert.True(error.StartsWith("error CS0433: The type 'A' exists in both ")); + testData = new CompilationTestData(); + // B is ambiguous. + context.CompileExpression("new B()", out error, testData); + Assert.True(error.StartsWith("error CS0433: The type 'B' exists in both ")); + + // Compile expression with method context with referenced modules only. + context = EvaluationContext.CreateMethodContext( + methodBlocks.ToCompilationReferencedModulesOnly(moduleVersionId), + symReader, + moduleVersionId, + methodToken: methodToken, + methodVersion: 1, + ilOffset: ilOffset, + localSignatureToken: localSignatureToken); + // A is unrecognized since there were no direct references to AS1 or AS2. + testData = new CompilationTestData(); + context.CompileExpression("new A()", out error, testData); + Assert.Equal(error, "error CS0246: The type or namespace name 'A' could not be found (are you missing a using directive or an assembly reference?)"); + testData = new CompilationTestData(); + // B should be resolved to BS2. + context.CompileExpression("new B()", out error, testData); + methodData = testData.GetMethodData("<>x.<>m0"); + methodData.VerifyIL( @"{ - // Code size 6 (0x6) - .maxstack 1 - IL_0000: newobj ""B..ctor()"" - IL_0005: ret +// Code size 6 (0x6) +.maxstack 1 +IL_0000: newobj ""B..ctor()"" +IL_0005: ret }"); - Assert.Equal(methodData.Method.ReturnType.ContainingAssembly.ToDisplayString(), identityBS2.GetDisplayName()); - // B.F should result in missing assembly AS2 since there were no direct references to AS2. - testData = new CompilationTestData(); - context.CompileExpression( - "(new B()).F", - DkmEvaluationFlags.None, - NoAliases, - DebuggerDiagnosticFormatter.Instance, - out resultProperties, - out error, - out missingAssemblyIdentities, - EnsureEnglishUICulture.PreferredOrNull, - testData); - AssertEx.Equal(missingAssemblyIdentities, ImmutableArray.Create(identityAS2)); - } + Assert.Equal(methodData.Method.ReturnType.ContainingAssembly.ToDisplayString(), identityBS2.GetDisplayName()); + // B.F should result in missing assembly AS2 since there were no direct references to AS2. + testData = new CompilationTestData(); + context.CompileExpression( + "(new B()).F", + DkmEvaluationFlags.None, + NoAliases, + DebuggerDiagnosticFormatter.Instance, + out resultProperties, + out error, + out missingAssemblyIdentities, + EnsureEnglishUICulture.PreferredOrNull, + testData); + AssertEx.Equal(missingAssemblyIdentities, ImmutableArray.Create(identityAS2)); } private static void VerifyAssemblyReferences( @@ -351,22 +335,22 @@ static void M() }"; var assemblyNameA = ExpressionCompilerUtilities.GenerateUniqueName(); var compilationA = CreateCompilationWithMscorlibAndSystemCore(sourceA, options: TestOptions.DebugDll, assemblyName: assemblyNameA); - byte[] exeBytesA; - byte[] pdbBytesA; + ImmutableArray exeBytesA; + ImmutableArray pdbBytesA; ImmutableArray referencesA; compilationA.EmitAndGetReferences(out exeBytesA, out pdbBytesA, out referencesA); var referenceA = AssemblyMetadata.CreateFromImage(exeBytesA).GetReference(display: assemblyNameA); var identityA = referenceA.GetAssemblyIdentity(); - var moduleA = referenceA.ToModuleInstance(exeBytesA, SymReaderFactory.CreateReader(pdbBytesA)); + var moduleA = referenceA.ToModuleInstance(exeBytesA.ToArray(), SymReaderFactory.CreateReader(pdbBytesA)); var assemblyNameB = ExpressionCompilerUtilities.GenerateUniqueName(); var compilationB = CreateCompilationWithMscorlibAndSystemCore(sourceB, options: TestOptions.DebugDll, assemblyName: assemblyNameB, references: new[] { referenceA }); - byte[] exeBytesB; - byte[] pdbBytesB; + ImmutableArray exeBytesB; + ImmutableArray pdbBytesB; ImmutableArray referencesB; compilationB.EmitAndGetReferences(out exeBytesB, out pdbBytesB, out referencesB); var referenceB = AssemblyMetadata.CreateFromImage(exeBytesB).GetReference(display: assemblyNameB); - var moduleB = referenceB.ToModuleInstance(exeBytesB, SymReaderFactory.CreateReader(pdbBytesB)); + var moduleB = referenceB.ToModuleInstance(exeBytesB.ToArray(), SymReaderFactory.CreateReader(pdbBytesB)); var moduleBuilder = ArrayBuilder.GetInstance(); moduleBuilder.AddRange(referencesA.Select(r => r.ToModuleInstance(null, null))); @@ -487,13 +471,13 @@ class C references: new MetadataReference[] { SystemRuntimePP7Ref }, options: TestOptions.DebugDll, assemblyName: assemblyNameA); - byte[] exeBytesA; - byte[] pdbBytesA; + ImmutableArray exeBytesA; + ImmutableArray pdbBytesA; ImmutableArray referencesA; compilationA.EmitAndGetReferences(out exeBytesA, out pdbBytesA, out referencesA); var referenceA = AssemblyMetadata.CreateFromImage(exeBytesA).GetReference(display: assemblyNameA); var identityA = referenceA.GetAssemblyIdentity(); - var moduleA = referenceA.ToModuleInstance(exeBytesA, SymReaderFactory.CreateReader(pdbBytesA)); + var moduleA = referenceA.ToModuleInstance(exeBytesA.ToArray(), SymReaderFactory.CreateReader(pdbBytesA)); var assemblyNameB = ExpressionCompilerUtilities.GenerateUniqueName(); var compilationB = CreateCompilation( @@ -501,12 +485,12 @@ class C references: new MetadataReference[] { SystemRuntimePP7Ref, referenceA }, options: TestOptions.DebugDll, assemblyName: assemblyNameB); - byte[] exeBytesB; - byte[] pdbBytesB; + ImmutableArray exeBytesB; + ImmutableArray pdbBytesB; ImmutableArray referencesB; compilationB.EmitAndGetReferences(out exeBytesB, out pdbBytesB, out referencesB); var referenceB = AssemblyMetadata.CreateFromImage(exeBytesB).GetReference(display: assemblyNameB); - var moduleB = referenceB.ToModuleInstance(exeBytesB, SymReaderFactory.CreateReader(pdbBytesB)); + var moduleB = referenceB.ToModuleInstance(exeBytesB.ToArray(), SymReaderFactory.CreateReader(pdbBytesB)); // Include an empty assembly to verify that not all assemblies // with no references are treated as mscorlib. @@ -675,22 +659,22 @@ static void M(A a) }"; var assemblyNameA = ExpressionCompilerUtilities.GenerateUniqueName(); var compilationA = CreateCompilationWithMscorlibAndSystemCore(sourceA, options: TestOptions.DebugDll, assemblyName: assemblyNameA); - byte[] exeBytesA; - byte[] pdbBytesA; + ImmutableArray exeBytesA; + ImmutableArray pdbBytesA; ImmutableArray referencesA; compilationA.EmitAndGetReferences(out exeBytesA, out pdbBytesA, out referencesA); var referenceA = AssemblyMetadata.CreateFromImage(exeBytesA).GetReference(display: assemblyNameA); var identityA = referenceA.GetAssemblyIdentity(); - var moduleA = referenceA.ToModuleInstance(exeBytesA, SymReaderFactory.CreateReader(pdbBytesA)); + var moduleA = referenceA.ToModuleInstance(exeBytesA.ToArray(), SymReaderFactory.CreateReader(pdbBytesA)); var assemblyNameB = ExpressionCompilerUtilities.GenerateUniqueName(); var compilationB = CreateCompilationWithMscorlibAndSystemCore(sourceB, options: TestOptions.DebugDll, assemblyName: assemblyNameB, references: new[] { referenceA }); - byte[] exeBytesB; - byte[] pdbBytesB; + ImmutableArray exeBytesB; + ImmutableArray pdbBytesB; ImmutableArray referencesB; compilationB.EmitAndGetReferences(out exeBytesB, out pdbBytesB, out referencesB); var referenceB = AssemblyMetadata.CreateFromImage(exeBytesB).GetReference(display: assemblyNameB); - var moduleB = referenceB.ToModuleInstance(exeBytesB, SymReaderFactory.CreateReader(pdbBytesB)); + var moduleB = referenceB.ToModuleInstance(exeBytesB.ToArray(), SymReaderFactory.CreateReader(pdbBytesB)); var moduleBuilder = ArrayBuilder.GetInstance(); moduleBuilder.AddRange(referencesA.Select(r => r.ToModuleInstance(null, null))); diff --git a/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/ResultPropertiesTests.cs b/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/ResultPropertiesTests.cs index f76b1f80565..bbe254a1eed 100644 --- a/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/ResultPropertiesTests.cs +++ b/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/ResultPropertiesTests.cs @@ -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); diff --git a/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/UsingDebugInfoTests.cs b/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/UsingDebugInfoTests.cs index b82c54f6dad..bfb2918434e 100644 --- a/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/UsingDebugInfoTests.cs +++ b/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/UsingDebugInfoTests.cs @@ -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 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 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 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 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 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 unused; var comp1 = CreateCompilation(source1, new[] { MscorlibRef_v20 }, TestOptions.DebugDll, assemblyName: "A"); - byte[] dllBytes1; - byte[] pdbBytes1; + ImmutableArray dllBytes1; + ImmutableArray 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 dllBytes2; + ImmutableArray pdbBytes2; comp2.EmitAndGetReferences(out dllBytes2, out pdbBytes2, out unused); var ref2 = AssemblyMetadata.CreateFromImage(dllBytes2).GetReference(display: "B"); var modulesBuilder = ArrayBuilder.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)); diff --git a/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/WinMdTests.cs b/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/WinMdTests.cs index 2f661ee3833..a32131f2e95 100644 --- a/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/WinMdTests.cs +++ b/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/WinMdTests.cs @@ -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 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 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 compileReferences, - ImmutableArray runtimeReferences) - { - var compilation0 = CreateCompilationWithMscorlib( - source, - options: TestOptions.DebugDll, - assemblyName: ExpressionCompilerUtilities.GenerateUniqueName(), - references: compileReferences); - byte[] exeBytes; - byte[] pdbBytes; - ImmutableArray 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); diff --git a/src/ExpressionEvaluator/Core/Test/ExpressionCompiler/ExpressionCompilerTestHelpers.cs b/src/ExpressionEvaluator/Core/Test/ExpressionCompiler/ExpressionCompilerTestHelpers.cs index 26873b68001..0222138eeba 100644 --- a/src/ExpressionEvaluator/Core/Test/ExpressionCompiler/ExpressionCompilerTestHelpers.cs +++ b/src/ExpressionEvaluator/Core/Test/ExpressionCompiler/ExpressionCompilerTestHelpers.cs @@ -398,16 +398,14 @@ internal static ImmutableArray GetLocalNames(this ISymUnmanagedReader sy internal static void EmitAndGetReferences( this Compilation compilation, - out byte[] exeBytes, - out byte[] pdbBytes, + out ImmutableArray exeBytes, + out ImmutableArray pdbBytes, out ImmutableArray 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 GetEmittedReferences(this Compilation compilation, ImmutableArray 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 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)); diff --git a/src/ExpressionEvaluator/Core/Test/ExpressionCompiler/RuntimeInstance.cs b/src/ExpressionEvaluator/Core/Test/ExpressionCompiler/RuntimeInstance.cs index 36b8a6a1852..f818c8f7858 100644 --- a/src/ExpressionEvaluator/Core/Test/ExpressionCompiler/RuntimeInstance.cs +++ b/src/ExpressionEvaluator/Core/Test/ExpressionCompiler/RuntimeInstance.cs @@ -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 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 references, + IEnumerable references, ImmutableArray peImage, ISymUnmanagedReader symReaderOpt, + string assemblyName = null, bool includeLocalSignatures = true) { var exeReference = AssemblyMetadata.CreateFromImage(peImage).GetReference(display: assemblyName); diff --git a/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/ExpressionCompilerTestBase.vb b/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/ExpressionCompilerTestBase.vb index b9bff0ef613..388d4240271 100644 --- a/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/ExpressionCompilerTestBase.vb +++ b/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/ExpressionCompilerTestBase.vb @@ -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 diff --git a/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/ExpressionCompilerTests.vb b/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/ExpressionCompilerTests.vb index f0de01e7107..42273546f9a 100644 --- a/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/ExpressionCompilerTests.vb +++ b/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/ExpressionCompilerTests.vb @@ -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 diff --git a/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/HoistedMeTests.vb b/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/HoistedMeTests.vb index a5709296521..7f3245e4a34 100644 --- a/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/HoistedMeTests.vb +++ b/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/HoistedMeTests.vb @@ -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) diff --git a/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/ImportDebugInfoTests.vb b/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/ImportDebugInfoTests.vb index e8ae525f4b8..ad0ef65cb2c 100644 --- a/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/ImportDebugInfoTests.vb +++ b/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/ImportDebugInfoTests.vb @@ -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)) diff --git a/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/LocalsTests.vb b/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/LocalsTests.vb index 29700d6c15e..8502827bbf2 100644 --- a/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/LocalsTests.vb +++ b/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/LocalsTests.vb @@ -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() diff --git a/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/MissingAssemblyTests.vb b/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/MissingAssemblyTests.vb index ba60eec0efe..6d38f19083a 100644 --- a/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/MissingAssemblyTests.vb +++ b/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/MissingAssemblyTests.vb @@ -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 diff --git a/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/PseudoVariableTests.vb b/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/PseudoVariableTests.vb index 476ac949633..bd242720e4e 100644 --- a/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/PseudoVariableTests.vb +++ b/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/PseudoVariableTests.vb @@ -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()) diff --git a/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/ReferencedModulesTests.vb b/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/ReferencedModulesTests.vb index dd28f5ce2d0..1c7f0840557 100644 --- a/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/ReferencedModulesTests.vb +++ b/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/ReferencedModulesTests.vb @@ -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 @@ -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 diff --git a/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/ResultPropertiesTests.vb b/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/ResultPropertiesTests.vb index 2622a6f40cb..19c638fa4d4 100644 --- a/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/ResultPropertiesTests.vb +++ b/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/ResultPropertiesTests.vb @@ -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) diff --git a/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/WinMdTests.vb b/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/WinMdTests.vb index e61314aa285..4b9e526d64c 100644 --- a/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/WinMdTests.vb +++ b/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/WinMdTests.vb @@ -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 -- GitLab