File: Symbols\Source\SynthesizedLambdaSymbol.vb
Web Access
Project: src\src\Compilers\VisualBasic\Portable\Microsoft.CodeAnalysis.VisualBasic.vbproj (Microsoft.CodeAnalysis.VisualBasic)
' 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 System.Collections.Immutable
Imports System.Runtime.CompilerServices
 
Namespace Microsoft.CodeAnalysis.VisualBasic.Symbols
 
    ''' <summary>
    ''' Represents a synthesized lambda. 
    ''' </summary>
    Friend NotInheritable Class SynthesizedLambdaSymbol
        Inherits LambdaSymbol
 
        Private ReadOnly _kind As SynthesizedLambdaKind
 
        Public Sub New(
            kind As SynthesizedLambdaKind,
            syntaxNode As SyntaxNode,
            parameters As ImmutableArray(Of BoundLambdaParameterSymbol),
            returnType As TypeSymbol,
            binder As Binder)
 
            MyBase.New(syntaxNode, parameters, returnType, binder)
            Debug.Assert((returnType Is ReturnTypePendingDelegate) = kind.IsQueryLambda)
 
            _kind = kind
        End Sub
 
        Public Overrides ReadOnly Property SynthesizedKind As SynthesizedLambdaKind
            Get
                Return _kind
            End Get
        End Property
 
        Public Overrides ReadOnly Property IsAsync As Boolean
            Get
                Return False
            End Get
        End Property
 
        Public Overrides ReadOnly Property IsIterator As Boolean
            Get
                Return False
            End Get
        End Property
 
        ''' <summary>
        ''' Gets a value indicating whether the symbol was generated by the compiler
        ''' rather than declared explicitly.
        ''' </summary>
        Public Overrides ReadOnly Property IsImplicitlyDeclared As Boolean
            Get
                Return True
            End Get
        End Property
 
        Public Overrides ReadOnly Property DeclaringSyntaxReferences As ImmutableArray(Of SyntaxReference)
            Get
                Return ImmutableArray(Of SyntaxReference).Empty
            End Get
        End Property
 
        Public Overrides Function Equals(obj As Object) As Boolean
            Return obj Is Me
        End Function
 
        Public Overrides Function GetHashCode() As Integer
            Return RuntimeHelpers.GetHashCode(Me)
        End Function
 
        Friend Overrides ReadOnly Property GenerateDebugInfoImpl As Boolean
            Get
                ' Delegate relaxation stub contains no user code, only a synthesized call to the target method.
                '
                ' Late-bound AddressOf lambda contains user code, but we don't allow debugging it. 
                ' It shouldn't really contain the code but to be backward compatible we need to replicate Dev12 behavior.
                Return _kind <> SynthesizedLambdaKind.DelegateRelaxationStub AndAlso
                       _kind <> SynthesizedLambdaKind.LateBoundAddressOfLambda
            End Get
        End Property
 
        Public Sub SetQueryLambdaReturnType(returnType As TypeSymbol)
            Debug.Assert(_kind.IsQueryLambda)
            Debug.Assert(m_ReturnType Is ReturnTypePendingDelegate)
 
            m_ReturnType = returnType
        End Sub
    End Class
End Namespace