in src/Compilers/VisualBasic/Portable/Parser/Parser.vb [924:1260]
Private Function ParseStatementInMethodBodyCore() As StatementSyntax
_cancellationToken.ThrowIfCancellationRequested()
Select Case CurrentToken.Kind
Case SyntaxKind.GoToKeyword
Return ParseGotoStatement()
Case SyntaxKind.CaseKeyword
Return ParseCaseStatement()
Case SyntaxKind.SelectKeyword
Return ParseSelectStatement()
Case SyntaxKind.WithKeyword, SyntaxKind.WhileKeyword
Return ParseExpressionBlockStatement()
Case SyntaxKind.UsingKeyword
Return ParseUsingStatement()
Case SyntaxKind.SyncLockKeyword
Return ParseExpressionBlockStatement()
Case SyntaxKind.TryKeyword
Return ParseTry()
Case SyntaxKind.CatchKeyword
Return ParseCatch()
Case SyntaxKind.FinallyKeyword
Return ParseFinally()
Case SyntaxKind.IfKeyword
Return ParseIfStatement()
Case SyntaxKind.ElseKeyword
If PeekToken(1).Kind = SyntaxKind.IfKeyword Then
Return ParseElseIfStatement()
Else
Return ParseElseStatement()
End If
Case SyntaxKind.ElseIfKeyword
Return ParseElseIfStatement()
Case SyntaxKind.DoKeyword
Return ParseDoStatement()
Case SyntaxKind.LoopKeyword
Return ParseLoopStatement()
Case SyntaxKind.ForKeyword
Return ParseForStatement()
Case SyntaxKind.NextKeyword
Return ParseNextStatement()
Case SyntaxKind.EndIfKeyword, SyntaxKind.WendKeyword
Return ParseAnachronisticStatement()
Case SyntaxKind.EndKeyword
Return ParseEndStatement()
Case SyntaxKind.ReturnKeyword
Return ParseReturnStatement()
Case SyntaxKind.StopKeyword
Return ParseStopOrEndStatement()
Case SyntaxKind.ContinueKeyword
Return ParseContinueStatement()
Case SyntaxKind.ExitKeyword
Return ParseExitStatement()
Case SyntaxKind.OnKeyword
Return ParseOnErrorStatement()
Case SyntaxKind.ResumeKeyword
Return ParseResumeStatement()
Case SyntaxKind.CallKeyword
Return ParseCallStatement()
Case SyntaxKind.RaiseEventKeyword
Return ParseRaiseEventStatement()
Case SyntaxKind.ReDimKeyword
Return ParseRedimStatement()
Case SyntaxKind.AddHandlerKeyword, SyntaxKind.RemoveHandlerKeyword
Return ParseHandlerStatement()
Case SyntaxKind.PartialKeyword,
SyntaxKind.PrivateKeyword,
SyntaxKind.ProtectedKeyword,
SyntaxKind.PublicKeyword,
SyntaxKind.FriendKeyword,
SyntaxKind.NotOverridableKeyword,
SyntaxKind.OverridableKeyword,
SyntaxKind.MustInheritKeyword,
SyntaxKind.MustOverrideKeyword,
SyntaxKind.StaticKeyword,
SyntaxKind.SharedKeyword,
SyntaxKind.ShadowsKeyword,
SyntaxKind.WithEventsKeyword,
SyntaxKind.OverloadsKeyword,
SyntaxKind.OverridesKeyword,
SyntaxKind.ConstKeyword,
SyntaxKind.DimKeyword,
SyntaxKind.WideningKeyword,
SyntaxKind.NarrowingKeyword,
SyntaxKind.DefaultKeyword,
SyntaxKind.ReadOnlyKeyword,
SyntaxKind.WriteOnlyKeyword,
SyntaxKind.LessThanToken
Dim attributes As CoreInternalSyntax.SyntaxList(Of AttributeListSyntax) = Nothing
If Me.CurrentToken.Kind = Global.Microsoft.CodeAnalysis.VisualBasic.SyntaxKind.LessThanToken Then
attributes = ParseAttributeLists(allowFileLevelAttributes:=False)
End If
Dim modifiers = ParseSpecifiers()
If Not modifiers.Any(SyntaxKind.DimKeyword, SyntaxKind.ConstKeyword) Then
Select Case CurrentToken.Kind
Case SyntaxKind.SubKeyword,
SyntaxKind.ClassKeyword,
SyntaxKind.EnumKeyword,
SyntaxKind.StructureKeyword,
SyntaxKind.InterfaceKeyword,
SyntaxKind.FunctionKeyword,
SyntaxKind.OperatorKeyword,
SyntaxKind.PropertyKeyword,
SyntaxKind.EventKeyword
Return ParseSpecifierDeclaration(attributes, modifiers)
Case SyntaxKind.IdentifierToken
Dim contextualKind As SyntaxKind = Nothing
If TryIdentifierAsContextualKeyword(CurrentToken, contextualKind) Then
If contextualKind = SyntaxKind.CustomKeyword AndAlso PeekToken(1).Kind = SyntaxKind.EventKeyword Then
Return ParseSpecifierDeclaration(attributes, modifiers)
End If
End If
End Select
End If
Return ParseVarDeclStatement(attributes, modifiers)
Case SyntaxKind.SetKeyword, SyntaxKind.LetKeyword
Return ParseAssignmentStatement()
Case SyntaxKind.ErrorKeyword
Return ParseError()
Case SyntaxKind.ThrowKeyword
Return ParseThrowStatement()
Case SyntaxKind.IntegerLiteralToken
If IsFirstStatementOnLine(CurrentToken) Then
Return ParseLabel()
End If
Case SyntaxKind.IdentifierToken
If ShouldParseAsLabel() Then
Return ParseLabel()
End If
Dim contextualKind As SyntaxKind = Nothing
If TryIdentifierAsContextualKeyword(CurrentToken, contextualKind) Then
If contextualKind = SyntaxKind.MidKeyword Then
If PeekToken(1).Kind = SyntaxKind.OpenParenToken Then
Return ParseMid()
End If
ElseIf contextualKind = SyntaxKind.CustomKeyword AndAlso PeekToken(1).Kind = SyntaxKind.EventKeyword Then
Return ParseSpecifierDeclaration()
ElseIf contextualKind = SyntaxKind.AsyncKeyword OrElse contextualKind = SyntaxKind.IteratorKeyword Then
Dim nextToken = PeekToken(1)
If SyntaxFacts.IsSpecifier(nextToken.Kind) OrElse SyntaxFacts.CanStartSpecifierDeclaration(nextToken.Kind) Then
Return ParseSpecifierDeclaration()
End If
ElseIf contextualKind = SyntaxKind.AwaitKeyword AndAlso
Context.IsWithinAsyncMethodOrLambda Then
Return ParseAwaitStatement()
ElseIf contextualKind = SyntaxKind.YieldKeyword AndAlso
Context.IsWithinIteratorMethodOrLambdaOrProperty Then
Return ParseYieldStatement()
End If
End If
Return ParseAssignmentOrInvocationStatement()
Case SyntaxKind.DotToken,
SyntaxKind.ExclamationToken,
SyntaxKind.MyBaseKeyword,
SyntaxKind.MyClassKeyword,
SyntaxKind.MeKeyword,
SyntaxKind.GlobalKeyword,
SyntaxKind.ShortKeyword,
SyntaxKind.UShortKeyword,
SyntaxKind.IntegerKeyword,
SyntaxKind.UIntegerKeyword,
SyntaxKind.LongKeyword,
SyntaxKind.ULongKeyword,
SyntaxKind.DecimalKeyword,
SyntaxKind.SingleKeyword,
SyntaxKind.DoubleKeyword,
SyntaxKind.SByteKeyword,
SyntaxKind.ByteKeyword,
SyntaxKind.BooleanKeyword,
SyntaxKind.CharKeyword,
SyntaxKind.DateKeyword,
SyntaxKind.StringKeyword,
SyntaxKind.VariantKeyword,
SyntaxKind.ObjectKeyword,
SyntaxKind.DirectCastKeyword,
SyntaxKind.TryCastKeyword,
SyntaxKind.CTypeKeyword,
SyntaxKind.CBoolKeyword,
SyntaxKind.CDateKeyword,
SyntaxKind.CDblKeyword,
SyntaxKind.CSByteKeyword,
SyntaxKind.CByteKeyword,
SyntaxKind.CCharKeyword,
SyntaxKind.CShortKeyword,
SyntaxKind.CUShortKeyword,
SyntaxKind.CIntKeyword,
SyntaxKind.CUIntKeyword,
SyntaxKind.CLngKeyword,
SyntaxKind.CULngKeyword,
SyntaxKind.CSngKeyword,
SyntaxKind.CStrKeyword,
SyntaxKind.CDecKeyword,
SyntaxKind.CObjKeyword,
SyntaxKind.GetTypeKeyword,
SyntaxKind.GetXmlNamespaceKeyword
Return ParseAssignmentOrInvocationStatement()
Case SyntaxKind.EmptyToken
Return ParseEmptyStatement()
Case SyntaxKind.ColonToken,
SyntaxKind.StatementTerminatorToken
Debug.Assert(False, "Unexpected terminator: " & CurrentToken.Kind.ToString())
Case SyntaxKind.EraseKeyword
Return ParseErase()
Case SyntaxKind.GetKeyword
If (IsValidStatementTerminator(PeekToken(1)) OrElse PeekToken(1).Kind = SyntaxKind.OpenParenToken) AndAlso
Context.IsWithin(SyntaxKind.SetAccessorBlock, SyntaxKind.GetAccessorBlock) Then
Return ParsePropertyOrEventAccessor(SyntaxKind.GetAccessorStatement, Nothing, Nothing)
Else
Return ReportUnrecognizedStatementError(ERRID.ERR_ObsoleteGetStatement)
End If
Case SyntaxKind.GosubKeyword
Return ParseAnachronisticStatement()
Case SyntaxKind.InheritsKeyword,
SyntaxKind.ImplementsKeyword,
SyntaxKind.OptionKeyword,
SyntaxKind.ImportsKeyword,
SyntaxKind.DeclareKeyword,
SyntaxKind.DelegateKeyword,
SyntaxKind.InterfaceKeyword,
SyntaxKind.PropertyKeyword,
SyntaxKind.SubKeyword,
SyntaxKind.FunctionKeyword,
SyntaxKind.OperatorKeyword,
SyntaxKind.EventKeyword,
SyntaxKind.NamespaceKeyword,
SyntaxKind.ClassKeyword,
SyntaxKind.StructureKeyword,
SyntaxKind.EnumKeyword,
SyntaxKind.ModuleKeyword
Return ParseDeclarationStatementInternal()
Case SyntaxKind.QuestionToken
If CanStartConsequenceExpression(Me.PeekToken(1).Kind, qualified:=False) Then
Return ParseAssignmentOrInvocationStatement()
Else
Return ParsePrintStatement()
End If
Case Else
If CanFollowStatement(CurrentToken) Then
Return InternalSyntaxFactory.EmptyStatement
End If
End Select
Return ReportUnrecognizedStatementError(ERRID.ERR_Syntax)
End Function