ShaderTools.Hlsl.Parser.HlslParser.SkipBadTokens C# (CSharp) Method

SkipBadTokens() private method

private SkipBadTokens ( bool>.Func isNotExpectedFunction, bool>.Func abortFunction, SyntaxKind expected = null ) : PostSkipAction
isNotExpectedFunction bool>.Func
abortFunction bool>.Func
expected SyntaxKind
return PostSkipAction
        private PostSkipAction SkipBadTokens(
            Func<HlslParser, bool> isNotExpectedFunction,
            Func<HlslParser, bool> abortFunction,
            SyntaxKind? expected = null)
        {
            var action = PostSkipAction.Continue;
            var tokens = new List<SyntaxToken>();

            var first = true;
            while (isNotExpectedFunction(this))
            {
                if (abortFunction(this))
                {
                    action = PostSkipAction.Abort;
                    break;
                }

                tokens.Add(first && expected != null ? NextTokenWithPrejudice(expected.Value) : NextToken());
                first = false;
            }

            if (!_scanStack.Any() && tokens.Any())
            {
                var current = _tokens[_tokenIndex];

                var skippedTokensTrivia = CreateSkippedTokensTrivia(tokens);

                var leadingTrivia = new List<SyntaxNode>(current.LeadingTrivia.Length + 1);
                leadingTrivia.Add(skippedTokensTrivia);
                leadingTrivia.AddRange(current.LeadingTrivia);

                _tokens[_tokenIndex] = current
                    .WithLeadingTrivia(leadingTrivia)
                    .WithDiagnostic(Diagnostic.Format(
                        tokens.First().GetTextSpanRoot(),
                        DiagnosticId.TokenUnexpected,
                        tokens.First().Text));
            }

            return action;
        }
HlslParser