Exemplo n.º 1
0
 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));
 }
Exemplo n.º 2
0
 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 });
Exemplo n.º 3
0
        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));
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 6
0
        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
}
"
                );
        }