File: CodeGen\CodeGenWinMdEvents.vb
Web Access
Project: src\src\Compilers\VisualBasic\Test\Emit\Microsoft.CodeAnalysis.VisualBasic.Emit.UnitTests.vbproj (Microsoft.CodeAnalysis.VisualBasic.Emit.UnitTests)
' Licensed to the .NET Foundation under one or more agreements.
' The .NET Foundation licenses this file to you under the MIT license.
' See the LICENSE file in the project root for more information.
 
Imports Microsoft.CodeAnalysis.VisualBasic
Imports Roslyn.Test.Utilities
Imports Basic.Reference.Assemblies
 
Namespace Microsoft.CodeAnalysis.VisualBasic.UnitTests
    Public Class CodeGenWinMdEvents
        Inherits BasicTestBase
 
        <Fact()>
        Public Sub MissingReferences_SynthesizedAccessors()
            Dim source =
                <compilation name="MissingReferences">
                    <file name="a.vb">
Class C
    Event E As System.Action
End Class
                    </file>
                </compilation>
 
            Dim comp = CreateCompilationWithMscorlib40(source, OutputKind.WindowsRuntimeMetadata)
 
            ' 3 for the backing field and each accessor.
            comp.VerifyDiagnostics(
                Diagnostic(ERRID.ERR_TypeRefResolutionError3, "E").WithArguments("System.Runtime.InteropServices.WindowsRuntime.EventRegistrationTokenTable(Of )", "MissingReferences.winmdobj"),
                Diagnostic(ERRID.ERR_TypeRefResolutionError3, "E").WithArguments("System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken", "MissingReferences.winmdobj"),
                Diagnostic(ERRID.ERR_TypeRefResolutionError3, "E").WithArguments("System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken", "MissingReferences.winmdobj"))
 
            ' Throws *test* exception, but does not assert or throw produce exception.
            Assert.Throws(Of EmitException)(Sub() CompileAndVerify(comp))
        End Sub
 
        <Fact()>
        Public Sub MissingReferences_AddHandler()
            Dim source =
                <compilation name="MissingReferences">
                    <file name="a.vb">
Class C
    Event E As System.Action
 
    Sub Test()
        AddHandler E, Nothing
    End Sub
End Class
                    </file>
                </compilation>
 
            Dim comp = CreateCompilationWithMscorlib40(source, OutputKind.WindowsRuntimeMetadata)
 
            ' 3 for the backing field and each accessor.
            ' 1 for the AddHandler statement
            comp.VerifyEmitDiagnostics(
                Diagnostic(ERRID.ERR_TypeRefResolutionError3, "E").WithArguments("System.Runtime.InteropServices.WindowsRuntime.EventRegistrationTokenTable(Of )", "MissingReferences.winmdobj"),
                Diagnostic(ERRID.ERR_TypeRefResolutionError3, "E").WithArguments("System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken", "MissingReferences.winmdobj"),
                Diagnostic(ERRID.ERR_TypeRefResolutionError3, "E").WithArguments("System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken", "MissingReferences.winmdobj"))
 
            ' Throws *test* exception, but does not assert or throw produce exception.
            Assert.Throws(Of EmitException)(Sub() CompileAndVerify(comp))
        End Sub
 
        <Fact()>
        Public Sub MissingReferences_RemoveHandler()
            Dim source =
                <compilation name="MissingReferences">
                    <file name="a.vb">
Class C
    Event E As System.Action
 
    Sub Test()
        RemoveHandler E, Nothing
    End Sub
End Class
                    </file>
                </compilation>
 
            Dim comp = CreateCompilationWithMscorlib40(source, OutputKind.WindowsRuntimeMetadata)
 
            ' 3 for the backing field and each accessor.
            ' 1 for the RemoveHandler statement
            comp.VerifyEmitDiagnostics(
                Diagnostic(ERRID.ERR_TypeRefResolutionError3, "E").WithArguments("System.Runtime.InteropServices.WindowsRuntime.EventRegistrationTokenTable(Of )", "MissingReferences.winmdobj"),
                Diagnostic(ERRID.ERR_TypeRefResolutionError3, "E").WithArguments("System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken", "MissingReferences.winmdobj"),
                Diagnostic(ERRID.ERR_TypeRefResolutionError3, "E").WithArguments("System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken", "MissingReferences.winmdobj"))
 
            ' Throws *test* exception, but does not assert or throw produce exception.
            Assert.Throws(Of EmitException)(Sub() CompileAndVerify(comp))
        End Sub
 
        <Fact()>
        Public Sub MissingReferences_RaiseEvent()
            Dim source =
                <compilation name="MissingReferences">
                    <file name="a.vb">
Class C
    Event E As System.Action
 
    Sub Test()
        RaiseEvent E()
    End Sub
End Class
                    </file>
                </compilation>
 
            Dim comp = CreateCompilationWithMscorlib40(source, OutputKind.WindowsRuntimeMetadata)
 
            ' 3 for the backing field and each accessor.
            ' 1 for the RaiseEvent statement
            comp.VerifyEmitDiagnostics(
                Diagnostic(ERRID.ERR_TypeRefResolutionError3, "E").WithArguments("System.Runtime.InteropServices.WindowsRuntime.EventRegistrationTokenTable(Of )", "MissingReferences.winmdobj"),
                Diagnostic(ERRID.ERR_TypeRefResolutionError3, "E").WithArguments("System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken", "MissingReferences.winmdobj"),
                Diagnostic(ERRID.ERR_TypeRefResolutionError3, "E").WithArguments("System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken", "MissingReferences.winmdobj"))
 
            ' Throws *test* exception, but does not assert or throw produce exception.
            Assert.Throws(Of EmitException)(Sub() CompileAndVerify(comp))
        End Sub
 
        <Fact()>
        Public Sub MissingReferences_RaiseEvent_MissingAccessor()
            Dim source =
                <compilation>
                    <file name="a.vb">
Class C
    Event E As System.Action
 
    Sub Test()
        RaiseEvent E()
    End Sub
End Class
 
Namespace System.Runtime.InteropServices.WindowsRuntime
    Public Structure EventRegistrationToken
    End Structure
 
    Public Class EventRegistrationTokenTable(Of T)
        Public Shared Function GetOrCreateEventRegistrationTokenTable(ByRef table As EventRegistrationTokenTable(Of T)) As EventRegistrationTokenTable(Of T)
            Return table
        End Function
 
        Public WriteOnly Property InvocationList as T
            Set (value As T)
            End Set
        End Property
 
        Public Function AddEventHandler(handler as T) as EventRegistrationToken
            Return Nothing
        End Function
 
        Public Sub RemoveEventHandler(token as EventRegistrationToken)
        End Sub
    End Class
End Namespace
                    </file>
                </compilation>
 
            Dim comp = CreateCompilationWithMscorlib40(source, OutputKind.WindowsRuntimeMetadata)
 
            ' 1 for the RaiseEvent statement
            comp.VerifyEmitDiagnostics(
                Diagnostic(ERRID.ERR_MissingRuntimeHelper, "RaiseEvent E()").WithArguments("System.Runtime.InteropServices.WindowsRuntime.EventRegistrationTokenTable`1.get_InvocationList"))
 
            ' Throws *test* exception, but does not assert or throw produce exception.
            Assert.Throws(Of EmitException)(Sub() CompileAndVerify(comp))
        End Sub
 
        <Fact>
        Public Sub MissingReferences_HandlesClause()
 
            Dim source =
