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); }