Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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;
        }
Exemplo n.º 3
0
		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);
		}
Exemplo n.º 4
0
        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;

        }