<compilation name="test">
    <file name="a.vb">
Imports System.Runtime.InteropServices.WindowsRuntime
 
Delegate Sub EventDelegate()
 
Class Test
 
    WithEvents T As Test
 
    Public Event E As EventDelegate
 
    Sub Handler() Handles Me.E, T.E
 
    End Sub
 
End Class
    </file>
</compilation>
 
            Dim comp = CreateCompilationWithMscorlib40(source, OutputKind.WindowsRuntimeMetadata)
 
            ' This test is specifically interested in the ERR_MissingRuntimeHelper errors: one for each helper times one for each handled event
            comp.VerifyDiagnostics(
                Diagnostic(ERRID.WRN_UndefinedOrEmptyNamespaceOrClass1, "System.Runtime.InteropServices.WindowsRuntime").WithArguments("System.Runtime.InteropServices.WindowsRuntime"),
                Diagnostic(ERRID.ERR_TypeRefResolutionError3, "E").WithArguments("System.Runtime.InteropServices.WindowsRuntime.EventRegistrationTokenTable(Of )", "test.winmdobj"),
                Diagnostic(ERRID.ERR_TypeRefResolutionError3, "E").WithArguments("System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken", "test.winmdobj"),
                Diagnostic(ERRID.ERR_TypeRefResolutionError3, "E").WithArguments("System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken", "test.winmdobj"),
                Diagnostic(ERRID.ERR_MissingRuntimeHelper, "E").WithArguments("System.Runtime.InteropServices.WindowsRuntime.EventRegistrationTokenTable`1.AddEventHandler"),
                Diagnostic(ERRID.ERR_MissingRuntimeHelper, "E").WithArguments("System.Runtime.InteropServices.WindowsRuntime.EventRegistrationTokenTable`1.RemoveEventHandler"),
                Diagnostic(ERRID.ERR_MissingRuntimeHelper, "E").WithArguments("System.Runtime.InteropServices.WindowsRuntime.EventRegistrationTokenTable`1.AddEventHandler"),
                Diagnostic(ERRID.ERR_MissingRuntimeHelper, "E").WithArguments("System.Runtime.InteropServices.WindowsRuntime.EventRegistrationTokenTable`1.RemoveEventHandler"),
                Diagnostic(ERRID.HDN_UnusedImportStatement, "Imports System.Runtime.InteropServices.WindowsRuntime"))
 
            ' Throws *test* exception, but does not assert or throw produce exception.
            Assert.Throws(Of EmitException)(Sub() CompileAndVerify(comp))
        End Sub
 
        <Fact()>
        Public Sub InstanceFieldLikeEventAccessors()
            Dim verifier = CompileAndVerify(
    <compilation>
        <file name="a.vb">
Class C
    Event E As System.Action
End Class
    </file>
    </compilation>, WinRtRefs, options:=TestOptions.ReleaseWinMD)
 
            verifier.VerifyIL("C.add_E", <![CDATA[
{
  // Code size       18 (0x12)
  .maxstack  2
  IL_0000:  ldarg.0
  IL_0001:  ldflda     "C.EEvent As System.Runtime.InteropServices.WindowsRuntime.EventRegistrationTokenTable(Of System.Action)"
  IL_0006:  call       "Function System.Runtime.InteropServices.WindowsRuntime.EventRegistrationTokenTable(Of System.Action).GetOrCreateEventRegistrationTokenTable(ByRef System.Runtime.InteropServices.WindowsRuntime.EventRegistrationTokenTable(Of System.Action)) As System.Runtime.InteropServices.WindowsRuntime.EventRegistrationTokenTable(Of System.Action)"
  IL_000b:  ldarg.1
  IL_000c:  callvirt   "Function System.Runtime.InteropServices.WindowsRuntime.EventRegistrationTokenTable(Of System.Action).AddEventHandler(System.Action) As System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken"
  IL_0011:  ret
}
]]>)
 
            verifier.VerifyIL("C.remove_E", <![CDATA[
{
  // Code size       18 (0x12)
  .maxstack  2
  IL_0000:  ldarg.0
  IL_0001:  ldflda     "C.EEvent As System.Runtime.InteropServices.WindowsRuntime.EventRegistrationTokenTable(Of System.Action)"
  IL_0006:  call       "Function System.Runtime.InteropServices.WindowsRuntime.EventRegistrationTokenTable(Of System.Action).GetOrCreateEventRegistrationTokenTable(ByRef System.Runtime.InteropServices.WindowsRuntime.EventRegistrationTokenTable(Of System.Action)) As System.Runtime.InteropServices.WindowsRuntime.EventRegistrationTokenTable(Of System.Action)"
  IL_000b:  ldarg.1
  IL_000c:  callvirt   "Sub System.Runtime.InteropServices.WindowsRuntime.EventRegistrationTokenTable(Of System.Action).RemoveEventHandler(System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)"
  IL_0011:  ret
}
]]>)
        End Sub
 
        <Fact()>
        Public Sub SharedFieldLikeEventAccessors()
            Dim verifier = CompileAndVerify(
    <compilation>
        <file name="a.vb">
Class C
    Shared Event E As System.Action
End Class
    </file>
    </compilation>, WinRtRefs, options:=TestOptions.ReleaseWinMD)
 
            verifier.VerifyIL("C.add_E", <![CDATA[
{
  // Code size       17 (0x11)
  .maxstack  2
  IL_0000:  ldsflda    "C.EEvent As System.Runtime.InteropServices.WindowsRuntime.EventRegistrationTokenTable(Of System.Action)"
  IL_0005:  call       "Function System.Runtime.InteropServices.WindowsRuntime.EventRegistrationTokenTable(Of System.Action).GetOrCreateEventRegistrationTokenTable(ByRef System.Runtime.InteropServices.WindowsRuntime.EventRegistrationTokenTable(Of System.Action)) As System.Runtime.InteropServices.WindowsRuntime.EventRegistrationTokenTable(Of System.Action)"
  IL_000a:  ldarg.0
  IL_000b:  callvirt   "Function System.Runtime.InteropServices.WindowsRuntime.EventRegistrationTokenTable(Of System.Action).AddEventHandler(System.Action) As System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken"
  IL_0010:  ret
}
]]>)
 
            verifier.VerifyIL("C.remove_E", <![CDATA[
{
  // Code size       17 (0x11)
  .maxstack  2
  IL_0000:  ldsflda    "C.EEvent As System.Runtime.InteropServices.WindowsRuntime.EventRegistrationTokenTable(Of System.Action)"
  IL_0005:  call       "Function System.Runtime.InteropServices.WindowsRuntime.EventRegistrationTokenTable(Of System.Action).GetOrCreateEventRegistrationTokenTable(ByRef System.Runtime.InteropServices.WindowsRuntime.EventRegistrationTokenTable(Of System.Action)) As System.Runtime.InteropServices.WindowsRuntime.EventRegistrationTokenTable(Of System.Action)"
  IL_000a:  ldarg.0
  IL_000b:  callvirt   "Sub System.Runtime.InteropServices.WindowsRuntime.EventRegistrationTokenTable(Of System.Action).RemoveEventHandler(System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)"
  IL_0010:  ret
}
]]>)
        End Sub
 
        <Fact()>
        Public Sub AddAndRemoveHandlerStatements()
            Dim verifier = CompileAndVerify(
    <compilation>
        <file name="a.vb">
Class C
    Public Event InstanceEvent As System.Action
    Public Shared Event SharedEvent As System.Action
End Class
 
Class D
    Private c1 as C
 
    Sub InstanceAdd()
        AddHandler c1.InstanceEvent, AddressOf Action
    End Sub
 
    Sub InstanceRemove()
        RemoveHandler c1.InstanceEvent, AddressOf Action
    End Sub
 
    Sub SharedAdd()
        AddHandler C.SharedEvent, AddressOf Action
    End Sub
 
    Sub SharedRemove()
        RemoveHandler C.SharedEvent, AddressOf Action
    End Sub
 
    Shared Sub Action()
    End Sub
End Class
    </file>
    </compilation>, WinRtRefs, options:=TestOptions.ReleaseWinMD)
 
            verifier.VerifyIL("D.InstanceAdd", <![CDATA[
{
  // Code size       49 (0x31)
  .maxstack  4
  .locals init (C V_0)
  IL_0000:  ldarg.0
  IL_0001:  ldfld      "D.c1 As C"
  IL_0006:  stloc.0
  IL_0007:  ldloc.0
  IL_0008:  ldftn      "Sub C.add_InstanceEvent(System.Action) As System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken"
  IL_000e:  newobj     "Sub System.Func(Of System.Action, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_0013:  ldloc.0
  IL_0014:  ldftn      "Sub C.remove_InstanceEvent(System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)"
  IL_001a:  newobj     "Sub System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_001f:  ldnull
  IL_0020:  ldftn      "Sub D.Action()"
  IL_0026:  newobj     "Sub System.Action..ctor(Object, System.IntPtr)"
  IL_002b:  call       "Sub System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeMarshal.AddEventHandler(Of System.Action)(System.Func(Of System.Action, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), System.Action)"
  IL_0030:  ret
}
]]>)
 
            verifier.VerifyIL("D.InstanceRemove", <![CDATA[
{
  // Code size       35 (0x23)
  .maxstack  3
  IL_0000:  ldarg.0
  IL_0001:  ldfld      "D.c1 As C"
  IL_0006:  ldftn      "Sub C.remove_InstanceEvent(System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)"
  IL_000c:  newobj     "Sub System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_0011:  ldnull
  IL_0012:  ldftn      "Sub D.Action()"
  IL_0018:  newobj     "Sub System.Action..ctor(Object, System.IntPtr)"
  IL_001d:  call       "Sub System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeMarshal.RemoveEventHandler(Of System.Action)(System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), System.Action)"
  IL_0022:  ret
}
]]>)
 
            verifier.VerifyIL("D.SharedAdd", <![CDATA[
{
  // Code size       42 (0x2a)
  .maxstack  4
  IL_0000:  ldnull
  IL_0001:  ldftn      "Sub C.add_SharedEvent(System.Action) As System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken"
  IL_0007:  newobj     "Sub System.Func(Of System.Action, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_000c:  ldnull
  IL_000d:  ldftn      "Sub C.remove_SharedEvent(System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)"
  IL_0013:  newobj     "Sub System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_0018:  ldnull
  IL_0019:  ldftn      "Sub D.Action()"
  IL_001f:  newobj     "Sub System.Action..ctor(Object, System.IntPtr)"
  IL_0024:  call       "Sub System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeMarshal.AddEventHandler(Of System.Action)(System.Func(Of System.Action, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), System.Action)"
  IL_0029:  ret
}
]]>)
 
            verifier.VerifyIL("D.SharedRemove", <![CDATA[
{
  // Code size       30 (0x1e)
  .maxstack  3
  IL_0000:  ldnull
  IL_0001:  ldftn      "Sub C.remove_SharedEvent(System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)"
  IL_0007:  newobj     "Sub System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_000c:  ldnull
  IL_000d:  ldftn      "Sub D.Action()"
  IL_0013:  newobj     "Sub System.Action..ctor(Object, System.IntPtr)"
  IL_0018:  call       "Sub System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeMarshal.RemoveEventHandler(Of System.Action)(System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), System.Action)"
  IL_001d:  ret
}
]]>)
        End Sub
 
        <Fact()>
        Public Sub [RaiseEvent]()
            Dim verifier = CompileAndVerify(
    <compilation>
        <file name="a.vb">
Class C
    Public Event InstanceEvent As System.Action(Of Integer)
    Public Shared Event SharedEvent As System.Action(Of Integer)
 
    Sub InstanceRaise()
        RaiseEvent InstanceEvent(1)
    End Sub
 
    Sub SharedRaise()
        RaiseEvent SharedEvent(2)
    End Sub
 
    Shared Sub Action()
    End Sub
End Class
    </file>
    </compilation>, WinRtRefs, options:=TestOptions.ReleaseWinMD)
 
            verifier.VerifyIL("C.InstanceRaise", <![CDATA[
{
  // Code size       28 (0x1c)
  .maxstack  2
  .locals init (System.Action(Of Integer) V_0)
  IL_0000:  ldarg.0
  IL_0001:  ldflda     "C.InstanceEventEvent As System.Runtime.InteropServices.WindowsRuntime.EventRegistrationTokenTable(Of System.Action(Of Integer))"
  IL_0006:  call       "Function System.Runtime.InteropServices.WindowsRuntime.EventRegistrationTokenTable(Of System.Action(Of Integer)).GetOrCreateEventRegistrationTokenTable(ByRef System.Runtime.InteropServices.WindowsRuntime.EventRegistrationTokenTable(Of System.Action(Of Integer))) As System.Runtime.InteropServices.WindowsRuntime.EventRegistrationTokenTable(Of System.Action(Of Integer))"
  IL_000b:  callvirt   "Function System.Runtime.InteropServices.WindowsRuntime.EventRegistrationTokenTable(Of System.Action(Of Integer)).get_InvocationList() As System.Action(Of Integer)"
  IL_0010:  stloc.0
  IL_0011:  ldloc.0
  IL_0012:  brfalse.s  IL_001b
  IL_0014:  ldloc.0
  IL_0015:  ldc.i4.1
  IL_0016:  callvirt   "Sub System.Action(Of Integer).Invoke(Integer)"
  IL_001b:  ret
}
]]>)
 
            verifier.VerifyIL("C.SharedRaise", <![CDATA[
{
  // Code size       27 (0x1b)
  .maxstack  2
  .locals init (System.Action(Of Integer) V_0)
  IL_0000:  ldsflda    "C.SharedEventEvent As System.Runtime.InteropServices.WindowsRuntime.EventRegistrationTokenTable(Of System.Action(Of Integer))"
  IL_0005:  call       "Function System.Runtime.InteropServices.WindowsRuntime.EventRegistrationTokenTable(Of System.Action(Of Integer)).GetOrCreateEventRegistrationTokenTable(ByRef System.Runtime.InteropServices.WindowsRuntime.EventRegistrationTokenTable(Of System.Action(Of Integer))) As System.Runtime.InteropServices.WindowsRuntime.EventRegistrationTokenTable(Of System.Action(Of Integer))"
  IL_000a:  callvirt   "Function System.Runtime.InteropServices.WindowsRuntime.EventRegistrationTokenTable(Of System.Action(Of Integer)).get_InvocationList() As System.Action(Of Integer)"
  IL_000f:  stloc.0
  IL_0010:  ldloc.0
  IL_0011:  brfalse.s  IL_001a
  IL_0013:  ldloc.0
  IL_0014:  ldc.i4.2
  IL_0015:  callvirt   "Sub System.Action(Of Integer).Invoke(Integer)"
  IL_001a:  ret
}
]]>)
        End Sub
 
        ''' <summary>
        ''' Dev11 had bugs in this area (e.g. 281866, 298564), but Roslyn shouldn't be affected.
        ''' </summary>
        ''' <remarks>
        ''' I'm assuming this is why the final dev11 impl uses GetOrCreateEventRegistrationTokenTable.
        ''' </remarks>
        <WorkItem(1003209, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1003209")>
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:=ConditionalSkipReason.WinRTNeedsWindowsDesktop)>
        Public Sub FieldLikeEventSerialization()
 
            Dim source1 =
