コード例 #1
0
 // ForStatement and UsingStatement use a LocalVariableDeclaration,
 // so they don't need to be visited separately
 public override object Visit(ForeachStatement foreachStatement, object data)
 {
     AddVariable(foreachStatement.TypeReference,
                 foreachStatement.VariableName,
                 foreachStatement.StartLocation,
                 foreachStatement.EndLocation);
     if (foreachStatement.Expression != null) {
         foreachStatement.Expression.AcceptVisitor(this, data);
     }
     if (foreachStatement.EmbeddedStatement == null) {
         return data;
     }
     return foreachStatement.EmbeddedStatement.AcceptVisitor(this, data);
 }
コード例 #2
0
 public override object Visit(ForeachStatement foreachStatement, object data)
 {
     return null;
 }
コード例 #3
0
        public override object Visit(ForeachStatement foreachStatement, object data)
        {
            DebugOutput(foreachStatement);
            AppendIndentation();sourceText.Append("For Each ");
            sourceText.Append(foreachStatement.VariableName);
            sourceText.Append(" As ");
            sourceText.Append(this.GetTypeString(foreachStatement.TypeReference));
            sourceText.Append(" In ");
            sourceText.Append(foreachStatement.Expression.AcceptVisitor(this, data));
            AppendNewLine();

            ++indentLevel;
            foreachStatement.EmbeddedStatement.AcceptVisitor(this, data);
            --indentLevel;

            AppendIndentation();sourceText.Append("Next");
            AppendNewLine();
            return null;
        }
コード例 #4
0
 public override object Visit(ForeachStatement foreachStatement, object data)
 {
     Console.WriteLine(foreachStatement.ToString());
     return foreachStatement.AcceptChildren(this, data);
 }
コード例 #5
0
 public virtual object Visit(ForeachStatement foreachStatement, object data)
 {
     if (foreachStatement.Expression != null) {
         foreachStatement.Expression.AcceptVisitor(this, data);
     }
     if (foreachStatement.EmbeddedStatement == null) {
         return data;
     }
     return foreachStatement.EmbeddedStatement.AcceptVisitor(this, data);
 }
