23 LoopControlFlowVisitor() {}
25 bool visitExpression(
const Expression& expr)
override {
30 bool visitStatement(
const Statement& stmt)
override {
31 switch (stmt.
kind()) {
32 case Statement::Kind::kContinue:
35 fResult.fHasContinue |= (
fDepth == 0);
38 case Statement::Kind::kBreak:
41 fResult.fHasBreak |= (
fDepth == 0);
44 case Statement::Kind::kReturn:
46 fResult.fHasReturn =
true;
49 case Statement::Kind::kFor:
50 case Statement::Kind::kDo:
51 case Statement::Kind::kSwitch: {
63 return fResult.fHasContinue && fResult.fHasBreak && fResult.fHasReturn;
66 LoopControlFlowInfo fResult;
73 LoopControlFlowVisitor visitor;
74 visitor.visitStatement(stmt);
75 return visitor.fResult;