| File: Parser\BlockContexts\CaseBlockContext.vb | Web Access |
| Project: 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 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 CaseBlockContext Inherits ExecutableStatementContext Friend Sub New(contextKind As SyntaxKind, statement As StatementSyntax, prevContext As BlockContext) MyBase.New(contextKind, statement, prevContext) Debug.Assert((contextKind = SyntaxKind.CaseBlock AndAlso statement.Kind = SyntaxKind.CaseStatement) OrElse (contextKind = SyntaxKind.CaseElseBlock AndAlso statement.Kind = SyntaxKind.CaseElseStatement)) End Sub Friend Overrides Function ProcessSyntax(node As VisualBasicSyntaxNode) As BlockContext Select Case node.Kind Case SyntaxKind.CaseStatement, SyntaxKind.CaseElseStatement 'TODO - In Dev11 this error is reported on the case keyword and not the whole statement If BlockKind = SyntaxKind.CaseElseBlock Then node = Parser.ReportSyntaxError(node, ERRID.ERR_CaseAfterCaseElse) End If 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.CaseStatement, SyntaxKind.CaseElseStatement Return UseSyntax(node, newContext) Case Else Return MyBase.TryLinkSyntax(node, newContext) End Select End Function Friend Overrides Function CreateBlockSyntax(endStmt As StatementSyntax) As VisualBasicSyntaxNode Debug.Assert(endStmt Is Nothing) Debug.Assert(BeginStatement IsNot Nothing) Dim result As VisualBasicSyntaxNode If BlockKind = SyntaxKind.CaseBlock Then result = SyntaxFactory.CaseBlock(DirectCast(BeginStatement, CaseStatementSyntax), Me.Body()) Else result = SyntaxFactory.CaseElseBlock(DirectCast(BeginStatement, CaseStatementSyntax), Me.Body()) End If FreeStatements() Return result End Function Friend Overrides Function EndBlock(endStmt As StatementSyntax) As BlockContext Dim blockSyntax = CreateBlockSyntax(Nothing) Dim context = PrevBlock.ProcessSyntax(blockSyntax) Debug.Assert(context Is PrevBlock) Return PrevBlock.EndBlock(endStmt) End Function End Class End Namespace