コード例 #6
0
	void EmbeddedStatement(
#line  1564 "cs.ATG" 
out Statement statement) {

#line  1566 "cs.ATG" 
		TypeReference type = null;
		Expression expr = null;
		Statement embeddedStatement = null;
		statement = null;
		
		if (la.kind == 14) {
			Block(
#line  1572 "cs.ATG" 
out statement);
		} else if (la.kind == 10) {
			lexer.NextToken();

#line  1574 "cs.ATG" 
			statement = new EmptyStatement(); 
		} else if (
#line  1576 "cs.ATG" 
IdentIsYield ()) {
			Expect(1);
			if (la.kind == 100) {
				lexer.NextToken();
				Expr(
#line  1577 "cs.ATG" 
out expr);
			} else if (la.kind == 52) {
				lexer.NextToken();
			} else SynErr(169);
			Expect(10);

#line  1577 "cs.ATG" 
			statement = new YieldStatement(expr); 
		} else if (
#line  1579 "cs.ATG" 
UnCheckedAndLBrace()) {

#line  1579 "cs.ATG" 
			Statement block; bool isChecked = true; 
			if (la.kind == 57) {
				lexer.NextToken();
			} else if (la.kind == 117) {
				lexer.NextToken();

#line  1580 "cs.ATG" 
				isChecked = false;
			} else SynErr(170);
			Block(
#line  1581 "cs.ATG" 
out block);

#line  1581 "cs.ATG" 
			statement = isChecked ? (Statement)new CheckedStatement(block) : (Statement)new UncheckedStatement(block); 
		} else if (StartOf(4)) {
			StatementExpr(
#line  1583 "cs.ATG" 
out statement);
			Expect(10);
		} else if (la.kind == 78) {
			lexer.NextToken();

#line  1585 "cs.ATG" 
			Statement elseStatement = null; 
			Expect(18);
			Expr(
#line  1586 "cs.ATG" 
out expr);
			Expect(19);
			EmbeddedStatement(
#line  1587 "cs.ATG" 
out embeddedStatement);
			if (la.kind == 66) {
				lexer.NextToken();
				EmbeddedStatement(
#line  1588 "cs.ATG" 
out elseStatement);
			}

#line  1589 "cs.ATG" 
			statement = elseStatement != null ? (Statement)new IfElseStatement(expr, embeddedStatement, elseStatement) :  (Statement)new IfStatement(expr, embeddedStatement); 
		} else if (la.kind == 109) {
			lexer.NextToken();

#line  1590 "cs.ATG" 
			ArrayList switchSections = new ArrayList(); 
			Expect(18);
			Expr(
#line  1591 "cs.ATG" 
out expr);
			Expect(19);
			Expect(14);
			while (la.kind == 54 || la.kind == 62) {
				SwitchSection(
#line  1592 "cs.ATG" 
out statement);

#line  1592 "cs.ATG" 
				switchSections.Add(statement); 
			}
			Expect(15);

#line  1593 "cs.ATG" 
			statement = new SwitchStatement(expr, switchSections); 
		} else if (la.kind == 124) {
			lexer.NextToken();
			Expect(18);
			Expr(
#line  1595 "cs.ATG" 
out expr);
			Expect(19);
			EmbeddedStatement(
#line  1596 "cs.ATG" 
out embeddedStatement);

#line  1596 "cs.ATG" 
			statement = new WhileStatement(expr, embeddedStatement); 
		} else if (la.kind == 64) {
			lexer.NextToken();
			EmbeddedStatement(
#line  1597 "cs.ATG" 
out embeddedStatement);
			Expect(124);
			Expect(18);
			Expr(
#line  1598 "cs.ATG" 
out expr);
			Expect(19);
			Expect(10);

#line  1598 "cs.ATG" 
			statement = new DoWhileStatement(expr, embeddedStatement); 
		} else if (la.kind == 75) {
			lexer.NextToken();

#line  1599 "cs.ATG" 
			ArrayList initializer = null, iterator = null; 
			Expect(18);
			if (StartOf(4)) {
				ForInitializer(
#line  1600 "cs.ATG" 
out initializer);
			}
			Expect(10);
			if (StartOf(4)) {
				Expr(
#line  1601 "cs.ATG" 
out expr);
			}
			Expect(10);
			if (StartOf(4)) {
				ForIterator(
#line  1602 "cs.ATG" 
out iterator);
			}
			Expect(19);
			EmbeddedStatement(
#line  1603 "cs.ATG" 
out embeddedStatement);

#line  1603 "cs.ATG" 
			statement = new ForStatement(initializer, expr, iterator, embeddedStatement); 
		} else if (la.kind == 76) {
			lexer.NextToken();
			Expect(18);
			Type(
#line  1604 "cs.ATG" 
out type);
			Expect(1);

#line  1604 "cs.ATG" 
			string varName = t.val; 
			Expect(80);
			Expr(
#line  1605 "cs.ATG" 
out expr);
			Expect(19);
			EmbeddedStatement(
#line  1606 "cs.ATG" 
out embeddedStatement);

#line  1606 "cs.ATG" 
			statement = new ForeachStatement(type, varName , expr, embeddedStatement); 
			statement.EndLocation = t.EndLocation;
			
		} else if (la.kind == 52) {
			lexer.NextToken();
			Expect(10);

#line  1610 "cs.ATG" 
			statement = new BreakStatement(); 
		} else if (la.kind == 60) {
			lexer.NextToken();
			Expect(10);

#line  1611 "cs.ATG" 
			statement = new ContinueStatement(); 
		} else if (la.kind == 77) {
			GotoStatement(
#line  1612 "cs.ATG" 
out statement);
		} else if (la.kind == 100) {
			lexer.NextToken();
			if (StartOf(4)) {
				Expr(
#line  1613 "cs.ATG" 
out expr);
			}
			Expect(10);

#line  1613 "cs.ATG" 
			statement = new ReturnStatement(expr); 
		} else if (la.kind == 111) {
			lexer.NextToken();
			if (StartOf(4)) {
				Expr(
#line  1614 "cs.ATG" 
out expr);
			}
			Expect(10);

#line  1614 "cs.ATG" 
			statement = new ThrowStatement(expr); 
		} else if (la.kind == 113) {
			TryStatement(
#line  1617 "cs.ATG" 
out statement);
		} else if (la.kind == 85) {
			lexer.NextToken();
			Expect(18);
			Expr(
#line  1619 "cs.ATG" 
out expr);
			Expect(19);
			EmbeddedStatement(
#line  1620 "cs.ATG" 
out embeddedStatement);

#line  1620 "cs.ATG" 
			statement = new LockStatement(expr, embeddedStatement); 
		} else if (la.kind == 120) {

#line  1622 "cs.ATG" 
			Statement resourceAcquisitionStmt = null; 
			lexer.NextToken();
			Expect(18);
			ResourceAcquisition(
#line  1624 "cs.ATG" 
out resourceAcquisitionStmt);
			Expect(19);
			EmbeddedStatement(
#line  1625 "cs.ATG" 
out embeddedStatement);

#line  1625 "cs.ATG" 
			statement = new UsingStatement(resourceAcquisitionStmt, embeddedStatement); 
		} else if (la.kind == 118) {
			lexer.NextToken();
			Block(
#line  1627 "cs.ATG" 
out embeddedStatement);

#line  1627 "cs.ATG" 
			statement = new UnsafeStatement(embeddedStatement); 
		} else if (la.kind == 73) {
			lexer.NextToken();
			Expect(18);
			Type(
#line  1630 "cs.ATG" 
out type);

#line  1630 "cs.ATG" 
			if (type.PointerNestingLevel == 0) Error("can only fix pointer types");
			FixedStatement fxStmt = new FixedStatement(type);
			string identifier = null;
			
			Expect(1);

#line  1634 "cs.ATG" 
			identifier = t.val; 
			Expect(3);
			Expr(
#line  1635 "cs.ATG" 
out expr);

#line  1635 "cs.ATG" 
			fxStmt.PointerDeclarators.Add(new VariableDeclaration(identifier, expr)); 
			while (la.kind == 12) {
				lexer.NextToken();
				Expect(1);

#line  1637 "cs.ATG" 
				identifier = t.val; 
				Expect(3);
				Expr(
#line  1638 "cs.ATG" 
out expr);

#line  1638 "cs.ATG" 
				fxStmt.PointerDeclarators.Add(new VariableDeclaration(identifier, expr)); 
			}
			Expect(19);
			EmbeddedStatement(
#line  1640 "cs.ATG" 
out embeddedStatement);

#line  1640 "cs.ATG" 
			fxStmt.EmbeddedStatement = embeddedStatement; statement = fxStmt;
		} else SynErr(171);
	}
コード例 #7
0
 public override object Visit(ForeachStatement foreachStatement, object data)
 {
     outputFormatter.Indent();
     outputFormatter.PrintToken(Tokens.Foreach);
     outputFormatter.Space();
     outputFormatter.PrintToken(Tokens.OpenParenthesis);
     Visit(foreachStatement.TypeReference, data);
     outputFormatter.Space();
     outputFormatter.PrintIdentifier(foreachStatement.VariableName);
     outputFormatter.Space();
     outputFormatter.PrintToken(Tokens.In);
     outputFormatter.Space();
     foreachStatement.Expression.AcceptVisitor(this, data);
     outputFormatter.PrintToken(Tokens.CloseParenthesis);
     if (foreachStatement.EmbeddedStatement is BlockStatement) {
         Visit((BlockStatement)foreachStatement.EmbeddedStatement, false);
     } else {
         outputFormatter.NewLine();
         foreachStatement.EmbeddedStatement.AcceptVisitor(this, data);
     }
     return null;
 }