nodes: 0, module; 1, function_definition; 2, function_name:pop_job; 3, parameters; 4, block; 5, identifier:self; 6, default_parameter; 7, expression_statement; 8, if_statement; 9, if_statement; 10, comment:# Prioritize returning functions; 11, for_statement; 12, return_statement; 13, identifier:returning; 14, True; 15, comment:"""
          Pop a job from the pending jobs list.
  
          When returning == True, we prioritize the jobs whose functions are known to be returning (function.returning is
          True). As an optimization, we are sorting the pending jobs list according to job.function.returning.
  
          :param bool returning: Only pop a pending job if the corresponding function returns.
          :return: A pending job if we can find one, or None if we cannot find any that satisfies the requirement.
          :rtype: angr.analyses.cfg.cfg_fast.CFGJob
          """; 16, not_operator; 17, block; 18, not_operator; 19, block; 20, identifier:func_addr; 21, call; 22, block; 23, None; 24, identifier:self; 25, return_statement; 26, identifier:returning; 27, return_statement; 28, identifier:reversed; 29, argument_list; 30, if_statement; 31, return_statement; 32, None; 33, call; 34, call; 35, comparison_operator:func_addr not in self._returning_functions; 36, block; 37, call; 38, attribute; 39, argument_list; 40, attribute; 41, argument_list; 42, identifier:func_addr; 43, attribute; 44, continue_statement; 45, attribute; 46, argument_list; 47, identifier:self; 48, identifier:_pop_job; 49, call; 50, attribute; 51, identifier:keys; 52, identifier:self; 53, identifier:_returning_functions; 54, identifier:self; 55, identifier:_pop_job; 56, identifier:func_addr; 57, identifier:next; 58, argument_list; 59, identifier:self; 60, identifier:_jobs; 61, call; 62, identifier:reversed; 63, argument_list; 64, call; 65, attribute; 66, argument_list; 67, attribute; 68, identifier:keys; 69, identifier:self; 70, identifier:_jobs
code: def pop_job(self, returning=True):
          """
          Pop a job from the pending jobs list.
  
          When returning == True, we prioritize the jobs whose functions are known to be returning (function.returning is
          True). As an optimization, we are sorting the pending jobs list according to job.function.returning.
  
          :param bool returning: Only pop a pending job if the corresponding function returns.
          :return: A pending job if we can find one, or None if we cannot find any that satisfies the requirement.
          :rtype: angr.analyses.cfg.cfg_fast.CFGJob
          """
  
          if not self:
              return None
  
          if not returning:
              return self._pop_job(next(reversed(self._jobs.keys())))
  
          # Prioritize returning functions
          for func_addr in reversed(self._jobs.keys()):
              if func_addr not in self._returning_functions:
                  continue
              return self._pop_job(func_addr)
  
          return None