ShaderTools.Hlsl.Parser.HlslLexer.LexDirectiveToken C# (CSharp) Method

LexDirectiveToken() private method

private LexDirectiveToken ( ) : SyntaxToken
return SyntaxToken
        private SyntaxToken LexDirectiveToken()
        {
            _kind = SyntaxKind.BadToken;
            _contextualKind = SyntaxKind.BadToken;

            _diagnostics.Clear();
            _start = _charReader.Position;

            var trailingTrivia = new List<SyntaxNode>();

            var isEndOfLine = false;

            switch (_charReader.Current)
            {
                case '#':
                    NextChar();
                    if (_charReader.Current == '#')
                    {
                        NextChar();
                        _kind = SyntaxKind.HashHashToken;
                    }
                    else
                    {
                        _kind = SyntaxKind.HashToken;
                        _currentDirectiveKind = null;
                    }
                    break;

                case '\r':
                case '\n':
                    _kind = SyntaxKind.EndOfDirectiveToken;
                    _currentDirectiveKind = null;
                    isEndOfLine = true;
                    break;

                case '\0':
                    _kind = SyntaxKind.EndOfDirectiveToken;
                    _currentDirectiveKind = null;
                    break;

                case '<':
                    if (_currentDirectiveKind != SyntaxKind.IncludeKeyword)
                        goto default;
                    ReadBracketedString();
                    break;

                default:
                    ReadToken();
                    if (_contextualKind.IsPreprocessorDirective())
                        _currentDirectiveKind = _contextualKind;
                    break;
            }

            var end = _charReader.Position;
            var kind = _kind;
            var span = TextSpan.FromBounds(Text, _start, end);
            var text = Text.GetText(span);
            var diagnostics = _diagnostics.ToImmutableArray();

            LexDirectiveTrailingTrivia(trailingTrivia, kind, isEndOfLine);

            var token = new SyntaxToken(kind, _contextualKind, false, MakeAbsolute(span), span, text, _value, 
                ImmutableArray<SyntaxNode>.Empty, trailingTrivia.ToImmutableArray(),
                diagnostics, null, false);

            return token;
        }