|
' 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.Text
Imports Microsoft.CodeAnalysis.VisualBasic.Symbols
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
'-----------------------------------------------------------------------------
' Contains the definition of the BlockContext
'-----------------------------------------------------------------------------
Namespace Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax
Friend NotInheritable Class CatchPartContext
Inherits ExecutableStatementContext
Friend Sub New(statement As StatementSyntax, prevContext As BlockContext)
MyBase.New(SyntaxKind.CatchBlock, statement, prevContext)
Debug.Assert(statement.Kind = SyntaxKind.CatchStatement)
End Sub
Friend Overrides Function ProcessSyntax(node As VisualBasicSyntaxNode) As BlockContext
Debug.Assert(node IsNot Nothing)
Select Case node.Kind
Case SyntaxKind.CatchStatement, SyntaxKind.FinallyStatement
Dim context = PrevBlock.ProcessSyntax(CreateBlockSyntax(Nothing))
Debug.Assert(context Is PrevBlock)
Return context.ProcessSyntax(node)
End Select
Return MyBase.ProcessSyntax(node)
End Function
Friend Overrides Function TryLinkSyntax(node As VisualBasicSyntaxNode, ByRef newContext As BlockContext) As LinkResult
newContext = Nothing
Select Case node.Kind
Case _
SyntaxKind.CatchStatement,
SyntaxKind.FinallyStatement
Return UseSyntax(node, newContext)
Case Else
Return MyBase.TryLinkSyntax(node, newContext)
End Select
End Function
Friend Overrides Function CreateBlockSyntax(statement As StatementSyntax) As VisualBasicSyntaxNode
Debug.Assert(statement Is Nothing)
Debug.Assert(BeginStatement IsNot Nothing)
Dim result = SyntaxFactory.CatchBlock(DirectCast(BeginStatement, CatchStatementSyntax), Me.Body())
FreeStatements()
Return result
End Function
Friend Overrides Function EndBlock(statement As StatementSyntax) As BlockContext
Dim context = PrevBlock.ProcessSyntax(CreateBlockSyntax(Nothing))
Debug.Assert(context Is PrevBlock)
Return context.EndBlock(statement)
End Function
End Class
End Namespace
|