/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Compilers/VisualBasic/Portable/Analysis/FlowAnalysis/RegionReachableWalker.vb
56 строк
2 KB
Jonathon Marolf
update headers
23 янв 2020, 04:01
Не верифицирован
23 янв 2020, 04:01
91571a3
Код
Авторство
О чём код?
' 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.Runtime.InteropServices Imports Microsoft.CodeAnalysis.Text Imports Microsoft.CodeAnalysis.VisualBasic.Symbols Imports Microsoft.CodeAnalysis.VisualBasic.Syntax Imports TypeKind = Microsoft.CodeAnalysis.TypeKind Namespace Microsoft.CodeAnalysis.VisualBasic ''' <summary> ''' A region analysis walker that computes whether or not the region completes normally. It does this by determining ''' if the point at which the region ends is reachable. ''' </summary> Friend Class RegionReachableWalker Inherits AbstractRegionControlFlowPass Friend Overloads Shared Sub Analyze(info As FlowAnalysisInfo, region As FlowAnalysisRegionInfo, <Out()> ByRef startPointIsReachable As Boolean, <Out()> ByRef endPointIsReachable As Boolean) Dim walker = New RegionReachableWalker(info, region) Try If walker.Analyze() Then startPointIsReachable = If(walker._regionStartPointIsReachable.HasValue, walker._regionStartPointIsReachable.Value, True) endPointIsReachable = If(walker._regionEndPointIsReachable.HasValue, walker._regionEndPointIsReachable.Value, walker.State.Alive) Else startPointIsReachable = True startPointIsReachable = False End If Finally walker.Free() End Try End Sub Private _regionStartPointIsReachable As Boolean? Private _regionEndPointIsReachable As Boolean? Private Sub New(info As FlowAnalysisInfo, region As FlowAnalysisRegionInfo) MyBase.New(info, region) End Sub Protected Overrides Sub EnterRegion() _regionStartPointIsReachable = State.Alive MyBase.EnterRegion() End Sub Protected Overrides Sub LeaveRegion() _regionEndPointIsReachable = State.Alive MyBase.LeaveRegion() End Sub End Class End Namespace