public virtual object VisitArrayCreateExpression(ArrayCreationExpression arrayCreateExpression, object data) { stackMap.Push(arrayCreateExpression); arrayCreateExpression.Type.AcceptVisitor(this, data); if (arrayCreateExpression.Initializer != null) { arrayCreateExpression.Initializer.AcceptVisitor(this, data); } stackMap.Pop(); return(null); }
private ArrayCreationExpression ParseArrayCreation(IType type) { ArrayCreationExpression arNode = new ArrayCreationExpression(curtok); arNode.Type = type; Advance(); // over lbracket bool mustHaveInitializer; if (curtok.ID == TokenID.Comma) { int comma = 0; // comma specifier do { ++comma; Advance(); } while (curtok.ID == TokenID.Comma); arNode.AdditionalRankSpecifiers.Add(comma); mustHaveInitializer = true; } else if (curtok.ID == TokenID.RBracket) { arNode.AdditionalRankSpecifiers.Add(0); mustHaveInitializer = true; } else { // this tests for literal size declarations on first rank specifiers arNode.RankSpecifier = ParseExpressionList(); mustHaveInitializer = false; } AssertAndAdvance(TokenID.RBracket); // now any 'rank only' specifiers (without size decls) while (curtok.ID == TokenID.LBracket) { Advance(); // over lbracket int commaCount = 0; while (curtok.ID == TokenID.Comma) { commaCount++; Advance(); } arNode.AdditionalRankSpecifiers.Add(commaCount); AssertAndAdvance(TokenID.RBracket); } if (curtok.ID == TokenID.LCurly) arNode.Initializer = ParseArrayInitializer(); else if (mustHaveInitializer) ReportError("Array allocation with only rank specifiers must be initialized.", arNode.RelatedToken); return arNode; }
private void ParseArrayCreation(IType type) { ArrayCreationExpression arNode = new ArrayCreationExpression(curtok); arNode.Type = type; if (curtok.ID != TokenID.LCurly) { Advance(); // over lbracket } if (curtok.ID == TokenID.Comma) { int comma = 0; // comma specifier do { ++comma; Advance(); } while (curtok.ID == TokenID.Comma); arNode.AdditionalRankSpecifiers.Add(comma); } else { if (curtok.ID == TokenID.RBracket) { arNode.AdditionalRankSpecifiers.Add(0); } else { // this tests for literal size declarations on first rank specifiers if (curtok.ID != TokenID.Invalid && curtok.ID != TokenID.Comma && curtok.ID != TokenID.RBracket && curtok.ID != TokenID.LCurly) { //Advance(); // over lbracket arNode.RankSpecifier = ParseExpressionList(TokenID.RBracket); } } } if (curtok.ID == TokenID.RBracket) { Advance(); } // now any 'rank only' specifiers (without size decls) while (curtok.ID == TokenID.LBracket) { Advance(); // over lbracket int commaCount = 0; while (curtok.ID == TokenID.Comma) { commaCount++; Advance(); } arNode.AdditionalRankSpecifiers.Add(commaCount); AssertAndAdvance(TokenID.RBracket); } if (curtok.ID == TokenID.LCurly) { arNode.Initializer = new ArrayInitializerExpression(curtok); Advance(); arNode.Initializer.Expressions = ParseExpressionList(TokenID.RCurly); } exprStack.Push(arNode); }
public virtual object VisitArrayCreateExpression(ArrayCreationExpression arrayCreateExpression, object data) { stackMap.Push(arrayCreateExpression); arrayCreateExpression.Type.AcceptVisitor(this, data); if (arrayCreateExpression.Initializer != null) { arrayCreateExpression.Initializer.AcceptVisitor(this, data); } stackMap.Pop(); return null; }