Пример #1
0
        internal static SyntaxToken Create(SyntaxKind kind, CSharpSyntaxNode leading, CSharpSyntaxNode trailing)
        {
            if (kind > LastTokenWithWellKnownText)
            {
                if (!SyntaxKindFacts.IsAnyToken(kind))
                {
                    throw new ArgumentException(string.Format(CSharpResources.ThisMethodCanOnlyBeUsedToCreateTokens, kind), "kind");
                }

                return(CreateMissing(kind, leading, trailing));
            }

            if (leading == null)
            {
                if (trailing == null)
                {
                    return(TokensWithNoTrivia[(int)kind].Value);
                }
                else if (trailing == SyntaxFactory.Space)
                {
                    return(TokensWithSingleTrailingSpace[(int)kind].Value);
                }
                else if (trailing == SyntaxFactory.CarriageReturnLineFeed)
                {
                    return(TokensWithSingleTrailingCRLF[(int)kind].Value);
                }
            }

            if (leading == SyntaxFactory.ElasticZeroSpace && trailing == SyntaxFactory.ElasticZeroSpace)
            {
                return(TokensWithElasticTrivia[(int)kind].Value);
            }

            return(new SyntaxTokenWithTrivia(kind, leading, trailing));
        }
Пример #2
0
 protected SyntaxToken EatToken(SyntaxKind kind, ErrorCode code, bool reportError = true)
 {
     Debug.Assert(SyntaxKindFacts.IsAnyToken(kind));
     if (this.CurrentToken.Kind != kind)
     {
         return(CreateMissingToken(kind, code, reportError));
     }
     else
     {
         return(this.EatToken());
     }
 }
Пример #3
0
        protected SyntaxToken EatTokenWithPrejudice(SyntaxKind kind)
        {
            var token = this.CurrentToken;

            Debug.Assert(SyntaxKindFacts.IsAnyToken(kind));
            if (token.Kind != kind)
            {
                token = WithAdditionalDiagnostics(token, this.GetExpectedTokenError(kind, token.Kind));
            }

            this.MoveToNextToken();
            return(token);
        }
Пример #4
0
        internal static SyntaxToken Token(CSharpSyntaxNode leading, SyntaxKind kind, string text, string valueText, CSharpSyntaxNode trailing)
        {
            Debug.Assert(SyntaxKindFacts.IsAnyToken(kind));
            Debug.Assert(kind != SyntaxKind.IdentifierToken);
            Debug.Assert(kind != SyntaxKind.CharacterLiteralToken);
            Debug.Assert(kind != SyntaxKind.NumericLiteralToken);

            string defaultText = SyntaxKindFacts.GetText(kind);

            return(kind >= SyntaxToken.FirstTokenWithWellKnownText && kind <= SyntaxToken.LastTokenWithWellKnownText && text == defaultText && valueText == defaultText
                                ? Token(leading, kind, trailing)
                                : SyntaxToken.WithValue(kind, leading, text, valueText, trailing));
        }
Пример #5
0
        protected SyntaxToken EatContextualToken(SyntaxKind kind, bool reportError = true)
        {
            Debug.Assert(SyntaxKindFacts.IsAnyToken(kind));

            var contextualKind = this.CurrentToken.ContextualKind;

            if (contextualKind != kind)
            {
                return(CreateMissingToken(kind, contextualKind, reportError));
            }
            else
            {
                return(ConvertToKeyword(this.EatToken()));
            }
        }
Пример #6
0
        //this method is called very frequently
        //we should keep it simple so that it can be inlined.
        protected SyntaxToken EatToken(SyntaxKind kind)
        {
            Debug.Assert(SyntaxKindFacts.IsAnyToken(kind));

            var ct = this.CurrentToken;

            if (ct.Kind == kind)
            {
                MoveToNextToken();
                return(ct);
            }

            //slow part of EatToken(SyntaxKind kind)
            return(CreateMissingToken(kind, this.CurrentToken.Kind, reportError: true));
        }
Пример #7
0
        protected SyntaxToken EatToken(SyntaxKind kind, bool reportError)
        {
            if (reportError)
            {
                return(EatToken(kind));
            }

            Debug.Assert(SyntaxKindFacts.IsAnyToken(kind));
            if (this.CurrentToken.Kind != kind)
            {
                // should we eat the current ParseToken's leading trivia?
                return(SyntaxFactory.MissingToken(kind));
            }
            else
            {
                return(this.EatToken());
            }
        }
Пример #8
0
            public Cursor MoveToFirstToken()
            {
                var cursor = this;

                if (!cursor.IsFinished)
                {
                    for (var node = cursor.CurrentNodeOrToken; node.CSharpKind() != SyntaxKind.None && !SyntaxKindFacts.IsAnyToken(node.CSharpKind()); node = cursor.CurrentNodeOrToken)
                    {
                        cursor = cursor.MoveToFirstChild();
                    }
                }

                return(cursor);
            }