protected VisualBasic.VisualBasicCompilation CreateVisualBasicCompilation( string code, VisualBasic.VisualBasicParseOptions parseOptions = null, VisualBasic.VisualBasicCompilationOptions compilationOptions = null, string assemblyName = null, IEnumerable <MetadataReference> referencedAssemblies = null) { return(CreateVisualBasicCompilation(assemblyName, code, parseOptions, compilationOptions, referencedAssemblies, referencedCompilations: null)); }
protected VisualBasic.VisualBasicCompilation CreateVisualBasicCompilation( string assemblyName, string code, VisualBasic.VisualBasicParseOptions parseOptions = null, VisualBasic.VisualBasicCompilationOptions compilationOptions = null, IEnumerable <MetadataReference> referencedAssemblies = null, IEnumerable <Compilation> referencedCompilations = null, Encoding encoding = null, string sourceFileName = null) => CreateVisualBasicCompilation(assemblyName, new[] { code }, parseOptions, compilationOptions, referencedAssemblies, referencedCompilations, encoding, new[] { sourceFileName });
protected VisualBasic.VisualBasicCompilation CreateVisualBasicCompilation( string assemblyName, string[] files, VisualBasic.VisualBasicParseOptions parseOptions = null, VisualBasic.VisualBasicCompilationOptions compilationOptions = null, IEnumerable <MetadataReference> referencedAssemblies = null, IEnumerable <Compilation> referencedCompilations = null, Encoding encoding = null, string[] sourceFileNames = null) { Debug.Assert(sourceFileNames == null || sourceFileNames.Length == files.Length); if (assemblyName == null) { assemblyName = GetUniqueName(); } if (parseOptions == null) { parseOptions = VisualBasic.VisualBasicParseOptions.Default; } if (compilationOptions == null) { compilationOptions = new VisualBasic.VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary); } compilationOptions = compilationOptions.WithParseOptions(parseOptions); var references = new List <MetadataReference>(); if (referencedAssemblies == null) { references.Add(MscorlibRef); references.Add(SystemRef); references.Add(SystemCoreRef); references.Add(MsvbRef); references.Add(SystemXmlRef); references.Add(SystemXmlLinqRef); } else { references.AddRange(referencedAssemblies); } AddReferencedCompilations(referencedCompilations, references); var trees = new SyntaxTree[files.Length]; for (int i = 0; i < files.Length; i++) { trees[i] = VisualBasic.VisualBasicSyntaxTree.ParseText(files[i], options: parseOptions, encoding: encoding, path: sourceFileNames?[i]); } return(VisualBasic.VisualBasicCompilation.Create(assemblyName, trees, references, compilationOptions)); }
protected VisualBasic.VisualBasicCompilation CreateVisualBasicCompilation( string assemblyName, string code, VisualBasic.VisualBasicParseOptions parseOptions = null, VisualBasic.VisualBasicCompilationOptions compilationOptions = null, IEnumerable <MetadataReference> referencedAssemblies = null, IEnumerable <Compilation> referencedCompilations = null, Encoding encoding = null, string sourceFileName = null) { if (assemblyName == null) { assemblyName = GetUniqueName(); } if (parseOptions == null) { parseOptions = VisualBasic.VisualBasicParseOptions.Default; } if (compilationOptions == null) { compilationOptions = new VisualBasic.VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary); } compilationOptions = compilationOptions.WithParseOptions(parseOptions); var references = new List <MetadataReference>(); if (referencedAssemblies == null) { references.Add(MscorlibRef); references.Add(SystemRef); references.Add(SystemCoreRef); references.Add(MsvbRef); references.Add(SystemXmlRef); references.Add(SystemXmlLinqRef); } else { references.AddRange(referencedAssemblies); } AddReferencedCompilations(referencedCompilations, references); var tree = VisualBasic.VisualBasicSyntaxTree.ParseText(code, options: parseOptions, encoding: encoding, path: sourceFileName); return(VisualBasic.VisualBasicCompilation.Create(assemblyName, new[] { tree }, references, compilationOptions)); }
protected VisualBasic.VisualBasicCompilation CreateVisualBasicCompilation( string assemblyName, string code, VisualBasic.VisualBasicParseOptions parseOptions = null, VisualBasic.VisualBasicCompilationOptions compilationOptions = null, IEnumerable<MetadataReference> referencedAssemblies = null, IEnumerable<Compilation> referencedCompilations = null) { if (assemblyName == null) { assemblyName = GetUniqueName(); } if (parseOptions == null) { parseOptions = VisualBasic.VisualBasicParseOptions.Default; } if (compilationOptions == null) { compilationOptions = new VisualBasic.VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary); } var references = new List<MetadataReference>(); if (referencedAssemblies == null) { references.Add(MscorlibRef); references.Add(SystemRef); references.Add(SystemCoreRef); references.Add(MsvbRef); references.Add(SystemXmlRef); references.Add(SystemXmlLinqRef); } else { references.AddRange(referencedAssemblies); } AddReferencedCompilations(referencedCompilations, references); var tree = VisualBasic.VisualBasicSyntaxTree.ParseText(code, options: parseOptions); return VisualBasic.VisualBasicCompilation.Create(assemblyName, new[] { tree }, references, compilationOptions); }
public void VbOverrideOfCSharpCovariantReturn_02() { var cSharpSource = @" public class Base { public virtual object M() => ""Base.M""; public virtual object P => ""Base.P""; public virtual object this[int i] => ""Base[]""; } public abstract class Derived : Base { public override string M() => ""Derived.M""; public override string P => ""Derived.P""; public override string this[int i] => ""Derived[]""; } "; var csharpCompilation = CreateCovariantCompilation(cSharpSource).VerifyDiagnostics(); var csharpReference = csharpCompilation.EmitToImageReference(); var vbSource = @" Imports System Public Class Derived2 : Inherits Derived Public Overrides Function M() As String Return ""Derived2.M"" End Function Public Overrides ReadOnly Property P As String Get Return ""Derived2.P"" End Get End Property Public Overrides Default ReadOnly Property Item(i As Integer) As String Get Return ""Derived2[]"" End Get End Property Public Shared Sub Test(b As Base, d As Derived, d2 As Derived2) Console.WriteLine(b.M().ToString()) Console.WriteLine(b.P.ToString()) Console.WriteLine(b(0).ToString()) Console.WriteLine(d.M()) Console.WriteLine(d.P) Console.WriteLine(d(0)) Console.WriteLine(d2.M()) Console.WriteLine(d2.P) Console.WriteLine(d2(0)) End Sub public Shared Sub Main() Dim d2 = new Derived2 Test(d2, d2, d2) End Sub End Class "; var compilationOptions = new VisualBasic.VisualBasicCompilationOptions( OutputKind.ConsoleApplication ).WithOptimizationLevel(OptimizationLevel.Release); var vbCompilation = CreateVisualBasicCompilation( vbSource, compilationOptions: compilationOptions, referencedAssemblies: new[] { CorelibraryWithCovariantReturnSupport, csharpReference } ) .VerifyDiagnostics(); var expectedOutput = !ExecutionConditionUtil.RuntimeSupportsCovariantReturnsOfClasses ? null : @" Derived2.M Derived2.P Derived2[] Derived2.M Derived2.P Derived2[] Derived2.M Derived2.P Derived2[]"; CompileAndVerify( vbCompilation, verify: Verification.Skipped, expectedOutput: expectedOutput ) .VerifyIL( "Derived2.Test", @" { // Code size 118 (0x76) .maxstack 2 IL_0000: ldarg.0 IL_0001: callvirt ""Function Base.M() As Object"" IL_0006: callvirt ""Function Object.ToString() As String"" IL_000b: call ""Sub System.Console.WriteLine(String)"" IL_0010: ldarg.0 IL_0011: callvirt ""Function Base.get_P() As Object"" IL_0016: callvirt ""Function Object.ToString() As String"" IL_001b: call ""Sub System.Console.WriteLine(String)"" IL_0020: ldarg.0 IL_0021: ldc.i4.0 IL_0022: callvirt ""Function Base.get_Item(Integer) As Object"" IL_0027: callvirt ""Function Object.ToString() As String"" IL_002c: call ""Sub System.Console.WriteLine(String)"" IL_0031: ldarg.1 IL_0032: callvirt ""Function Derived.M() As String"" IL_0037: call ""Sub System.Console.WriteLine(String)"" IL_003c: ldarg.1 IL_003d: callvirt ""Function Derived.get_P() As String"" IL_0042: call ""Sub System.Console.WriteLine(String)"" IL_0047: ldarg.1 IL_0048: ldc.i4.0 IL_0049: callvirt ""Function Derived.get_Item(Integer) As String"" IL_004e: call ""Sub System.Console.WriteLine(String)"" IL_0053: ldarg.2 IL_0054: callvirt ""Function Derived2.M() As String"" IL_0059: call ""Sub System.Console.WriteLine(String)"" IL_005e: ldarg.2 IL_005f: callvirt ""Function Derived2.get_P() As String"" IL_0064: call ""Sub System.Console.WriteLine(String)"" IL_0069: ldarg.2 IL_006a: ldc.i4.0 IL_006b: callvirt ""Function Derived2.get_Item(Integer) As String"" IL_0070: call ""Sub System.Console.WriteLine(String)"" IL_0075: ret } " ); }