<compilation>
    <file name="a.vb">
Namespace EventDeserialization
 
    Public Delegate Sub EventDelegate
 
    Public Interface IEvent
        Event E as EventDelegate
    End Interface
 
End Namespace
    </file>
</compilation>
 
            Dim source2 =
<compilation>
    <file name="b.vb">
Imports System
Imports System.IO
Imports System.Runtime.Serialization
 
Namespace EventDeserialization
 
    Module MainPage
 
        Public Sub Main()
            Dim m1 as new Model()
            AddHandler m1.E, Sub() Console.Write("A")
            m1.Invoke()
 
            Dim bytes = Serialize(m1)
    
            Dim m2 as Model = Deserialize(bytes)
            Console.WriteLine(m1 is m2)
            m2.Invoke()
 
            AddHandler m2.E, Sub() Console.Write("B")
            m2.Invoke()
        End Sub
 
        Function Serialize(m as Model) as Byte()
            Dim ser as new DataContractSerializer(GetType(Model))
            Using stream = new MemoryStream()
                ser.WriteObject(stream, m)
                Return stream.ToArray()
            End Using
        End Function
 
        Function Deserialize(b as Byte()) As Model
            Dim ser as new DataContractSerializer(GetType(Model))
            Using stream = new MemoryStream(b)
                Return DirectCast(ser.ReadObject(stream), Model)
            End Using
        End Function
 
    End Module
 
    &lt;DataContract&gt;
    Public NotInheritable Class Model
        Implements IEvent
        
        Public Event E as EventDelegate Implements IEvent.E
 
        Public Sub Invoke()
            RaiseEvent E()
            Console.WriteLine()
        End Sub
    End Class
 
