Categories
.NET Varios

Error en compilador de mono para VB.NET

Si bien es cierto que este compilador tpdavía está en fase alpha, falla con el siguiente ejemplo:

vbnet:

Imports System

Public Class Foo
        Public Shared Sub Main()
                Dummy(Console.WriteLine())
        End Sub
        Public Shared Sub Dummy(ByVal x as String)
        End Sub
End Class

Como saben, el código mostrado inicialmente no debería compilar, sabiendo que el método WriteLine de la clase Console, no devuelve nada.

Observando el IL generado para el método Main, hay alguna pista del porque se compila sin problemas

code:

// method line 2
    .method public static
           default void Main ()  cil managed
    {
        // Method begins at RVA 0x2100
        .entrypoint
        // Code size 21 (0x15)
        .maxstack 3
        .locals init (
                object[]        V_0,
                string[]        V_1,
                bool[]  V_2)
        IL_0000:  call void class [mscorlib]System.Console::WriteLine()
        IL_0005:  box [mscorlib]System.Void
        IL_000a:  call string class [Microsoft.VisualBasic]Microsoft.VisualBasic.CompilerServices.StringType::FromObject(object)
        IL_000f:  call void class Foo::Dummy(string)
        IL_0014:  ret
    } // end of method Foo::default void Main ()

No soy ningún experto en IL, pero al parecer hace un boxing del tipo System.Void a un objecto (me parece que ahí­ es donde debería mandar el error de compilación)y luego intenta convertir ese objeto a un string.

Estuve intentando determinar donde exáctamente se produce este error, pero sin resultados satisfactorios :(, por lo pronto sólo he reportado el bug.