Ejemplo n.º 1
0
        private IdentifierSyntax ParseIdentifier()
        {
            StartSpan();

            if (Peek(TokenType.Identifier))
            {
                Expect(TokenType.Identifier, out string i);
                var id = SyntaxFactory.Identifier(i);
                if (PeekAndExpect(TokenType.LeftBracket))
                {
                    _operators.Push(ExpressionSyntax.Sentinel);
                    ExpressionSyntax e = GetExpression();

                    id = SyntaxFactory.ArrayAccessExpression(id, e);
                    Expect(TokenType.RightBracket);
                    _operators.Pop();
                }

                return(id.SetSpan <IdentifierSyntax>(EndSpan()));
            }
            else
            {
                DestroySpan();
                return(null);
            }
        }
Ejemplo n.º 2
0
        public override SyntaxNode Visit(ArrayAccessExpressionSyntax pNode)
        {
            var n = pNode.Identifier.Accept <IdentifierSyntax>(this);

            ExpressionSyntax i = null;

            using (new ContextValue(this, "MemberContext", new MemberAccessContext()))
            {
                i = pNode.Index.Accept <ExpressionSyntax>(this);
            }

            return(SyntaxFactory.ArrayAccessExpression(n, i));
        }
Ejemplo n.º 3
0
        private IdentifierSyntax ParseIdentifierComplete()
        {
            StartSpan();

            if (Peek(TokenType.Identifier))
            {
                Expect(TokenType.Identifier, out string i);
                var id = SyntaxFactory.Identifier(i);
                if (PeekAndExpect(TokenType.LeftBracket))
                {
                    _operators.Push(ExpressionSyntax.Sentinel);
                    ExpressionSyntax e = GetExpression();

                    id = SyntaxFactory.ArrayAccessExpression(id, e);
                    Expect(TokenType.RightBracket);
                    _operators.Pop();
                }
                else if (PeekAndExpect(TokenType.LessThan))
                {
                    do
                    {
                        Expect(TokenType.Identifier, out string typeHint);
                        id.SetTypeHints(new List <string>()
                        {
                            typeHint
                        });
                    } while (PeekAndExpect(TokenType.Comma));

                    Expect(TokenType.GreaterThan);
                }
                return(id.SetSpan <IdentifierSyntax>(EndSpan()));
            }
            else if (PeekAndExpect(TokenType.Underscore))
            {
                return(SyntaxFactory.ValueDiscard().SetSpan <ValueDiscardSyntax>(EndSpan()));
            }
            else
            {
                DestroySpan();
                return(null);
            }
        }