code: def loop_node_skeleton(self, test, node):
          
          body_connect_stmts = self.stmt_star_handler(
              node.body,
              prev_node_to_avoid=self.nodes[-1]
          )
  
          test.connect(body_connect_stmts.first_statement)
          test.connect_predecessors(body_connect_stmts.last_statements)
  
          # last_nodes is used for making connections to the next node in the parent node
          # this is handled in stmt_star_handler
          last_nodes = list()
          last_nodes.extend(body_connect_stmts.break_statements)
  
          if node.orelse:
              orelse_connect_stmts = self.stmt_star_handler(
                  node.orelse,
                  prev_node_to_avoid=self.nodes[-1]
              )
  
              test.connect(orelse_connect_stmts.first_statement)
              last_nodes.extend(orelse_connect_stmts.last_statements)
          else:
              last_nodes.append(test)  # if there is no orelse, test needs an edge to the next_node
  
          return ControlFlowNode(test, last_nodes, list())
docs: Common handling of looped structures, while and for.