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

ParseCastOrParenthesizedExpression() private method

private ParseCastOrParenthesizedExpression ( ) : ExpressionSyntax
return ShaderTools.Hlsl.Syntax.ExpressionSyntax
        private ExpressionSyntax ParseCastOrParenthesizedExpression()
        {
            Debug.Assert(Current.Kind == SyntaxKind.OpenParenToken);

            var resetPoint = GetResetPoint();

            // We have a decision to make -- is this a cast, or is it a parenthesized
            // expression?  Because look-ahead is cheap with our token stream, we check
            // to see if this "looks like" a cast (without constructing any parse trees)
            // to help us make the decision.
            if (ScanCast())
            {
                // Looks like a cast, so parse it as one.
                Reset(ref resetPoint);
                var openParen = Match(SyntaxKind.OpenParenToken);
                List<ArrayRankSpecifierSyntax> arrayRankSpecifiers;
                var type = ParseTypeForCast(out arrayRankSpecifiers);
                var closeParen = Match(SyntaxKind.CloseParenToken);
                var expr = ParseSubExpression(SyntaxFacts.GetOperatorPrecedence(SyntaxKind.CastExpression));
                return new CastExpressionSyntax(openParen, type, arrayRankSpecifiers, closeParen, expr);
            }

            // Doesn't look like a cast, so parse this as a parenthesized expression.
            {
                Reset(ref resetPoint);
                var openParen = Match(SyntaxKind.OpenParenToken);

                try
                {
                    CommaIsSeparatorStack.Push(false);
                    var expression = ParseSubExpression(0);
                    var closeParen = Match(SyntaxKind.CloseParenToken);
                    return new ParenthesizedExpressionSyntax(openParen, expression, closeParen);
                }
                finally
                {
                    CommaIsSeparatorStack.Pop();
                }
            }
        }
HlslParser