示例#1
0
 private void EliminateViaDoWhile(IfStatement gotoStatement, Statement labeledStatement)
 {
     V_0 = new List <BreakStatement>();
     V_1 = new List <ContinueStatement>();
     V_2 = this.GetOuterBlock(labeledStatement);
     V_3 = V_2.get_Statements().IndexOf(labeledStatement);
     V_4 = V_2.get_Statements().IndexOf(gotoStatement);
     V_5 = this.CollectStatements(V_3, V_4, V_2);
     if (this.ShouldCheck(gotoStatement))
     {
         stackVariable127 = new ContinueAndBreakFinder();
         stackVariable127.Visit(V_5);
         V_0 = stackVariable127.get_Breaks();
         V_1 = stackVariable127.get_Continues();
     }
     V_7 = V_0.GetEnumerator();
     try
     {
         while (V_7.MoveNext())
         {
             V_8                    = V_7.get_Current();
             stackVariable29        = this.GetOuterBlock(V_8);
             V_9                    = stackVariable29.get_Statements().IndexOf(V_8);
             this.usedBreakVariable = true;
             V_10                   = new ExpressionStatement(new BinaryExpression(26, new VariableReferenceExpression(this.breakVariable, null), this.GetLiteralExpression(true), this.typeSystem, null, false));
             stackVariable29.AddStatementAt(V_9, V_10);
         }
     }
     finally
     {
         if (V_7 != null)
         {
             V_7.Dispose();
         }
     }
     V_11 = V_1.GetEnumerator();
     try
     {
         while (V_11.MoveNext())
         {
             V_12                      = V_11.get_Current();
             stackVariable60           = this.GetOuterBlock(V_12);
             V_13                      = stackVariable60.get_Statements().IndexOf(V_12);
             this.usedContinueVariable = true;
             V_14                      = new ExpressionStatement(new BinaryExpression(26, new VariableReferenceExpression(this.continueVariable, null), this.GetLiteralExpression(true), this.typeSystem, null, false));
             stackVariable60.get_Statements().RemoveAt(V_13);
             stackVariable60.AddStatementAt(V_13, new BreakStatement(null));
             stackVariable60.AddStatementAt(V_13, V_14);
         }
     }
     finally
     {
         if (V_11 != null)
         {
             V_11.Dispose();
         }
     }
     V_6 = new DoWhileStatement(gotoStatement.get_Condition(), V_5);
     V_4 = V_2.get_Statements().IndexOf(gotoStatement);
     V_2.AddStatementAt(V_4, V_6);
     dummyVar0 = V_2.get_Statements().Remove(gotoStatement);
     if (V_0.get_Count() > 0)
     {
         this.AddBreakContinueConditional(V_4 + 1, V_2, new BreakStatement(null), this.breakVariable);
     }
     if (V_1.get_Count() > 0)
     {
         this.AddBreakContinueConditional(V_4 + 1, V_2, new ContinueStatement(null), this.continueVariable);
     }
     return;
 }