(self, o: ForStmt)
| 462 | self.tracker.exit_scope() |
| 463 | |
| 464 | def visit_for_stmt(self, o: ForStmt) -> None: |
| 465 | o.expr.accept(self) |
| 466 | self.process_lvalue(o.index) |
| 467 | o.index.accept(self) |
| 468 | self.tracker.start_branch_statement() |
| 469 | loop = Loop() |
| 470 | self.loops.append(loop) |
| 471 | o.body.accept(self) |
| 472 | self.tracker.next_branch() |
| 473 | self.tracker.end_branch_statement() |
| 474 | if o.else_body is not None: |
| 475 | # If the loop has a `break` inside, `else` is executed conditionally. |
| 476 | # If the loop doesn't have a `break` either the function will return or |
| 477 | # execute the `else`. |
| 478 | has_break = loop.has_break |
| 479 | if has_break: |
| 480 | self.tracker.start_branch_statement() |
| 481 | if loop.break_vars is not None: |
| 482 | for bv in loop.break_vars: |
| 483 | self.tracker.record_definition(bv) |
| 484 | self.tracker.next_branch() |
| 485 | o.else_body.accept(self) |
| 486 | if has_break: |
| 487 | self.tracker.end_branch_statement() |
| 488 | self.loops.pop() |
| 489 | |
| 490 | def visit_return_stmt(self, o: ReturnStmt) -> None: |
| 491 | super().visit_return_stmt(o) |
nothing calls this directly
no test coverage detected