public object VisitDoLoopStatement(DoLoopStatement doLoopStatement, object data) { bool frontCondition = doLoopStatement.ConditionPosition != ConditionPosition.End; bool negateCondition = doLoopStatement.ConditionType == ConditionType.Until; if (frontCondition && negateCondition) { // VB: Do Unless * : ** : Loop B.UnlessStatement u = new B.UnlessStatement(GetLexicalInfo(doLoopStatement)); u.Condition = ConvertExpression(doLoopStatement.Condition); u.Block = ConvertBlock(doLoopStatement.EmbeddedStatement); return(u); } // While and Do loop B.WhileStatement w = new B.WhileStatement(GetLexicalInfo(doLoopStatement)); if (frontCondition) { w.Condition = ConvertExpression(doLoopStatement.Condition); } else { w.Condition = new B.BoolLiteralExpression(true); } w.Block = ConvertBlock(doLoopStatement.EmbeddedStatement); if (!frontCondition) { B.BreakStatement breakStatement = new B.BreakStatement(); breakStatement.Modifier = new B.StatementModifier(negateCondition ? B.StatementModifierType.If : B.StatementModifierType.Unless, ConvertExpression(doLoopStatement.Condition)); w.Block.Add(breakStatement); } return(w); }
public override object TrackedVisitDoLoopStatement(DoLoopStatement doLoopStatement, object data) { if (doLoopStatement.EmbeddedStatement is BlockStatement && doLoopStatement.EmbeddedStatement.Children.Count == 0) { RemoveCurrentNode(); } return(base.TrackedVisitDoLoopStatement(doLoopStatement, data)); }
public void CSharpDoWhileStatementTest() { DoLoopStatement doLoopStmt = ParseUtilCSharp.ParseStatement<DoLoopStatement>("do { } while (true);"); Assert.AreEqual(ConditionPosition.End, doLoopStmt.ConditionPosition); Assert.AreEqual(ConditionType.While, doLoopStmt.ConditionType); Assert.IsTrue(doLoopStmt.Condition is PrimitiveExpression); Assert.IsTrue(doLoopStmt.EmbeddedStatement is BlockStatement); }
public override object VisitDoLoopStatement(DoLoopStatement doLoopStatement, object data) { if (doLoopStatement.ConditionPosition == ConditionPosition.Start) //DoWhile loops has their condition at ConditionPosition.End, while has it at ConditionPosition.Start. { UnlockWith(doLoopStatement); } return(base.VisitDoLoopStatement(doLoopStatement, data)); }
public virtual object Visit(DoLoopStatement doLoopStatement, object data) { Debug.Assert(doLoopStatement != null); Debug.Assert(doLoopStatement.Condition != null); Debug.Assert(doLoopStatement.EmbeddedStatement != null); doLoopStatement.Condition.AcceptVisitor(this, data); doLoopStatement.EmbeddedStatement.AcceptVisitor(this, data); return(data); }
public void VisitStatement(DoLoopStatement statement, MethodProperties meth) { meth.CyclometricComplexity++; VisitExpression(statement.Condition, meth); foreach (var innerStatement in statement.EmbeddedStatement.Children) { VisitStatement(innerStatement, meth); } }
public override object VisitDoLoopStatement(DoLoopStatement doLoopStatement, object data) { if (doLoopStatement.ConditionPosition == ConditionPosition.Start) { var condition = doLoopStatement.Condition as PrimitiveExpression; if (condition != null && condition.StringValue == "true") { UnlockWith(doLoopStatement); } } return(base.VisitDoLoopStatement(doLoopStatement, data)); }
private static void EmitDoLoopStatement(DoLoopStatement doLoop, ILGenerator methodIL) { Label toLoopCond = methodIL.DefineLabel(); Label toLoopBody = methodIL.DefineLabel(); Label toBodyEnd = methodIL.DefineLabel(); Label toLoopEnd = methodIL.DefineLabel(); BreakLabel = toLoopEnd; ContinueLabel = toBodyEnd; methodIL.MarkLabel(toLoopBody); EmitEmbeddedStatement((EmbeddedStatement)doLoop.Body, methodIL); methodIL.MarkLabel(toBodyEnd); methodIL.MarkLabel(toLoopCond); EmitCondition(doLoop.Condition, methodIL); methodIL.Emit(OpCodes.Brtrue, toLoopBody); methodIL.MarkLabel(toLoopEnd); }
public sealed override object VisitDoLoopStatement(DoLoopStatement doLoopStatement, object data) { BeginVisit(doLoopStatement); object result = TrackedVisitDoLoopStatement(doLoopStatement, data); EndVisit(doLoopStatement); return result; }
public virtual object VisitDoLoopStatement(DoLoopStatement doLoopStatement, object data) { Debug.Assert((doLoopStatement != null)); Debug.Assert((doLoopStatement.Condition != null)); Debug.Assert((doLoopStatement.EmbeddedStatement != null)); nodeStack.Push(doLoopStatement.Condition); doLoopStatement.Condition.AcceptVisitor(this, data); doLoopStatement.Condition = ((Expression)(nodeStack.Pop())); nodeStack.Push(doLoopStatement.EmbeddedStatement); doLoopStatement.EmbeddedStatement.AcceptVisitor(this, data); doLoopStatement.EmbeddedStatement = ((Statement)(nodeStack.Pop())); return null; }
void EmbeddedStatement( #line 2755 "VBNET.ATG" out Statement statement) { #line 2757 "VBNET.ATG" Statement embeddedStatement = null; statement = null; Expression expr = null; string name = String.Empty; List<Expression> p = null; if (la.kind == 107) { lexer.NextToken(); #line 2763 "VBNET.ATG" ExitType exitType = ExitType.None; switch (la.kind) { case 195: { lexer.NextToken(); #line 2765 "VBNET.ATG" exitType = ExitType.Sub; break; } case 114: { lexer.NextToken(); #line 2767 "VBNET.ATG" exitType = ExitType.Function; break; } case 171: { lexer.NextToken(); #line 2769 "VBNET.ATG" exitType = ExitType.Property; break; } case 95: { lexer.NextToken(); #line 2771 "VBNET.ATG" exitType = ExitType.Do; break; } case 111: { lexer.NextToken(); #line 2773 "VBNET.ATG" exitType = ExitType.For; break; } case 203: { lexer.NextToken(); #line 2775 "VBNET.ATG" exitType = ExitType.Try; break; } case 216: { lexer.NextToken(); #line 2777 "VBNET.ATG" exitType = ExitType.While; break; } case 182: { lexer.NextToken(); #line 2779 "VBNET.ATG" exitType = ExitType.Select; break; } default: SynErr(273); break; } #line 2781 "VBNET.ATG" statement = new ExitStatement(exitType); } else if (la.kind == 203) { TryStatement( #line 2782 "VBNET.ATG" out statement); } else if (la.kind == 76) { lexer.NextToken(); #line 2783 "VBNET.ATG" ContinueType continueType = ContinueType.None; if (la.kind == 95 || la.kind == 111 || la.kind == 216) { if (la.kind == 95) { lexer.NextToken(); #line 2783 "VBNET.ATG" continueType = ContinueType.Do; } else if (la.kind == 111) { lexer.NextToken(); #line 2783 "VBNET.ATG" continueType = ContinueType.For; } else { lexer.NextToken(); #line 2783 "VBNET.ATG" continueType = ContinueType.While; } } #line 2783 "VBNET.ATG" statement = new ContinueStatement(continueType); } else if (la.kind == 200) { lexer.NextToken(); if (StartOf(29)) { Expr( #line 2785 "VBNET.ATG" out expr); } #line 2785 "VBNET.ATG" statement = new ThrowStatement(expr); } else if (la.kind == 180) { lexer.NextToken(); if (StartOf(29)) { Expr( #line 2787 "VBNET.ATG" out expr); } #line 2787 "VBNET.ATG" statement = new ReturnStatement(expr); } else if (la.kind == 196) { lexer.NextToken(); Expr( #line 2789 "VBNET.ATG" out expr); EndOfStmt(); Block( #line 2789 "VBNET.ATG" out embeddedStatement); Expect(100); Expect(196); #line 2790 "VBNET.ATG" statement = new LockStatement(expr, embeddedStatement); } else if (la.kind == 174) { lexer.NextToken(); Identifier(); #line 2792 "VBNET.ATG" name = t.val; if (la.kind == 25) { lexer.NextToken(); if (StartOf(37)) { ArgumentList( #line 2793 "VBNET.ATG" out p); } Expect(26); } #line 2795 "VBNET.ATG" statement = new RaiseEventStatement(name, p); } else if (la.kind == 218) { WithStatement( #line 2798 "VBNET.ATG" out statement); } else if (la.kind == 43) { lexer.NextToken(); #line 2800 "VBNET.ATG" Expression handlerExpr = null; Expr( #line 2801 "VBNET.ATG" out expr); Expect(12); Expr( #line 2801 "VBNET.ATG" out handlerExpr); #line 2803 "VBNET.ATG" statement = new AddHandlerStatement(expr, handlerExpr); } else if (la.kind == 178) { lexer.NextToken(); #line 2806 "VBNET.ATG" Expression handlerExpr = null; Expr( #line 2807 "VBNET.ATG" out expr); Expect(12); Expr( #line 2807 "VBNET.ATG" out handlerExpr); #line 2809 "VBNET.ATG" statement = new RemoveHandlerStatement(expr, handlerExpr); } else if (la.kind == 216) { lexer.NextToken(); Expr( #line 2812 "VBNET.ATG" out expr); EndOfStmt(); Block( #line 2813 "VBNET.ATG" out embeddedStatement); Expect(100); Expect(216); #line 2815 "VBNET.ATG" statement = new DoLoopStatement(expr, embeddedStatement, ConditionType.While, ConditionPosition.Start); } else if (la.kind == 95) { lexer.NextToken(); #line 2820 "VBNET.ATG" ConditionType conditionType = ConditionType.None; if (la.kind == 209 || la.kind == 216) { WhileOrUntil( #line 2823 "VBNET.ATG" out conditionType); Expr( #line 2823 "VBNET.ATG" out expr); EndOfStmt(); Block( #line 2824 "VBNET.ATG" out embeddedStatement); Expect(138); #line 2827 "VBNET.ATG" statement = new DoLoopStatement(expr, embeddedStatement, conditionType == ConditionType.While ? ConditionType.DoWhile : conditionType, ConditionPosition.Start); } else if (la.kind == 1 || la.kind == 11) { EndOfStmt(); Block( #line 2834 "VBNET.ATG" out embeddedStatement); Expect(138); if (la.kind == 209 || la.kind == 216) { WhileOrUntil( #line 2835 "VBNET.ATG" out conditionType); Expr( #line 2835 "VBNET.ATG" out expr); } #line 2837 "VBNET.ATG" statement = new DoLoopStatement(expr, embeddedStatement, conditionType, ConditionPosition.End); } else SynErr(274); } else if (la.kind == 111) { lexer.NextToken(); #line 2842 "VBNET.ATG" Expression group = null; TypeReference typeReference; string typeName; Location startLocation = t.Location; if (la.kind == 97) { lexer.NextToken(); LoopControlVariable( #line 2849 "VBNET.ATG" out typeReference, out typeName); Expect(125); Expr( #line 2850 "VBNET.ATG" out group); EndOfStmt(); Block( #line 2851 "VBNET.ATG" out embeddedStatement); Expect(149); if (StartOf(29)) { Expr( #line 2852 "VBNET.ATG" out expr); } #line 2854 "VBNET.ATG" statement = new ForeachStatement(typeReference, typeName, group, embeddedStatement, expr); statement.StartLocation = startLocation; statement.EndLocation = t.EndLocation; } else if (StartOf(38)) { #line 2865 "VBNET.ATG" Expression start = null; Expression end = null; Expression step = null; Expression variableExpr = null; Expression nextExpr = null; List<Expression> nextExpressions = null; if ( #line 2872 "VBNET.ATG" IsLoopVariableDeclaration()) { LoopControlVariable( #line 2873 "VBNET.ATG" out typeReference, out typeName); } else { #line 2875 "VBNET.ATG" typeReference = null; typeName = null; SimpleExpr( #line 2876 "VBNET.ATG" out variableExpr); } Expect(10); Expr( #line 2878 "VBNET.ATG" out start); Expect(201); Expr( #line 2878 "VBNET.ATG" out end); if (la.kind == 190) { lexer.NextToken(); Expr( #line 2878 "VBNET.ATG" out step); } EndOfStmt(); Block( #line 2879 "VBNET.ATG" out embeddedStatement); Expect(149); if (StartOf(29)) { Expr( #line 2882 "VBNET.ATG" out nextExpr); #line 2884 "VBNET.ATG" nextExpressions = new List<Expression>(); nextExpressions.Add(nextExpr); while (la.kind == 12) { lexer.NextToken(); Expr( #line 2887 "VBNET.ATG" out nextExpr); #line 2887 "VBNET.ATG" nextExpressions.Add(nextExpr); } } #line 2890 "VBNET.ATG" statement = new ForNextStatement { TypeReference = typeReference, VariableName = typeName, LoopVariableExpression = variableExpr, Start = start, End = end, Step = step, EmbeddedStatement = embeddedStatement, NextExpressions = nextExpressions }; } else SynErr(275); } else if (la.kind == 105) { lexer.NextToken(); Expr( #line 2903 "VBNET.ATG" out expr); #line 2903 "VBNET.ATG" statement = new ErrorStatement(expr); } else if (la.kind == 176) { lexer.NextToken(); #line 2905 "VBNET.ATG" bool isPreserve = false; if (la.kind == 169) { lexer.NextToken(); #line 2905 "VBNET.ATG" isPreserve = true; } ReDimClause( #line 2906 "VBNET.ATG" out expr); #line 2908 "VBNET.ATG" ReDimStatement reDimStatement = new ReDimStatement(isPreserve); statement = reDimStatement; SafeAdd(reDimStatement, reDimStatement.ReDimClauses, expr as InvocationExpression); while (la.kind == 12) { lexer.NextToken(); ReDimClause( #line 2912 "VBNET.ATG" out expr); #line 2913 "VBNET.ATG" SafeAdd(reDimStatement, reDimStatement.ReDimClauses, expr as InvocationExpression); } } else if (la.kind == 104) { lexer.NextToken(); Expr( #line 2917 "VBNET.ATG" out expr); #line 2919 "VBNET.ATG" EraseStatement eraseStatement = new EraseStatement(); if (expr != null) { SafeAdd(eraseStatement, eraseStatement.Expressions, expr);} while (la.kind == 12) { lexer.NextToken(); Expr( #line 2922 "VBNET.ATG" out expr); #line 2922 "VBNET.ATG" if (expr != null) { SafeAdd(eraseStatement, eraseStatement.Expressions, expr); } } #line 2923 "VBNET.ATG" statement = eraseStatement; } else if (la.kind == 191) { lexer.NextToken(); #line 2925 "VBNET.ATG" statement = new StopStatement(); } else if ( #line 2927 "VBNET.ATG" la.kind == Tokens.If) { Expect(122); #line 2928 "VBNET.ATG" Location ifStartLocation = t.Location; Expr( #line 2928 "VBNET.ATG" out expr); if (la.kind == 199) { lexer.NextToken(); } if (la.kind == 1 || la.kind == 11) { EndOfStmt(); Block( #line 2931 "VBNET.ATG" out embeddedStatement); #line 2933 "VBNET.ATG" IfElseStatement ifStatement = new IfElseStatement(expr, embeddedStatement); ifStatement.StartLocation = ifStartLocation; Location elseIfStart; while (la.kind == 99 || #line 2939 "VBNET.ATG" IsElseIf()) { if ( #line 2939 "VBNET.ATG" IsElseIf()) { Expect(98); #line 2939 "VBNET.ATG" elseIfStart = t.Location; Expect(122); } else { lexer.NextToken(); #line 2940 "VBNET.ATG" elseIfStart = t.Location; } #line 2942 "VBNET.ATG" Expression condition = null; Statement block = null; Expr( #line 2943 "VBNET.ATG" out condition); if (la.kind == 199) { lexer.NextToken(); } EndOfStmt(); Block( #line 2944 "VBNET.ATG" out block); #line 2946 "VBNET.ATG" ElseIfSection elseIfSection = new ElseIfSection(condition, block); elseIfSection.StartLocation = elseIfStart; elseIfSection.EndLocation = t.Location; elseIfSection.Parent = ifStatement; ifStatement.ElseIfSections.Add(elseIfSection); } if (la.kind == 98) { lexer.NextToken(); EndOfStmt(); Block( #line 2955 "VBNET.ATG" out embeddedStatement); #line 2957 "VBNET.ATG" ifStatement.FalseStatement.Add(embeddedStatement); } Expect(100); Expect(122); #line 2961 "VBNET.ATG" ifStatement.EndLocation = t.Location; statement = ifStatement; } else if (StartOf(39)) { #line 2966 "VBNET.ATG" IfElseStatement ifStatement = new IfElseStatement(expr); ifStatement.StartLocation = ifStartLocation; SingleLineStatementList( #line 2969 "VBNET.ATG" ifStatement.TrueStatement); if (la.kind == 98) { lexer.NextToken(); if (StartOf(39)) { SingleLineStatementList( #line 2972 "VBNET.ATG" ifStatement.FalseStatement); } } #line 2974 "VBNET.ATG" ifStatement.EndLocation = t.Location; statement = ifStatement; } else SynErr(276); } else if (la.kind == 182) { lexer.NextToken(); if (la.kind == 61) { lexer.NextToken(); } Expr( #line 2977 "VBNET.ATG" out expr); EndOfStmt(); #line 2978 "VBNET.ATG" List<SwitchSection> selectSections = new List<SwitchSection>(); Statement block = null; while (la.kind == 61) { #line 2982 "VBNET.ATG" List<CaseLabel> caseClauses = null; Location caseLocation = la.Location; lexer.NextToken(); CaseClauses( #line 2983 "VBNET.ATG" out caseClauses); if ( #line 2983 "VBNET.ATG" IsNotStatementSeparator()) { lexer.NextToken(); } EndOfStmt(); #line 2985 "VBNET.ATG" SwitchSection selectSection = new SwitchSection(caseClauses); selectSection.StartLocation = caseLocation; Block( #line 2988 "VBNET.ATG" out block); #line 2990 "VBNET.ATG" selectSection.Children = block.Children; selectSection.EndLocation = t.EndLocation; selectSections.Add(selectSection); } #line 2996 "VBNET.ATG" statement = new SwitchStatement(expr, selectSections); Expect(100); Expect(182); } else if (la.kind == 157) { #line 2999 "VBNET.ATG" OnErrorStatement onErrorStatement = null; OnErrorStatement( #line 3000 "VBNET.ATG" out onErrorStatement); #line 3000 "VBNET.ATG" statement = onErrorStatement; } else if (la.kind == 119) { #line 3001 "VBNET.ATG" GotoStatement goToStatement = null; GotoStatement( #line 3002 "VBNET.ATG" out goToStatement); #line 3002 "VBNET.ATG" statement = goToStatement; } else if (la.kind == 179) { #line 3003 "VBNET.ATG" ResumeStatement resumeStatement = null; ResumeStatement( #line 3004 "VBNET.ATG" out resumeStatement); #line 3004 "VBNET.ATG" statement = resumeStatement; } else if (StartOf(38)) { #line 3007 "VBNET.ATG" Expression val = null; AssignmentOperatorType op; bool mustBeAssignment = la.kind == Tokens.Plus || la.kind == Tokens.Minus || la.kind == Tokens.Not || la.kind == Tokens.Times; SimpleExpr( #line 3013 "VBNET.ATG" out expr); if (StartOf(40)) { AssignmentOperator( #line 3015 "VBNET.ATG" out op); Expr( #line 3015 "VBNET.ATG" out val); #line 3015 "VBNET.ATG" expr = new AssignmentExpression(expr, op, val); } else if (la.kind == 1 || la.kind == 11 || la.kind == 98) { #line 3016 "VBNET.ATG" if (mustBeAssignment) Error("error in assignment."); } else SynErr(277); #line 3019 "VBNET.ATG" // a field reference expression that stands alone is a // invocation expression without parantheses and arguments if(expr is MemberReferenceExpression || expr is IdentifierExpression) { expr = new InvocationExpression(expr); } statement = new ExpressionStatement(expr); } else if (la.kind == 60) { lexer.NextToken(); SimpleExpr( #line 3026 "VBNET.ATG" out expr); #line 3026 "VBNET.ATG" statement = new ExpressionStatement(expr); } else if (la.kind == 211) { lexer.NextToken(); #line 3028 "VBNET.ATG" Statement block; if ( #line 3029 "VBNET.ATG" Peek(1).kind == Tokens.As) { #line 3030 "VBNET.ATG" LocalVariableDeclaration resourceAquisition = new LocalVariableDeclaration(Modifiers.None); VariableDeclarator( #line 3031 "VBNET.ATG" resourceAquisition.Variables); while (la.kind == 12) { lexer.NextToken(); VariableDeclarator( #line 3033 "VBNET.ATG" resourceAquisition.Variables); } Block( #line 3035 "VBNET.ATG" out block); #line 3037 "VBNET.ATG" statement = new UsingStatement(resourceAquisition, block); } else if (StartOf(29)) { Expr( #line 3039 "VBNET.ATG" out expr); Block( #line 3040 "VBNET.ATG" out block); #line 3041 "VBNET.ATG" statement = new UsingStatement(new ExpressionStatement(expr), block); } else SynErr(278); Expect(100); Expect(211); } else if (StartOf(41)) { LocalDeclarationStatement( #line 3044 "VBNET.ATG" out statement); } else SynErr(279); }
void EmbeddedStatement( #line 1528 "cs.ATG" out Statement statement) { #line 1530 "cs.ATG" TypeReference type = null; Expression expr = null; Statement embeddedStatement = null; statement = null; #line 1536 "cs.ATG" Location startLocation = la.Location; if (la.kind == 16) { Block( #line 1538 "cs.ATG" out statement); } else if (la.kind == 11) { lexer.NextToken(); #line 1541 "cs.ATG" statement = new EmptyStatement(); } else if ( #line 1544 "cs.ATG" UnCheckedAndLBrace()) { #line 1544 "cs.ATG" Statement block; bool isChecked = true; if (la.kind == 58) { lexer.NextToken(); } else if (la.kind == 118) { lexer.NextToken(); #line 1545 "cs.ATG" isChecked = false; } else SynErr(197); Block( #line 1546 "cs.ATG" out block); #line 1546 "cs.ATG" statement = isChecked ? (Statement)new CheckedStatement(block) : (Statement)new UncheckedStatement(block); } else if (la.kind == 79) { IfStatement( #line 1549 "cs.ATG" out statement); } else if (la.kind == 110) { lexer.NextToken(); #line 1551 "cs.ATG" List<SwitchSection> switchSections = new List<SwitchSection>(); Expect(20); Expr( #line 1552 "cs.ATG" out expr); Expect(21); Expect(16); SwitchSections( #line 1553 "cs.ATG" switchSections); Expect(17); #line 1555 "cs.ATG" statement = new SwitchStatement(expr, switchSections); } else if (la.kind == 125) { lexer.NextToken(); Expect(20); Expr( #line 1558 "cs.ATG" out expr); Expect(21); EmbeddedStatement( #line 1559 "cs.ATG" out embeddedStatement); #line 1560 "cs.ATG" statement = new DoLoopStatement(expr, embeddedStatement, ConditionType.While, ConditionPosition.Start); } else if (la.kind == 65) { lexer.NextToken(); EmbeddedStatement( #line 1562 "cs.ATG" out embeddedStatement); Expect(125); Expect(20); Expr( #line 1563 "cs.ATG" out expr); Expect(21); Expect(11); #line 1564 "cs.ATG" statement = new DoLoopStatement(expr, embeddedStatement, ConditionType.While, ConditionPosition.End); } else if (la.kind == 76) { lexer.NextToken(); #line 1566 "cs.ATG" List<Statement> initializer = null; List<Statement> iterator = null; Expect(20); if (StartOf(6)) { ForInitializer( #line 1567 "cs.ATG" out initializer); } Expect(11); if (StartOf(6)) { Expr( #line 1568 "cs.ATG" out expr); } Expect(11); if (StartOf(6)) { ForIterator( #line 1569 "cs.ATG" out iterator); } Expect(21); EmbeddedStatement( #line 1570 "cs.ATG" out embeddedStatement); #line 1571 "cs.ATG" statement = new ForStatement(initializer, expr, iterator, embeddedStatement); } else if (la.kind == 77) { lexer.NextToken(); Expect(20); Type( #line 1573 "cs.ATG" out type); Identifier(); #line 1573 "cs.ATG" string varName = t.val; Expect(81); Expr( #line 1574 "cs.ATG" out expr); Expect(21); EmbeddedStatement( #line 1575 "cs.ATG" out embeddedStatement); #line 1576 "cs.ATG" statement = new ForeachStatement(type, varName , expr, embeddedStatement); } else if (la.kind == 53) { lexer.NextToken(); Expect(11); #line 1579 "cs.ATG" statement = new BreakStatement(); } else if (la.kind == 61) { lexer.NextToken(); Expect(11); #line 1580 "cs.ATG" statement = new ContinueStatement(); } else if (la.kind == 78) { GotoStatement( #line 1581 "cs.ATG" out statement); } else if ( #line 1583 "cs.ATG" IsYieldStatement()) { Expect(132); if (la.kind == 101) { lexer.NextToken(); Expr( #line 1584 "cs.ATG" out expr); #line 1584 "cs.ATG" statement = new YieldStatement(new ReturnStatement(expr)); } else if (la.kind == 53) { lexer.NextToken(); #line 1585 "cs.ATG" statement = new YieldStatement(new BreakStatement()); } else SynErr(198); Expect(11); } else if (la.kind == 101) { lexer.NextToken(); if (StartOf(6)) { Expr( #line 1588 "cs.ATG" out expr); } Expect(11); #line 1588 "cs.ATG" statement = new ReturnStatement(expr); } else if (la.kind == 112) { lexer.NextToken(); if (StartOf(6)) { Expr( #line 1589 "cs.ATG" out expr); } Expect(11); #line 1589 "cs.ATG" statement = new ThrowStatement(expr); } else if (StartOf(6)) { StatementExpr( #line 1592 "cs.ATG" out statement); while (!(la.kind == 0 || la.kind == 11)) {SynErr(199); lexer.NextToken(); } Expect(11); } else if (la.kind == 114) { TryStatement( #line 1595 "cs.ATG" out statement); } else if (la.kind == 86) { lexer.NextToken(); Expect(20); Expr( #line 1598 "cs.ATG" out expr); Expect(21); EmbeddedStatement( #line 1599 "cs.ATG" out embeddedStatement); #line 1599 "cs.ATG" statement = new LockStatement(expr, embeddedStatement); } else if (la.kind == 121) { #line 1602 "cs.ATG" Statement resourceAcquisitionStmt = null; lexer.NextToken(); Expect(20); ResourceAcquisition( #line 1604 "cs.ATG" out resourceAcquisitionStmt); Expect(21); EmbeddedStatement( #line 1605 "cs.ATG" out embeddedStatement); #line 1605 "cs.ATG" statement = new UsingStatement(resourceAcquisitionStmt, embeddedStatement); } else if (la.kind == 119) { lexer.NextToken(); Block( #line 1608 "cs.ATG" out embeddedStatement); #line 1608 "cs.ATG" statement = new UnsafeStatement(embeddedStatement); } else if (la.kind == 74) { #line 1610 "cs.ATG" Statement pointerDeclarationStmt = null; lexer.NextToken(); Expect(20); ResourceAcquisition( #line 1612 "cs.ATG" out pointerDeclarationStmt); Expect(21); EmbeddedStatement( #line 1613 "cs.ATG" out embeddedStatement); #line 1613 "cs.ATG" statement = new FixedStatement(pointerDeclarationStmt, embeddedStatement); } else SynErr(200); #line 1615 "cs.ATG" if (statement != null) { statement.StartLocation = startLocation; statement.EndLocation = t.EndLocation; } }
private void EmbeddedStatement(out ICSharpCode.NRefactory.Parser.AST.Statement statement) { TypeReference type = null; Expression expr = null; ICSharpCode.NRefactory.Parser.AST.Statement statement2 = null; statement = null; if (this.la.kind == 0x10) { this.Block(out statement); } else if (this.la.kind == 11) { base.lexer.NextToken(); statement = new EmptyStatement(); } else if (this.UnCheckedAndLBrace()) { ICSharpCode.NRefactory.Parser.AST.Statement statement3; bool flag = true; if (this.la.kind == 0x39) { base.lexer.NextToken(); } else if (this.la.kind == 0x75) { base.lexer.NextToken(); flag = false; } else { base.SynErr(170); } this.Block(out statement3); statement = flag ? ((ICSharpCode.NRefactory.Parser.AST.Statement) new CheckedStatement(statement3)) : ((ICSharpCode.NRefactory.Parser.AST.Statement) new UncheckedStatement(statement3)); } else if (this.la.kind == 0x4e) { base.lexer.NextToken(); ICSharpCode.NRefactory.Parser.AST.Statement statement4 = null; base.Expect(20); this.Expr(out expr); base.Expect(0x15); this.EmbeddedStatement(out statement2); if (this.la.kind == 0x42) { base.lexer.NextToken(); this.EmbeddedStatement(out statement4); } statement = (statement4 != null) ? new IfElseStatement(expr, statement2, statement4) : new IfElseStatement(expr, statement2); if ((statement4 is IfElseStatement) && ((statement4 as IfElseStatement).TrueStatement.Count == 1)) { (statement as IfElseStatement).ElseIfSections.Add(new ElseIfSection((statement4 as IfElseStatement).Condition, (statement4 as IfElseStatement).TrueStatement[0])); (statement as IfElseStatement).ElseIfSections.AddRange((statement4 as IfElseStatement).ElseIfSections); (statement as IfElseStatement).FalseStatement = (statement4 as IfElseStatement).FalseStatement; } } else if (this.la.kind == 0x6d) { base.lexer.NextToken(); List<ICSharpCode.NRefactory.Parser.AST.SwitchSection> switchSections = new List<ICSharpCode.NRefactory.Parser.AST.SwitchSection>(); base.Expect(20); this.Expr(out expr); base.Expect(0x15); base.Expect(0x10); while ((this.la.kind == 0x36) || (this.la.kind == 0x3e)) { ICSharpCode.NRefactory.Parser.AST.SwitchSection section; this.SwitchSection(out section); switchSections.Add(section); } base.Expect(0x11); statement = new SwitchStatement(expr, switchSections); } else if (this.la.kind == 0x7c) { base.lexer.NextToken(); base.Expect(20); this.Expr(out expr); base.Expect(0x15); this.EmbeddedStatement(out statement2); statement = new DoLoopStatement(expr, statement2, ConditionType.While, ConditionPosition.Start); } else if (this.la.kind == 0x40) { base.lexer.NextToken(); this.EmbeddedStatement(out statement2); base.Expect(0x7c); base.Expect(20); this.Expr(out expr); base.Expect(0x15); base.Expect(11); statement = new DoLoopStatement(expr, statement2, ConditionType.While, ConditionPosition.End); } else if (this.la.kind == 0x4b) { base.lexer.NextToken(); List<ICSharpCode.NRefactory.Parser.AST.Statement> initializer = null; List<ICSharpCode.NRefactory.Parser.AST.Statement> iterator = null; base.Expect(20); if (this.StartOf(5)) { this.ForInitializer(out initializer); } base.Expect(11); if (this.StartOf(5)) { this.Expr(out expr); } base.Expect(11); if (this.StartOf(5)) { this.ForIterator(out iterator); } base.Expect(0x15); this.EmbeddedStatement(out statement2); statement = new ForStatement(initializer, expr, iterator, statement2); } else if (this.la.kind == 0x4c) { base.lexer.NextToken(); base.Expect(20); this.Type(out type); base.Expect(1); string val = this.t.val; Point location = this.t.Location; base.Expect(80); this.Expr(out expr); base.Expect(0x15); this.EmbeddedStatement(out statement2); statement = new ForeachStatement(type, val, expr, statement2); statement.EndLocation = this.t.EndLocation; } else if (this.la.kind == 0x34) { base.lexer.NextToken(); base.Expect(11); statement = new BreakStatement(); } else if (this.la.kind == 60) { base.lexer.NextToken(); base.Expect(11); statement = new ContinueStatement(); } else if (this.la.kind == 0x4d) { this.GotoStatement(out statement); } else if (this.IsYieldStatement()) { base.Expect(1); if (this.la.kind == 100) { base.lexer.NextToken(); this.Expr(out expr); statement = new YieldStatement(new ReturnStatement(expr)); } else if (this.la.kind == 0x34) { base.lexer.NextToken(); statement = new YieldStatement(new BreakStatement()); } else { base.SynErr(0xab); } base.Expect(11); } else if (this.la.kind == 100) { base.lexer.NextToken(); if (this.StartOf(5)) { this.Expr(out expr); } base.Expect(11); statement = new ReturnStatement(expr); } else if (this.la.kind == 0x6f) { base.lexer.NextToken(); if (this.StartOf(5)) { this.Expr(out expr); } base.Expect(11); statement = new ThrowStatement(expr); } else if (this.StartOf(5)) { this.StatementExpr(out statement); base.Expect(11); } else if (this.la.kind == 0x71) { this.TryStatement(out statement); } else if (this.la.kind == 0x55) { base.lexer.NextToken(); base.Expect(20); this.Expr(out expr); base.Expect(0x15); this.EmbeddedStatement(out statement2); statement = new LockStatement(expr, statement2); } else if (this.la.kind == 120) { ICSharpCode.NRefactory.Parser.AST.Statement stmt = null; base.lexer.NextToken(); base.Expect(20); this.ResourceAcquisition(out stmt); base.Expect(0x15); this.EmbeddedStatement(out statement2); statement = new UsingStatement(stmt, statement2); } else if (this.la.kind == 0x76) { base.lexer.NextToken(); this.Block(out statement2); statement = new UnsafeStatement(statement2); } else if (this.la.kind == 0x49) { base.lexer.NextToken(); base.Expect(20); this.Type(out type); if (type.PointerNestingLevel == 0) { this.Error("can only fix pointer types"); } List<VariableDeclaration> pointerDeclarators = new List<VariableDeclaration>(1); base.Expect(1); string name = this.t.val; base.Expect(3); this.Expr(out expr); pointerDeclarators.Add(new VariableDeclaration(name, expr)); while (this.la.kind == 14) { base.lexer.NextToken(); base.Expect(1); name = this.t.val; base.Expect(3); this.Expr(out expr); pointerDeclarators.Add(new VariableDeclaration(name, expr)); } base.Expect(0x15); this.EmbeddedStatement(out statement2); statement = new FixedStatement(type, pointerDeclarators, statement2); } else { base.SynErr(0xac); } }
public virtual object TrackedVisitDoLoopStatement(DoLoopStatement doLoopStatement, object data) { return base.VisitDoLoopStatement(doLoopStatement, data); }
public virtual object VisitDoLoopStatement(DoLoopStatement doLoopStatement, object data) { throw new global::System.NotImplementedException("DoLoopStatement"); }
public object VisitDoLoopStatement(DoLoopStatement doLoopStatement, object data) { throw new NotImplementedException(); }
private bool IsMatch(DoLoopStatement left, DoLoopStatement data) { return(true); }
public override object VisitDoLoopStatement(DoLoopStatement doLoopStatement, object data) { doLoopStatement.Condition.Parent = doLoopStatement; doLoopStatement.EmbeddedStatement.Parent = doLoopStatement; return(base.VisitDoLoopStatement(doLoopStatement, data)); }
public virtual object VisitDoLoopStatement(DoLoopStatement doLoopStatement, object data) { Debug.Assert((doLoopStatement != null)); Debug.Assert((doLoopStatement.Condition != null)); Debug.Assert((doLoopStatement.EmbeddedStatement != null)); doLoopStatement.Condition.AcceptVisitor(this, data); return doLoopStatement.EmbeddedStatement.AcceptVisitor(this, data); }
public override object VisitDoLoopStatement(DoLoopStatement doLoopStatement, object data) { return(base.VisitDoLoopStatement(doLoopStatement, true)); }
// RG: public override object VisitDoLoopStatement(DoLoopStatement doLoopStatement, object data) { CodeIterationStatement forLoop = new CodeIterationStatement(); breakableStack.Push(new Breakable()); codeStack.Push(NullStmtCollection); if (doLoopStatement.ConditionPosition == ConditionPosition.End) { // do { } while (expr); // // emulate with: // for (bool _do = true; _do; _do = expr) {} // doId++; string name = "_do" + doId; forLoop.InitStatement = new CodeVariableDeclarationStatement(typeof(System.Boolean), name, new CodePrimitiveExpression(true)); forLoop.TestExpression = new CodeVariableReferenceExpression(name); forLoop.IncrementStatement = new CodeAssignStatement(new CodeVariableReferenceExpression(name), doLoopStatement.Condition == null ? new CodePrimitiveExpression(true) : (CodeExpression)doLoopStatement.Condition.AcceptVisitor(this, data)); } else { // while (expr) {} // // emulate with: // for (; expr;) {} // // Empty Init and Increment Statements forLoop.InitStatement = new CodeExpressionStatement(new CodeSnippetExpression()); forLoop.IncrementStatement = new CodeExpressionStatement(new CodeSnippetExpression()); if (doLoopStatement.Condition == null) { forLoop.TestExpression = new CodePrimitiveExpression(true); } else { forLoop.TestExpression = (CodeExpression)doLoopStatement.Condition.AcceptVisitor(this, data); } } codeStack.Pop(); codeStack.Push(forLoop.Statements); doLoopStatement.EmbeddedStatement.AcceptVisitor(this, data); codeStack.Pop(); if (forLoop.Statements.Count == 0) { forLoop.Statements.Add(new CodeSnippetStatement()); } Breakable breakable = breakableStack.Pop(); if (breakable.IsContinue) { forLoop.Statements.Add(new CodeSnippetStatement()); forLoop.Statements.Add(new CodeLabeledStatement("continue" + breakable.Id, new CodeExpressionStatement(new CodeSnippetExpression()))); } AddStmt(forLoop); if (breakable.IsBreak) { AddStmt(new CodeLabeledStatement("break" + breakable.Id, new CodeExpressionStatement(new CodeSnippetExpression()))); } return forLoop; }