End Namespace
    </file>
</compilation>
 
            Dim comp1 = CreateEmptyCompilationWithReferences(source1, WinRtRefs, options:=TestOptions.ReleaseWinMD)
            comp1.VerifyDiagnostics()
 
            Dim serializationRef = Net461.References.SystemRuntimeSerialization
            Dim comp2 = CreateEmptyCompilationWithReferences(source2, WinRtRefs.Concat({New VisualBasicCompilationReference(comp1), serializationRef, MsvbRef, SystemXmlRef}), options:=TestOptions.ReleaseExe)
            CompileAndVerify(comp2, expectedOutput:=<![CDATA[
A
False

B
]]>)
        End Sub
 
        ' Receiver can be MyBase, MyClass, Me, or the name of a WithEvents member (instance or shared).
        <Fact>
        Public Sub HandlesClauses_ReceiverKinds()
 
            Dim source =
<compilation>
    <file name="a.vb">
Imports System.Runtime.InteropServices.WindowsRuntime
 
Delegate Sub EventDelegate()
 
Class Base
    Public Event InstanceEvent As EventDelegate
    Public Shared Event SharedEvent As EventDelegate
End Class
 
Class Derived
    Inherits Base
 
    WithEvents B As Base
    Shared WithEvents BX As Base
 
    Public Shadows Event InstanceEvent As EventDelegate
    Public Shadows Shared Event SharedEvent As EventDelegate
 
    Sub InstanceHandler() Handles _
        MyBase.InstanceEvent,
        MyBase.SharedEvent,
        MyClass.InstanceEvent,
        MyClass.SharedEvent,
        Me.InstanceEvent,
        Me.SharedEvent,
        B.InstanceEvent,
        B.SharedEvent
 
    End Sub
 
    Shared Sub SharedHandler() Handles _
        MyBase.InstanceEvent,
        MyBase.SharedEvent,
        MyClass.InstanceEvent,
        MyClass.SharedEvent,
        Me.InstanceEvent,
        Me.SharedEvent,
        B.InstanceEvent,
        B.SharedEvent,
        BX.InstanceEvent,
        BX.SharedEvent
 
    End Sub
 
End Class
    </file>
