diff --git a/src/Compilers/VisualBasic/Portable/Operations/VisualBasicOperationFactory.vb b/src/Compilers/VisualBasic/Portable/Operations/VisualBasicOperationFactory.vb index 7b5ec2cbdc897b23dce213f2b0546f470b2127de..8d08e1da865f8a5f410be8d16a63d1838948c252 100644 --- a/src/Compilers/VisualBasic/Portable/Operations/VisualBasicOperationFactory.vb +++ b/src/Compilers/VisualBasic/Portable/Operations/VisualBasicOperationFactory.vb @@ -671,8 +671,10 @@ Namespace Microsoft.CodeAnalysis.Semantics Not boundDelegateCreationExpression.SuppressVirtualCalls Dim instance As Lazy(Of IOperation) = New Lazy(Of IOperation)(Function() Create(If(boundDelegateCreationExpression.ReceiverOpt, boundDelegateCreationExpression.MethodGroupOpt?.ReceiverOpt))) + ' The compiler creates a BoundDelegateCreationExpression node for the AddressOf expression, and that's the node we want to use for the operand + ' of the IDelegateCreationExpression parent Dim syntax As SyntaxNode = boundDelegateCreationExpression.Syntax - Dim type As ITypeSymbol = boundDelegateCreationExpression.Type + Dim type As ITypeSymbol = Nothing Dim constantValue As [Optional](Of Object) = ConvertToOptional(boundDelegateCreationExpression.ConstantValueOpt) Dim isImplicit As Boolean = boundDelegateCreationExpression.WasCompilerGenerated Return New LazyMethodReferenceExpression(method, isVirtual, instance, _semanticModel, syntax, type, constantValue, isImplicit) diff --git a/src/Compilers/VisualBasic/Test/Semantic/IOperation/IOperationTests_IConversionExpression.vb b/src/Compilers/VisualBasic/Test/Semantic/IOperation/IOperationTests_IConversionExpression.vb index e3c5663d619be8050bca8f99e0232739ad6b3be6..fc929a98320647bb1cbe01b4dd5ed08e80ac3733 100644 --- a/src/Compilers/VisualBasic/Test/Semantic/IOperation/IOperationTests_IConversionExpression.vb +++ b/src/Compilers/VisualBasic/Test/Semantic/IOperation/IOperationTests_IConversionExpression.vb @@ -1075,7 +1075,7 @@ IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclaratio Initializer: IDelegateCreationExpression (OperationKind.DelegateCreationExpression, Type: System.Action, IsImplicit) (Syntax: 'AddressOf M2') Target: - IMethodReferenceExpression: Sub Program.M2() (OperationKind.MethodReferenceExpression, Type: System.Action) (Syntax: 'AddressOf M2') + IMethodReferenceExpression: Sub Program.M2() (OperationKind.MethodReferenceExpression, Type: null) (Syntax: 'AddressOf M2') Instance Receiver: IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: Program, IsImplicit) (Syntax: 'M2') ]]>.Value @@ -1106,7 +1106,7 @@ IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclaratio Initializer: IDelegateCreationExpression (OperationKind.DelegateCreationExpression, Type: System.Action(Of System.Int32), IsImplicit) (Syntax: 'AddressOf M2') Target: - IMethodReferenceExpression: Sub Program.M2() (OperationKind.MethodReferenceExpression, Type: System.Action(Of System.Int32)) (Syntax: 'AddressOf M2') + IMethodReferenceExpression: Sub Program.M2() (OperationKind.MethodReferenceExpression, Type: null) (Syntax: 'AddressOf M2') Instance Receiver: IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: Program, IsImplicit) (Syntax: 'M2') ]]>.Value @@ -1218,7 +1218,7 @@ IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclaratio Initializer: IDelegateCreationExpression (OperationKind.DelegateCreationExpression, Type: System.Action, IsImplicit) (Syntax: 'AddressOf M2') Target: - IMethodReferenceExpression: Function Program.M2() As System.Int32 (OperationKind.MethodReferenceExpression, Type: System.Action) (Syntax: 'AddressOf M2') + IMethodReferenceExpression: Function Program.M2() As System.Int32 (OperationKind.MethodReferenceExpression, Type: null) (Syntax: 'AddressOf M2') Instance Receiver: IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: Program, IsImplicit) (Syntax: 'M2') ]]>.Value @@ -1244,7 +1244,7 @@ Module Program End Module]]>.Value Dim expectedOperationTree = .Value @@ -1278,7 +1278,7 @@ IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclaratio Initializer: IDelegateCreationExpression (OperationKind.DelegateCreationExpression, Type: System.Func(Of System.Int64), IsImplicit) (Syntax: 'AddressOf M2') Target: - IMethodReferenceExpression: Function Program.M2() As System.Int32 (OperationKind.MethodReferenceExpression, Type: System.Func(Of System.Int64)) (Syntax: 'AddressOf M2') + IMethodReferenceExpression: Function Program.M2() As System.Int32 (OperationKind.MethodReferenceExpression, Type: null) (Syntax: 'AddressOf M2') Instance Receiver: IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: Program, IsImplicit) (Syntax: 'M2') ]]>.Value diff --git a/src/Compilers/VisualBasic/Test/Semantic/IOperation/IOperationTests_IDelegateCreationExpression.vb b/src/Compilers/VisualBasic/Test/Semantic/IOperation/IOperationTests_IDelegateCreationExpression.vb index a38a74f1ead407f60c031c6e8252a6c3a3b79977..cea3d110c08bc0f3121dbabb953297f273ea7363 100644 --- a/src/Compilers/VisualBasic/Test/Semantic/IOperation/IOperationTests_IDelegateCreationExpression.vb +++ b/src/Compilers/VisualBasic/Test/Semantic/IOperation/IOperationTests_IDelegateCreationExpression.vb @@ -720,7 +720,7 @@ End Module Dim expectedOperationTree = .Value @@ -759,7 +759,7 @@ IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclaratio Operand: IDelegateCreationExpression (OperationKind.DelegateCreationExpression, Type: System.Action(Of System.Int32), IsInvalid) (Syntax: 'CType(Addre ... f Integer))') Target: - IMethodReferenceExpression: Sub Program.M1(i As System.Int32) (OperationKind.MethodReferenceExpression, Type: System.Action(Of System.Int32), IsInvalid) (Syntax: 'AddressOf M1') + IMethodReferenceExpression: Sub Program.M1(i As System.Int32) (OperationKind.MethodReferenceExpression, Type: null, IsInvalid) (Syntax: 'AddressOf M1') Instance Receiver: IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: Program, IsInvalid, IsImplicit) (Syntax: 'M1') ]]>.Value @@ -1797,7 +1797,7 @@ IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclaratio Initializer: IDelegateCreationExpression (OperationKind.DelegateCreationExpression, Type: System.Action, IsImplicit) (Syntax: 'AddressOf Method2') Target: - IMethodReferenceExpression: Sub M1.Method2() (OperationKind.MethodReferenceExpression, Type: System.Action) (Syntax: 'AddressOf Method2') + IMethodReferenceExpression: Sub M1.Method2() (OperationKind.MethodReferenceExpression, Type: null) (Syntax: 'AddressOf Method2') Instance Receiver: IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: M1, IsImplicit) (Syntax: 'Method2') ]]>.Value @@ -1823,7 +1823,7 @@ Module M1 End Module]]>.Value Dim expectedOperationTree = .Value @@ -1855,7 +1855,7 @@ IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclaratio Initializer: IDelegateCreationExpression (OperationKind.DelegateCreationExpression, Type: System.Action, IsImplicit) (Syntax: 'AddressOf o.ToString') Target: - IMethodReferenceExpression: Function System.Object.ToString() As System.String (IsVirtual) (OperationKind.MethodReferenceExpression, Type: System.Action) (Syntax: 'AddressOf o.ToString') + IMethodReferenceExpression: Function System.Object.ToString() As System.String (IsVirtual) (OperationKind.MethodReferenceExpression, Type: null) (Syntax: 'AddressOf o.ToString') Instance Receiver: ILocalReferenceExpression: o (OperationKind.LocalReferenceExpression, Type: System.Object) (Syntax: 'o') ]]>.Value @@ -1966,7 +1966,7 @@ IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclaratio Initializer: IDelegateCreationExpression (OperationKind.DelegateCreationExpression, Type: System.Func(Of System.String), IsInvalid, IsImplicit) (Syntax: 'AddressOf Method2') Target: - IMethodReferenceExpression: Function M1.Method2() As System.Int32 (OperationKind.MethodReferenceExpression, Type: System.Func(Of System.String), IsInvalid) (Syntax: 'AddressOf Method2') + IMethodReferenceExpression: Function M1.Method2() As System.Int32 (OperationKind.MethodReferenceExpression, Type: null, IsInvalid) (Syntax: 'AddressOf Method2') Instance Receiver: IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: M1, IsInvalid, IsImplicit) (Syntax: 'Method2') ]]>.Value @@ -2048,7 +2048,7 @@ IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclaratio Initializer: IDelegateCreationExpression (OperationKind.DelegateCreationExpression, Type: System.Action, IsImplicit) (Syntax: 'AddressOf Method2') Target: - IMethodReferenceExpression: Function M1.Method2() As System.Object (OperationKind.MethodReferenceExpression, Type: System.Action) (Syntax: 'AddressOf Method2') + IMethodReferenceExpression: Function M1.Method2() As System.Object (OperationKind.MethodReferenceExpression, Type: null) (Syntax: 'AddressOf Method2') Instance Receiver: IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: M1, IsImplicit) (Syntax: 'Method2') ]]>.Value @@ -2080,7 +2080,7 @@ IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclaratio Initializer: IDelegateCreationExpression (OperationKind.DelegateCreationExpression, Type: System.Action(Of System.Int32), IsImplicit) (Syntax: 'AddressOf Method2') Target: - IMethodReferenceExpression: Sub M1.Method2() (OperationKind.MethodReferenceExpression, Type: System.Action(Of System.Int32)) (Syntax: 'AddressOf Method2') + IMethodReferenceExpression: Sub M1.Method2() (OperationKind.MethodReferenceExpression, Type: null) (Syntax: 'AddressOf Method2') Instance Receiver: IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: M1, IsImplicit) (Syntax: 'Method2') ]]>.Value @@ -2153,7 +2153,7 @@ End Module Dim expectedOperationTree = .Value @@ -2181,7 +2181,7 @@ End Module Dim expectedOperationTree = .Value @@ -2322,7 +2322,7 @@ End Module Dim expectedOperationTree = .Value @@ -2358,7 +2358,7 @@ End Module Dim expectedOperationTree = .Value @@ -2389,7 +2389,7 @@ End Module Dim expectedOperationTree = .Value @@ -2420,7 +2420,7 @@ End Module Dim expectedOperationTree = .Value @@ -2448,7 +2448,7 @@ End Module Dim expectedOperationTree = .Value @@ -2632,7 +2632,7 @@ End Module Dim expectedOperationTree = .Value @@ -2667,7 +2667,7 @@ End Module Dim expectedOperationTree = .Value @@ -2699,7 +2699,7 @@ End Module Dim expectedOperationTree = .Value @@ -2730,7 +2730,7 @@ End Module Dim expectedOperationTree = .Value @@ -2758,7 +2758,7 @@ End Module Dim expectedOperationTree = .Value @@ -2942,7 +2942,7 @@ End Module Dim expectedOperationTree = .Value @@ -2977,7 +2977,7 @@ End Module Dim expectedOperationTree = .Value @@ -3009,7 +3009,7 @@ End Module Dim expectedOperationTree = .Value @@ -3037,7 +3037,7 @@ End Module]]>.Value Dim expectedOperationTree = .Value @@ -3107,7 +3107,7 @@ End Module]]>.Value Dim expectedOperationTree = .Value @@ -3135,7 +3135,7 @@ End Module]]>.Value Dim expectedOperationTree = .Value diff --git a/src/Compilers/VisualBasic/Test/Semantic/IOperation/IOperationTests_IEventAssignmentExpression.vb b/src/Compilers/VisualBasic/Test/Semantic/IOperation/IOperationTests_IEventAssignmentExpression.vb index a8fb12e36e2e880fbfe08fb28739cd5dc6756e48..00ab31fdd4ece46fc3ab4900b1cd028b5b80e714 100644 --- a/src/Compilers/VisualBasic/Test/Semantic/IOperation/IOperationTests_IEventAssignmentExpression.vb +++ b/src/Compilers/VisualBasic/Test/Semantic/IOperation/IOperationTests_IEventAssignmentExpression.vb @@ -38,7 +38,7 @@ IExpressionStatement (OperationKind.ExpressionStatement) (Syntax: 'AddHandler . Handler: IDelegateCreationExpression (OperationKind.DelegateCreationExpression, Type: System.Action, IsImplicit) (Syntax: 'AddressOf M') Target: - IMethodReferenceExpression: Sub TestClass.M() (OperationKind.MethodReferenceExpression, Type: System.Action) (Syntax: 'AddressOf M') + IMethodReferenceExpression: Sub TestClass.M() (OperationKind.MethodReferenceExpression, Type: null) (Syntax: 'AddressOf M') Instance Receiver: IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: TestClass, IsImplicit) (Syntax: 'M') ]]>.Value @@ -77,7 +77,7 @@ IExpressionStatement (OperationKind.ExpressionStatement) (Syntax: 'RemoveHandl . Handler: IDelegateCreationExpression (OperationKind.DelegateCreationExpression, Type: System.Action, IsImplicit) (Syntax: 'AddressOf M') Target: - IMethodReferenceExpression: Sub TestClass.M() (OperationKind.MethodReferenceExpression, Type: System.Action) (Syntax: 'AddressOf M') + IMethodReferenceExpression: Sub TestClass.M() (OperationKind.MethodReferenceExpression, Type: null) (Syntax: 'AddressOf M') Instance Receiver: IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: TestClass, IsImplicit) (Syntax: 'M') ]]>.Value @@ -116,7 +116,7 @@ IExpressionStatement (OperationKind.ExpressionStatement) (Syntax: 'AddHandler . Handler: IDelegateCreationExpression (OperationKind.DelegateCreationExpression, Type: System.Action, IsImplicit) (Syntax: 'AddressOf M') Target: - IMethodReferenceExpression: Sub TestClass.M() (OperationKind.MethodReferenceExpression, Type: System.Action) (Syntax: 'AddressOf M') + IMethodReferenceExpression: Sub TestClass.M() (OperationKind.MethodReferenceExpression, Type: null) (Syntax: 'AddressOf M') Instance Receiver: IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: TestClass, IsImplicit) (Syntax: 'M') ]]>.Value @@ -155,7 +155,7 @@ IExpressionStatement (OperationKind.ExpressionStatement) (Syntax: 'RemoveHandl . Handler: IDelegateCreationExpression (OperationKind.DelegateCreationExpression, Type: System.Action, IsImplicit) (Syntax: 'AddressOf M') Target: - IMethodReferenceExpression: Sub TestClass.M() (OperationKind.MethodReferenceExpression, Type: System.Action) (Syntax: 'AddressOf M') + IMethodReferenceExpression: Sub TestClass.M() (OperationKind.MethodReferenceExpression, Type: null) (Syntax: 'AddressOf M') Instance Receiver: IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: TestClass, IsImplicit) (Syntax: 'M') ]]>.Value @@ -237,7 +237,7 @@ IExpressionStatement (OperationKind.ExpressionStatement) (Syntax: 'AddHandler . Handler: IDelegateCreationExpression (OperationKind.DelegateCreationExpression, Type: System.Action, IsImplicit) (Syntax: 'AddressOf M') Target: - IMethodReferenceExpression: Sub TestClass.M() (OperationKind.MethodReferenceExpression, Type: System.Action) (Syntax: 'AddressOf M') + IMethodReferenceExpression: Sub TestClass.M() (OperationKind.MethodReferenceExpression, Type: null) (Syntax: 'AddressOf M') Instance Receiver: IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: TestClass, IsImplicit) (Syntax: 'M') ]]>.Value @@ -279,7 +279,7 @@ IExpressionStatement (OperationKind.ExpressionStatement, IsInvalid) (Syntax: 'Ad Handler: IDelegateCreationExpression (OperationKind.DelegateCreationExpression, Type: System.Action, IsImplicit) (Syntax: 'AddressOf M') Target: - IMethodReferenceExpression: Sub TestClass.M() (OperationKind.MethodReferenceExpression, Type: System.Action) (Syntax: 'AddressOf M') + IMethodReferenceExpression: Sub TestClass.M() (OperationKind.MethodReferenceExpression, Type: null) (Syntax: 'AddressOf M') Instance Receiver: IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: TestClass, IsImplicit) (Syntax: 'M') ]]>.Value diff --git a/src/Compilers/VisualBasic/Test/Semantic/IOperation/IOperationTests_IParameterReferenceExpression.vb b/src/Compilers/VisualBasic/Test/Semantic/IOperation/IOperationTests_IParameterReferenceExpression.vb index 70af562e35d024ba7142bab67a341c8e9c9f6fc0..724325b97a6ba260b4f70409ee0ac62a15d6d4ab 100644 --- a/src/Compilers/VisualBasic/Test/Semantic/IOperation/IOperationTests_IParameterReferenceExpression.vb +++ b/src/Compilers/VisualBasic/Test/Semantic/IOperation/IOperationTests_IParameterReferenceExpression.vb @@ -425,7 +425,7 @@ End Class]]>.Value Dim expectedOperationTree = .Value