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