(self, all_funcs_completed=False)
return changes
Iteratively analyze function features until a fixed point is reached.

        :return: the "changes" dict
        :rtype:  dict
Iteratively analyze function features until a fixed point is reached.
Iteratively analyze function features until a fixed point is reached .
def _iteratively_analyze_function_features(self, all_funcs_completed=False):
        """
        Iteratively analyze function features until a fixed point is reached.

        :return: the "changes" dict
        :rtype:  dict
        """

        changes = {
            'functions_do_not_return': set(),
            'functions_return': set()
        }

        while True:
            new_changes = self._analyze_function_features(all_funcs_completed=all_funcs_completed)

            changes['functions_do_not_return'] |= set(new_changes['functions_do_not_return'])
            changes['functions_return'] |= set(new_changes['functions_return'])

            if not new_changes['functions_do_not_return'] and not new_changes['functions_return']:
                # a fixed point is reached
                break

        return changes
def _iteratively_analyze_function_features ( self , all_funcs_completed = False ) : changes = { 'functions_do_not_return' : set ( ) , 'functions_return' : set ( ) } while True : new_changes = self . _analyze_function_features ( all_funcs_completed = all_funcs_completed ) changes [ 'functions_do_not_return' ] |= set ( new_changes [ 'functions_do_not_return' ] ) changes [ 'functions_return' ] |= set ( new_changes [ 'functions_return' ] ) if not new_changes [ 'functions_do_not_return' ] and not new_changes [ 'functions_return' ] : # a fixed point is reached break return changes