'Get all the specific function types of this one.'

def get_all_specialized_function_types(self):

    assert self.is_fused
    if self.entry.fused_cfunction:
        return [n.type for n in self.entry.fused_cfunction.nodes]
    elif (self.cached_specialized_types is not None):
        return self.cached_specialized_types
    cfunc_entries = self.entry.scope.cfunc_entries
    cfunc_entries.remove(self.entry)
    result = []
    permutations = self.get_all_specialized_permutations()
    for (cname, fused_to_specific) in permutations:
        new_func_type = self.entry.type.specialize(fused_to_specific)
        if self.optional_arg_count:
            self.declare_opt_arg_struct(new_func_type, cname)
        new_entry = copy.deepcopy(self.entry)
        new_func_type.specialize_entry(new_entry, cname)
        new_entry.type = new_func_type
        new_func_type.entry = new_entry
        result.append(new_func_type)
        cfunc_entries.append(new_entry)
    self.cached_specialized_types = result
    return result
