File: Analysis\FlowAnalysis\DataFlowPass.VariableIdentifier.vb
Web Access
Project: src\src\roslyn\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
Imports System.Collections.Generic
Imports System.Diagnostics
Imports System.Threading
Imports Microsoft.CodeAnalysis.Text
Imports Microsoft.CodeAnalysis.VisualBasic.Symbols
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax

Namespace Microsoft.CodeAnalysis.VisualBasic
    Partial Friend Class DataFlowPass
        Inherits AbstractFlowPass(Of LocalState)

        ''' <summary> Represents variable symbol combined with the containing variable slot </summary>
        Protected Structure VariableIdentifier
            Implements IEquatable(Of VariableIdentifier)

            Public Shared None As VariableIdentifier = New VariableIdentifier()

            Public Sub New(symbol As Symbol, containingSlot As Integer)
                Debug.Assert(symbol IsNot Nothing)
                Me.Symbol = symbol
                Me.ContainingSlot = containingSlot
            End Sub

            Public ReadOnly Symbol As Symbol

            Public ReadOnly ContainingSlot As Integer

            Public ReadOnly Property Exists As Boolean
                Get
                    Return Symbol IsNot Nothing
                End Get
            End Property

            Public Overrides Function GetHashCode() As Integer
                Return Hash.Combine(Me.Symbol.GetHashCode, Me.ContainingSlot.GetHashCode)
            End Function

            Public Overloads Function Equals(obj As VariableIdentifier) As Boolean Implements IEquatable(Of VariableIdentifier).Equals
                Return Me.Symbol.Equals(obj.Symbol) AndAlso Me.ContainingSlot = obj.ContainingSlot
            End Function

            Public Overrides Function Equals(obj As Object) As Boolean
                Debug.Assert(obj IsNot Nothing)
                Dim other = DirectCast(obj, VariableIdentifier?)
                Return Equals(other.Value)
            End Function

            Public Shared Operator =(left As VariableIdentifier, right As VariableIdentifier) As Boolean
                Return left.Equals(right)
            End Operator

            Public Shared Operator <>(left As VariableIdentifier, right As VariableIdentifier) As Boolean
                Return Not left.Equals(right)
            End Operator

        End Structure

    End Class

End Namespace