</compilation>
 
            Dim comp = CreateEmptyCompilationWithReferences(source, WinRtRefs, options:=TestOptions.ReleaseWinMD)
            Dim verifier = CompileAndVerify(comp)
 
            ' Attach Me.InstanceHandler to {Base/Derived/Derived}.{InstanceEvent/SharedEvent} (from {MyBase/MyClass/Me}.{InstanceEvent/SharedEvent}).
            ' Attach Derived.SharedHandler to {Base/Derived/Derived}.InstanceEvent (from {MyBase/MyClass/Me}.InstanceEvent).
            verifier.VerifyIL("Derived..ctor", <![CDATA[
{
  // Code size      376 (0x178)
  .maxstack  4
  IL_0000:  ldarg.0
  IL_0001:  call       "Sub Base..ctor()"
  IL_0006:  ldarg.0
  IL_0007:  ldftn      "Sub Base.add_InstanceEvent(EventDelegate) As System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken"
  IL_000d:  newobj     "Sub System.Func(Of EventDelegate, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_0012:  ldarg.0
  IL_0013:  ldftn      "Sub Base.remove_InstanceEvent(System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)"
  IL_0019:  newobj     "Sub System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_001e:  ldarg.0
  IL_001f:  ldftn      "Sub Derived.InstanceHandler()"
  IL_0025:  newobj     "Sub EventDelegate..ctor(Object, System.IntPtr)"
  IL_002a:  call       "Sub System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeMarshal.AddEventHandler(Of EventDelegate)(System.Func(Of EventDelegate, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), EventDelegate)"
  IL_002f:  ldnull
  IL_0030:  ldftn      "Sub Base.add_SharedEvent(EventDelegate) As System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken"
  IL_0036:  newobj     "Sub System.Func(Of EventDelegate, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_003b:  ldnull
  IL_003c:  ldftn      "Sub Base.remove_SharedEvent(System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)"
  IL_0042:  newobj     "Sub System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_0047:  ldarg.0
  IL_0048:  ldftn      "Sub Derived.InstanceHandler()"
  IL_004e:  newobj     "Sub EventDelegate..ctor(Object, System.IntPtr)"
  IL_0053:  call       "Sub System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeMarshal.AddEventHandler(Of EventDelegate)(System.Func(Of EventDelegate, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), EventDelegate)"
  IL_0058:  ldarg.0
  IL_0059:  ldftn      "Sub Derived.add_InstanceEvent(EventDelegate) As System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken"
  IL_005f:  newobj     "Sub System.Func(Of EventDelegate, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_0064:  ldarg.0
  IL_0065:  ldftn      "Sub Derived.remove_InstanceEvent(System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)"
  IL_006b:  newobj     "Sub System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_0070:  ldarg.0
  IL_0071:  ldftn      "Sub Derived.InstanceHandler()"
  IL_0077:  newobj     "Sub EventDelegate..ctor(Object, System.IntPtr)"
  IL_007c:  call       "Sub System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeMarshal.AddEventHandler(Of EventDelegate)(System.Func(Of EventDelegate, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), EventDelegate)"
  IL_0081:  ldnull
  IL_0082:  ldftn      "Sub Derived.add_SharedEvent(EventDelegate) As System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken"
  IL_0088:  newobj     "Sub System.Func(Of EventDelegate, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_008d:  ldnull
  IL_008e:  ldftn      "Sub Derived.remove_SharedEvent(System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)"
  IL_0094:  newobj     "Sub System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_0099:  ldarg.0
  IL_009a:  ldftn      "Sub Derived.InstanceHandler()"
  IL_00a0:  newobj     "Sub EventDelegate..ctor(Object, System.IntPtr)"
  IL_00a5:  call       "Sub System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeMarshal.AddEventHandler(Of EventDelegate)(System.Func(Of EventDelegate, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), EventDelegate)"
  IL_00aa:  ldarg.0
  IL_00ab:  ldftn      "Sub Derived.add_InstanceEvent(EventDelegate) As System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken"
  IL_00b1:  newobj     "Sub System.Func(Of EventDelegate, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_00b6:  ldarg.0
  IL_00b7:  ldftn      "Sub Derived.remove_InstanceEvent(System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)"
  IL_00bd:  newobj     "Sub System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_00c2:  ldarg.0
  IL_00c3:  ldftn      "Sub Derived.InstanceHandler()"
  IL_00c9:  newobj     "Sub EventDelegate..ctor(Object, System.IntPtr)"
  IL_00ce:  call       "Sub System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeMarshal.AddEventHandler(Of EventDelegate)(System.Func(Of EventDelegate, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), EventDelegate)"
  IL_00d3:  ldnull
  IL_00d4:  ldftn      "Sub Derived.add_SharedEvent(EventDelegate) As System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken"
  IL_00da:  newobj     "Sub System.Func(Of EventDelegate, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_00df:  ldnull
  IL_00e0:  ldftn      "Sub Derived.remove_SharedEvent(System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)"
  IL_00e6:  newobj     "Sub System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_00eb:  ldarg.0
  IL_00ec:  ldftn      "Sub Derived.InstanceHandler()"
  IL_00f2:  newobj     "Sub EventDelegate..ctor(Object, System.IntPtr)"
  IL_00f7:  call       "Sub System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeMarshal.AddEventHandler(Of EventDelegate)(System.Func(Of EventDelegate, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), EventDelegate)"
  IL_00fc:  ldarg.0
  IL_00fd:  ldftn      "Sub Base.add_InstanceEvent(EventDelegate) As System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken"
  IL_0103:  newobj     "Sub System.Func(Of EventDelegate, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_0108:  ldarg.0
  IL_0109:  ldftn      "Sub Base.remove_InstanceEvent(System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)"
  IL_010f:  newobj     "Sub System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_0114:  ldnull
  IL_0115:  ldftn      "Sub Derived.SharedHandler()"
  IL_011b:  newobj     "Sub EventDelegate..ctor(Object, System.IntPtr)"
  IL_0120:  call       "Sub System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeMarshal.AddEventHandler(Of EventDelegate)(System.Func(Of EventDelegate, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), EventDelegate)"
  IL_0125:  ldarg.0
  IL_0126:  ldftn      "Sub Derived.add_InstanceEvent(EventDelegate) As System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken"
  IL_012c:  newobj     "Sub System.Func(Of EventDelegate, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_0131:  ldarg.0
  IL_0132:  ldftn      "Sub Derived.remove_InstanceEvent(System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)"
  IL_0138:  newobj     "Sub System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_013d:  ldnull
  IL_013e:  ldftn      "Sub Derived.SharedHandler()"
  IL_0144:  newobj     "Sub EventDelegate..ctor(Object, System.IntPtr)"
  IL_0149:  call       "Sub System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeMarshal.AddEventHandler(Of EventDelegate)(System.Func(Of EventDelegate, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), EventDelegate)"
  IL_014e:  ldarg.0
  IL_014f:  ldftn      "Sub Derived.add_InstanceEvent(EventDelegate) As System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken"
  IL_0155:  newobj     "Sub System.Func(Of EventDelegate, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_015a:  ldarg.0
  IL_015b:  ldftn      "Sub Derived.remove_InstanceEvent(System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)"
  IL_0161:  newobj     "Sub System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_0166:  ldnull
  IL_0167:  ldftn      "Sub Derived.SharedHandler()"
  IL_016d:  newobj     "Sub EventDelegate..ctor(Object, System.IntPtr)"
  IL_0172:  call       "Sub System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeMarshal.AddEventHandler(Of EventDelegate)(System.Func(Of EventDelegate, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), EventDelegate)"
  IL_0177:  ret
}
]]>)
 
            ' Attach Derived.SharedHandler to from {Base/Derived/Derived}.SharedEvent (from {MyBase/MyClass/Me}.SharedEvent).
            verifier.VerifyIL("Derived..cctor", <![CDATA[
{
  // Code size      124 (0x7c)
  .maxstack  4
  IL_0000:  ldnull
  IL_0001:  ldftn      "Sub Base.add_SharedEvent(EventDelegate) As System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken"
  IL_0007:  newobj     "Sub System.Func(Of EventDelegate, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_000c:  ldnull
  IL_000d:  ldftn      "Sub Base.remove_SharedEvent(System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)"
  IL_0013:  newobj     "Sub System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_0018:  ldnull
  IL_0019:  ldftn      "Sub Derived.SharedHandler()"
  IL_001f:  newobj     "Sub EventDelegate..ctor(Object, System.IntPtr)"
  IL_0024:  call       "Sub System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeMarshal.AddEventHandler(Of EventDelegate)(System.Func(Of EventDelegate, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), EventDelegate)"
  IL_0029:  ldnull
  IL_002a:  ldftn      "Sub Derived.add_SharedEvent(EventDelegate) As System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken"
  IL_0030:  newobj     "Sub System.Func(Of EventDelegate, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_0035:  ldnull
  IL_0036:  ldftn      "Sub Derived.remove_SharedEvent(System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)"
  IL_003c:  newobj     "Sub System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_0041:  ldnull
  IL_0042:  ldftn      "Sub Derived.SharedHandler()"
  IL_0048:  newobj     "Sub EventDelegate..ctor(Object, System.IntPtr)"
  IL_004d:  call       "Sub System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeMarshal.AddEventHandler(Of EventDelegate)(System.Func(Of EventDelegate, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), EventDelegate)"
  IL_0052:  ldnull
  IL_0053:  ldftn      "Sub Derived.add_SharedEvent(EventDelegate) As System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken"
  IL_0059:  newobj     "Sub System.Func(Of EventDelegate, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_005e:  ldnull
  IL_005f:  ldftn      "Sub Derived.remove_SharedEvent(System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)"
  IL_0065:  newobj     "Sub System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_006a:  ldnull
  IL_006b:  ldftn      "Sub Derived.SharedHandler()"
  IL_0071:  newobj     "Sub EventDelegate..ctor(Object, System.IntPtr)"
  IL_0076:  call       "Sub System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeMarshal.AddEventHandler(Of EventDelegate)(System.Func(Of EventDelegate, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), EventDelegate)"
  IL_007b:  ret
}
]]>)
 
            ' Wire up Me.InstanceHandler to Me.B.InstanceEvent and Base.SharedEvent.
            ' Wire up Derived.SharedHandler to Me.B.InstanceEvent and Base.SharedEvent.
            verifier.VerifyIL("Derived.put_B", <![CDATA[
{
  // Code size      282 (0x11a)
  .maxstack  3
  .locals init (EventDelegate V_0,
    EventDelegate V_1,
    EventDelegate V_2,
    EventDelegate V_3,
    Base V_4)
  IL_0000:  ldarg.0
  IL_0001:  ldftn      "Sub Derived.InstanceHandler()"
  IL_0007:  newobj     "Sub EventDelegate..ctor(Object, System.IntPtr)"
  IL_000c:  stloc.0
  IL_000d:  ldarg.0
  IL_000e:  ldftn      "Sub Derived.InstanceHandler()"
  IL_0014:  newobj     "Sub EventDelegate..ctor(Object, System.IntPtr)"
  IL_0019:  stloc.1
  IL_001a:  ldnull
  IL_001b:  ldftn      "Sub Derived.SharedHandler()"
  IL_0021:  newobj     "Sub EventDelegate..ctor(Object, System.IntPtr)"
  IL_0026:  stloc.2
  IL_0027:  ldnull
  IL_0028:  ldftn      "Sub Derived.SharedHandler()"
  IL_002e:  newobj     "Sub EventDelegate..ctor(Object, System.IntPtr)"
  IL_0033:  stloc.3
  IL_0034:  ldarg.0
  IL_0035:  ldfld      "Derived._B As Base"
  IL_003a:  stloc.s    V_4
  IL_003c:  ldloc.s    V_4
  IL_003e:  brfalse.s  IL_008a
  IL_0040:  ldloc.s    V_4
  IL_0042:  ldftn      "Sub Base.remove_InstanceEvent(System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)"
  IL_0048:  newobj     "Sub System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_004d:  ldloc.0
  IL_004e:  call       "Sub System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeMarshal.RemoveEventHandler(Of EventDelegate)(System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), EventDelegate)"
  IL_0053:  ldnull
  IL_0054:  ldftn      "Sub Base.remove_SharedEvent(System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)"
  IL_005a:  newobj     "Sub System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_005f:  ldloc.1
  IL_0060:  call       "Sub System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeMarshal.RemoveEventHandler(Of EventDelegate)(System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), EventDelegate)"
  IL_0065:  ldloc.s    V_4
  IL_0067:  ldftn      "Sub Base.remove_InstanceEvent(System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)"
  IL_006d:  newobj     "Sub System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_0072:  ldloc.2
  IL_0073:  call       "Sub System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeMarshal.RemoveEventHandler(Of EventDelegate)(System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), EventDelegate)"
  IL_0078:  ldnull
  IL_0079:  ldftn      "Sub Base.remove_SharedEvent(System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)"
  IL_007f:  newobj     "Sub System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_0084:  ldloc.3
  IL_0085:  call       "Sub System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeMarshal.RemoveEventHandler(Of EventDelegate)(System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), EventDelegate)"
  IL_008a:  ldarg.0
  IL_008b:  ldarg.1
  IL_008c:  stfld      "Derived._B As Base"
  IL_0091:  ldarg.0
  IL_0092:  ldfld      "Derived._B As Base"
  IL_0097:  stloc.s    V_4
  IL_0099:  ldloc.s    V_4
  IL_009b:  brfalse.s  IL_0119
  IL_009d:  ldloc.s    V_4
  IL_009f:  ldftn      "Sub Base.add_InstanceEvent(EventDelegate) As System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken"
  IL_00a5:  newobj     "Sub System.Func(Of EventDelegate, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_00aa:  ldloc.s    V_4
  IL_00ac:  ldftn      "Sub Base.remove_InstanceEvent(System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)"
  IL_00b2:  newobj     "Sub System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_00b7:  ldloc.0
  IL_00b8:  call       "Sub System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeMarshal.AddEventHandler(Of EventDelegate)(System.Func(Of EventDelegate, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), EventDelegate)"
  IL_00bd:  ldnull
  IL_00be:  ldftn      "Sub Base.add_SharedEvent(EventDelegate) As System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken"
  IL_00c4:  newobj     "Sub System.Func(Of EventDelegate, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_00c9:  ldnull
  IL_00ca:  ldftn      "Sub Base.remove_SharedEvent(System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)"
  IL_00d0:  newobj     "Sub System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_00d5:  ldloc.1
  IL_00d6:  call       "Sub System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeMarshal.AddEventHandler(Of EventDelegate)(System.Func(Of EventDelegate, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), EventDelegate)"
  IL_00db:  ldloc.s    V_4
  IL_00dd:  ldftn      "Sub Base.add_InstanceEvent(EventDelegate) As System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken"
  IL_00e3:  newobj     "Sub System.Func(Of EventDelegate, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_00e8:  ldloc.s    V_4
  IL_00ea:  ldftn      "Sub Base.remove_InstanceEvent(System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)"
  IL_00f0:  newobj     "Sub System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_00f5:  ldloc.2
  IL_00f6:  call       "Sub System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeMarshal.AddEventHandler(Of EventDelegate)(System.Func(Of EventDelegate, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), EventDelegate)"
  IL_00fb:  ldnull
  IL_00fc:  ldftn      "Sub Base.add_SharedEvent(EventDelegate) As System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken"
  IL_0102:  newobj     "Sub System.Func(Of EventDelegate, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_0107:  ldnull
  IL_0108:  ldftn      "Sub Base.remove_SharedEvent(System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)"
  IL_010e:  newobj     "Sub System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_0113:  ldloc.3
  IL_0114:  call       "Sub System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeMarshal.AddEventHandler(Of EventDelegate)(System.Func(Of EventDelegate, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), EventDelegate)"
  IL_0119:  ret
}
]]>)
 
            ' Wire up Derived.SharedHandler to Derived.BX.InstanceEvent and Base.SharedEvent.
            verifier.VerifyIL("Derived.put_BX", <![CDATA[
{
  // Code size      147 (0x93)
  .maxstack  3
  .locals init (EventDelegate V_0,
    EventDelegate V_1,
    Base V_2)
  IL_0000:  ldnull
  IL_0001:  ldftn      "Sub Derived.SharedHandler()"
  IL_0007:  newobj     "Sub EventDelegate..ctor(Object, System.IntPtr)"
  IL_000c:  stloc.0
  IL_000d:  ldnull
  IL_000e:  ldftn      "Sub Derived.SharedHandler()"
  IL_0014:  newobj     "Sub EventDelegate..ctor(Object, System.IntPtr)"
  IL_0019:  stloc.1
  IL_001a:  ldsfld     "Derived._BX As Base"
  IL_001f:  stloc.2
  IL_0020:  ldloc.2
  IL_0021:  brfalse.s  IL_0047
  IL_0023:  ldloc.2
  IL_0024:  ldftn      "Sub Base.remove_InstanceEvent(System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)"
  IL_002a:  newobj     "Sub System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_002f:  ldloc.0
  IL_0030:  call       "Sub System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeMarshal.RemoveEventHandler(Of EventDelegate)(System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), EventDelegate)"
  IL_0035:  ldnull
  IL_0036:  ldftn      "Sub Base.remove_SharedEvent(System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)"
  IL_003c:  newobj     "Sub System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_0041:  ldloc.1
  IL_0042:  call       "Sub System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeMarshal.RemoveEventHandler(Of EventDelegate)(System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), EventDelegate)"
  IL_0047:  ldarg.0
  IL_0048:  stsfld     "Derived._BX As Base"
  IL_004d:  ldsfld     "Derived._BX As Base"
  IL_0052:  stloc.2
  IL_0053:  ldloc.2
  IL_0054:  brfalse.s  IL_0092
  IL_0056:  ldloc.2
  IL_0057:  ldftn      "Sub Base.add_InstanceEvent(EventDelegate) As System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken"
  IL_005d:  newobj     "Sub System.Func(Of EventDelegate, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_0062:  ldloc.2
  IL_0063:  ldftn      "Sub Base.remove_InstanceEvent(System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)"
  IL_0069:  newobj     "Sub System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_006e:  ldloc.0
  IL_006f:  call       "Sub System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeMarshal.AddEventHandler(Of EventDelegate)(System.Func(Of EventDelegate, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), EventDelegate)"
  IL_0074:  ldnull
  IL_0075:  ldftn      "Sub Base.add_SharedEvent(EventDelegate) As System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken"
  IL_007b:  newobj     "Sub System.Func(Of EventDelegate, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_0080:  ldnull
  IL_0081:  ldftn      "Sub Base.remove_SharedEvent(System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)"
  IL_0087:  newobj     "Sub System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_008c:  ldloc.1
  IL_008d:  call       "Sub System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeMarshal.AddEventHandler(Of EventDelegate)(System.Func(Of EventDelegate, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), EventDelegate)"
  IL_0092:  ret
}
]]>)
        End Sub
 
        <Fact(), WorkItem(6313, "https://github.com/dotnet/roslyn/issues/6313")>
        Public Sub CustomEventWinMd()
            Dim source =
