public override void VisitWhileStatement(WhileStatement node) { VisitChildren(node); var condition = node.Condition; var body = node.EmbeddedStatement; condition.Remove(); body.Remove(); // Special-case constant conditions var constant = BoolConstant(condition); if (constant == true) { condition = null; // Convert "while (true)" => "for(;;)" } else if (constant == false) { node.Remove(); // Remove "while (false)" return; } // Convert "while (x)" => "for (;x;)" since it's shorter and compresses better var loop = new ForStatement(); loop.Condition = condition; loop.EmbeddedStatement = body; node.ReplaceWith(loop); ReplaceBlockWithSingleStatement(body); }
public override void VisitWhileStatement(WhileStatement e) { #region 删除无实际代码的循环体 //while (true) //{ // switch (2) // { // case 0: // continue; // } // break; //} //====>删除 PrimitiveExpression pe = e.Condition as PrimitiveExpression; if (pe != null) { var statements = e.Descendants.OfType<Statement>().Where(x => !(x is BlockStatement) && !(x is BreakStatement) && !(x is ContinueStatement) && !(x is SwitchStatement) && !(x is ForStatement) && !(x is ForeachStatement) && !(x is WhileStatement) && !(x is DoWhileStatement) && !(x is IfElseStatement)); if (!statements.Any()) { e.Remove(); return; } } #endregion base.VisitWhileStatement(e); }