Beispiel #1
0
        private ExpressionSyntax ParsePostFixExpression(ExpressionSyntax expr)
        {
            Debug.Assert(expr != null);

            while (true)
            {
                var tk = Current.Kind;
                switch (tk)
                {
                case SyntaxKind.OpenParenToken:
                    expr = new InvocationExpressionSyntax(expr, ParseParenthesizedArgumentList(false));
                    break;

                case SyntaxKind.OpenBracketToken:
                    expr = new ElementAccessExpressionSyntax(expr,
                                                             Match(SyntaxKind.OpenBracketToken),
                                                             ParseExpression(),
                                                             Match(SyntaxKind.CloseBracketToken));
                    break;

                case SyntaxKind.PlusPlusToken:
                case SyntaxKind.MinusMinusToken:
                    expr = new PostfixUnaryExpressionSyntax(SyntaxFacts.GetPostfixUnaryExpression(tk), expr, NextToken());
                    break;

                case SyntaxKind.DotToken:
                    expr = new MemberAccessExpressionSyntax(expr, NextToken(), ParseIdentifier());
                    break;

                default:
                    return(expr);
                }
            }
        }
 public SyntaxKind GetKind()
 {
     if (Kind != SyntaxKind.None)
     {
         return(Kind);
     }
     return(SyntaxFacts.GetPostfixUnaryExpression(TameSyntaxFacts.SyntaxKindFromStr(OperatorTokenStr)));
 }
        public void TestPostUnaryOperators(SyntaxKind kind)
        {
            var text = "a" + kind.GetText();
            var expr = ParseExpression(text);

            Assert.NotNull(expr);
            var opKind = SyntaxFacts.GetPostfixUnaryExpression(kind);

            Assert.Equal(opKind, expr.Kind);
            Assert.Equal(text, expr.ToString());
            Assert.Equal(0, expr.GetDiagnostics().Count());
            var us = (PostfixUnaryExpressionSyntax)expr;

            Assert.NotNull(us.OperatorToken);
            Assert.Equal(kind, us.OperatorToken.Kind);
            Assert.NotNull(us.Operand);
            Assert.Equal(SyntaxKind.IdentifierName, us.Operand.Kind);
            Assert.Equal("a", us.Operand.ToString());
        }
        public void TestPostfixUnaryOperator(SyntaxKind kind)
        {
            var text      = "a" + kind.GetText() + ";";
            var statement = ParseStatement(text);

            Assert.NotNull(statement);
            Assert.Equal(SyntaxKind.ExpressionStatement, statement.Kind);
            Assert.Equal(text, statement.ToString());
            Assert.Equal(0, statement.GetDiagnostics().Count());

            var es = (ExpressionStatementSyntax)statement;

            Assert.NotNull(es.Expression);
            Assert.NotNull(es.SemicolonToken);
            Assert.False(es.SemicolonToken.IsMissing);

            var opKind = SyntaxFacts.GetPostfixUnaryExpression(kind);

            Assert.Equal(opKind, es.Expression.Kind);
            var us = (PostfixUnaryExpressionSyntax)es.Expression;

            Assert.Equal("a", us.Operand.ToString());
            Assert.Equal(kind, us.OperatorToken.Kind);
        }