code: def make_for_loop(loop_body_instrs, else_body_instrs, context):
      
      # Instructions from start until GET_ITER are the builders for the iterator
      # expression.
      iterator_expr = make_expr(
          popwhile(not_a(instrs.GET_ITER), loop_body_instrs, side='left')
      )
  
      # Next is the GET_ITER instruction, which we don't need.
      loop_body_instrs.popleft()
  
      # Next is FOR_ITER, which is the jump target for Continue nodes.
      top_of_loop = loop_body_instrs.popleft()
  
      # This can be a STORE_* or an UNPACK_SEQUENCE followed by some number of
      # stores.
      target = make_assign_target(
          loop_body_instrs.popleft(),
          loop_body_instrs,
          stack=[],
      )
  
      body, orelse_body = make_loop_body_and_orelse(
          top_of_loop, loop_body_instrs, else_body_instrs, context
      )
  
      return ast.For(
          target=target,
          iter=iterator_expr,
          body=body,
          orelse=orelse_body,
      )
docs: Make an ast.For node.