<compilation>
    <file name="a.vb">
Imports System.Runtime.InteropServices.WindowsRuntime
 
Class Test
    Public Custom Event CustomEvent As System.Action(Of Integer)
        AddHandler(value As System.Action(Of Integer))
            Return Nothing		
        End AddHandler
 
        RemoveHandler(value As EventRegistrationToken)
 
        End RemoveHandler
 
        RaiseEvent()
 
        End RaiseEvent
    End Event
End Class
    </file>
</compilation>
 
            Dim comp = CreateEmptyCompilationWithReferences(source, WinRtRefs, options:=TestOptions.DebugWinMD)
            Dim verifier = CompileAndVerify(comp)
        End Sub
 
        ' Field-like and custom events are not treated differently.
        <Fact(), WorkItem(1003209, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1003209")>
        Public Sub HandlesClauses_EventKinds()
 
            Dim source =
<compilation>
    <file name="a.vb">
Imports System.Runtime.InteropServices.WindowsRuntime
 
Delegate Sub EventDelegate()
 
Class Test
 
    WithEvents T As Test
 
    Public Event FieldLikeEvent As EventDelegate
 
    Public Custom Event CustomEvent As EventDelegate
        AddHandler(value As EventDelegate)
            Return Nothing		
        End AddHandler
 
        RemoveHandler(value As EventRegistrationToken)
 
        End RemoveHandler
 
        RaiseEvent()
 
        End RaiseEvent
    End Event
 
    Sub Handler() Handles _
        Me.FieldLikeEvent,
        Me.CustomEvent,
        T.FieldLikeEvent,
        T.CustomEvent
 
    End Sub
 
End Class
    </file>
</compilation>
 
            Dim comp = CreateEmptyCompilationWithReferences(source, WinRtRefs, options:=TestOptions.ReleaseWinMD)
            Dim verifier = CompileAndVerify(comp)
 
            verifier.VerifyIL("Test..ctor", <![CDATA[
{
  // Code size       89 (0x59)
  .maxstack  4
  IL_0000:  ldarg.0
  IL_0001:  call       "Sub Object..ctor()"
  IL_0006:  ldarg.0
  IL_0007:  ldftn      "Sub Test.add_FieldLikeEvent(EventDelegate) As System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken"
  IL_000d:  newobj     "Sub System.Func(Of EventDelegate, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_0012:  ldarg.0
  IL_0013:  ldftn      "Sub Test.remove_FieldLikeEvent(System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)"
  IL_0019:  newobj     "Sub System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_001e:  ldarg.0
  IL_001f:  ldftn      "Sub Test.Handler()"
  IL_0025:  newobj     "Sub EventDelegate..ctor(Object, System.IntPtr)"
  IL_002a:  call       "Sub System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeMarshal.AddEventHandler(Of EventDelegate)(System.Func(Of EventDelegate, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), EventDelegate)"
  IL_002f:  ldarg.0
  IL_0030:  ldftn      "Sub Test.add_CustomEvent(EventDelegate) As System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken"
  IL_0036:  newobj     "Sub System.Func(Of EventDelegate, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_003b:  ldarg.0
  IL_003c:  ldftn      "Sub Test.remove_CustomEvent(System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)"
  IL_0042:  newobj     "Sub System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_0047:  ldarg.0
  IL_0048:  ldftn      "Sub Test.Handler()"
  IL_004e:  newobj     "Sub EventDelegate..ctor(Object, System.IntPtr)"
  IL_0053:  call       "Sub System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeMarshal.AddEventHandler(Of EventDelegate)(System.Func(Of EventDelegate, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), EventDelegate)"
  IL_0058:  ret
}
]]>)
 
            verifier.VerifyIL("Test.put_T", <![CDATA[
{
  // Code size      150 (0x96)
  .maxstack  3
  .locals init (EventDelegate V_0,
  EventDelegate V_1,
  Test V_2)
  IL_0000:  ldarg.0
  IL_0001:  ldftn      "Sub Test.Handler()"
  IL_0007:  newobj     "Sub EventDelegate..ctor(Object, System.IntPtr)"
  IL_000c:  stloc.0
  IL_000d:  ldarg.0
  IL_000e:  ldftn      "Sub Test.Handler()"
  IL_0014:  newobj     "Sub EventDelegate..ctor(Object, System.IntPtr)"
  IL_0019:  stloc.1
  IL_001a:  ldarg.0
  IL_001b:  ldfld      "Test._T As Test"
  IL_0020:  stloc.2
  IL_0021:  ldloc.2
  IL_0022:  brfalse.s  IL_0048
  IL_0024:  ldloc.2
  IL_0025:  ldftn      "Sub Test.remove_FieldLikeEvent(System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)"
  IL_002b:  newobj     "Sub System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_0030:  ldloc.0
  IL_0031:  call       "Sub System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeMarshal.RemoveEventHandler(Of EventDelegate)(System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), EventDelegate)"
  IL_0036:  ldloc.2
  IL_0037:  ldftn      "Sub Test.remove_CustomEvent(System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)"
  IL_003d:  newobj     "Sub System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_0042:  ldloc.1
  IL_0043:  call       "Sub System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeMarshal.RemoveEventHandler(Of EventDelegate)(System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), EventDelegate)"
  IL_0048:  ldarg.0
  IL_0049:  ldarg.1
  IL_004a:  stfld      "Test._T As Test"
  IL_004f:  ldarg.0
  IL_0050:  ldfld      "Test._T As Test"
  IL_0055:  stloc.2
  IL_0056:  ldloc.2
  IL_0057:  brfalse.s  IL_0095
  IL_0059:  ldloc.2
  IL_005a:  ldftn      "Sub Test.add_FieldLikeEvent(EventDelegate) As System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken"
  IL_0060:  newobj     "Sub System.Func(Of EventDelegate, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_0065:  ldloc.2
  IL_0066:  ldftn      "Sub Test.remove_FieldLikeEvent(System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)"
  IL_006c:  newobj     "Sub System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_0071:  ldloc.0
  IL_0072:  call       "Sub System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeMarshal.AddEventHandler(Of EventDelegate)(System.Func(Of EventDelegate, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), EventDelegate)"
  IL_0077:  ldloc.2
  IL_0078:  ldftn      "Sub Test.add_CustomEvent(EventDelegate) As System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken"
  IL_007e:  newobj     "Sub System.Func(Of EventDelegate, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_0083:  ldloc.2
  IL_0084:  ldftn      "Sub Test.remove_CustomEvent(System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)"
  IL_008a:  newobj     "Sub System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_008f:  ldloc.1
  IL_0090:  call       "Sub System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeMarshal.AddEventHandler(Of EventDelegate)(System.Func(Of EventDelegate, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), EventDelegate)"
  IL_0095:  ret
}
]]>)
        End Sub
 
        ' The handler is allowed to have zero arguments (event if using AddHandler would be illegal).
        <Fact>
        Public Sub HandlesClauses_ZeroArgumentHandler()
 
            Dim source =
<compilation>
    <file name="a.vb">
Imports System.Runtime.InteropServices.WindowsRuntime
 
Delegate Sub EventDelegate(x as Integer)
 
Class Test
 
    WithEvents T As Test
 
    Public Event E As EventDelegate
 
    Sub Handler() Handles Me.E, T.E
 
    End Sub
 
End Class
    </file>
</compilation>
 
            Dim comp = CreateEmptyCompilationWithReferences(source, WinRtRefs, options:=TestOptions.ReleaseWinMD)
            Dim verifier = CompileAndVerify(comp)
 
            ' Note: actually attaching a lambda.
            verifier.VerifyIL("Test..ctor", <![CDATA[
{
  // Code size       48 (0x30)
  .maxstack  4
  IL_0000:  ldarg.0
  IL_0001:  call       "Sub Object..ctor()"
  IL_0006:  ldarg.0
  IL_0007:  ldftn      "Sub Test.add_E(EventDelegate) As System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken"
  IL_000d:  newobj     "Sub System.Func(Of EventDelegate, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_0012:  ldarg.0
  IL_0013:  ldftn      "Sub Test.remove_E(System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)"
  IL_0019:  newobj     "Sub System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_001e:  ldarg.0
  IL_001f:  ldftn      "Sub Test._Lambda$__R0-1(Integer)"
  IL_0025:  newobj     "Sub EventDelegate..ctor(Object, System.IntPtr)"
  IL_002a:  call       "Sub System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeMarshal.AddEventHandler(Of EventDelegate)(System.Func(Of EventDelegate, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), EventDelegate)"
  IL_002f:  ret
}
]]>)
 
            ' Note: actually attaching a lambda.
            verifier.VerifyIL("Test.put_T", <![CDATA[
{
  // Code size       89 (0x59)
  .maxstack  3
  .locals init (EventDelegate V_0,
  Test V_1)
  IL_0000:  ldarg.0
  IL_0001:  ldftn      "Sub Test._Lambda$__R3-2(Integer)"
  IL_0007:  newobj     "Sub EventDelegate..ctor(Object, System.IntPtr)"
  IL_000c:  stloc.0
  IL_000d:  ldarg.0
  IL_000e:  ldfld      "Test._T As Test"
  IL_0013:  stloc.1
  IL_0014:  ldloc.1
  IL_0015:  brfalse.s  IL_0029
  IL_0017:  ldloc.1
  IL_0018:  ldftn      "Sub Test.remove_E(System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)"
  IL_001e:  newobj     "Sub System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_0023:  ldloc.0
  IL_0024:  call       "Sub System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeMarshal.RemoveEventHandler(Of EventDelegate)(System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), EventDelegate)"
  IL_0029:  ldarg.0
  IL_002a:  ldarg.1
  IL_002b:  stfld      "Test._T As Test"
  IL_0030:  ldarg.0
  IL_0031:  ldfld      "Test._T As Test"
  IL_0036:  stloc.1
  IL_0037:  ldloc.1
  IL_0038:  brfalse.s  IL_0058
  IL_003a:  ldloc.1
  IL_003b:  ldftn      "Sub Test.add_E(EventDelegate) As System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken"
  IL_0041:  newobj     "Sub System.Func(Of EventDelegate, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_0046:  ldloc.1
  IL_0047:  ldftn      "Sub Test.remove_E(System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)"
  IL_004d:  newobj     "Sub System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken)..ctor(Object, System.IntPtr)"
  IL_0052:  ldloc.0
  IL_0053:  call       "Sub System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeMarshal.AddEventHandler(Of EventDelegate)(System.Func(Of EventDelegate, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), System.Action(Of System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken), EventDelegate)"
  IL_0058:  ret
}
]]>)
        End Sub
 
    End Class
End Namespace