code: def return_handler(
          self,
          call_node,
          function_nodes,
          saved_function_call_index,
          first_node
      ):
          
          if any(isinstance(node, YieldNode) for node in function_nodes):
              # Presence of a `YieldNode` means that the function is a generator
              rhs_prefix = 'yld_'
          elif any(isinstance(node, ConnectToExitNode) for node in function_nodes):
              # Only `Return`s and `Raise`s can be of type ConnectToExitNode
              rhs_prefix = 'ret_'
          else:
              return  # No return value
  
          # Create e.g. ~call_1 = ret_func_foo RestoreNode
          LHS = CALL_IDENTIFIER + 'call_' + str(saved_function_call_index)
          RHS = rhs_prefix + get_call_names_as_string(call_node.func)
          return_node = RestoreNode(
              LHS + ' = ' + RHS,
              LHS,
              [RHS],
              line_number=call_node.lineno,
              path=self.filenames[-1]
          )
          return_node.first_node = first_node
          self.nodes[-1].connect(return_node)
          self.nodes.append(return_node)
docs: Handle the return from a function during a function call.
  
          Args:
              call_node(ast.Call) : The node that calls the definition.
              function_nodes(list[Node]): List of nodes of the function being called.
              saved_function_call_index(int): Unique number for each call.
              first_node(EntryOrExitNode or RestoreNode): Used to connect previous statements to this function.