'Resolve a call to a given function type.  A signature is returned.'

def resolve_call(self, fnty, pos_args, kw_args):

    if (isinstance(fnty, types.RecursiveCall) and (not self._skip_recursion)):
        disp = fnty.dispatcher_type.dispatcher
        (pysig, args) = disp.fold_argument_types(pos_args, kw_args)
        frame = self.context.callstack.match(disp.py_func, args)
        if (frame is None):
            sig = self.context.resolve_function_type(fnty.dispatcher_type, pos_args, kw_args)
            fndesc = disp.overloads[args].fndesc
            fnty.overloads[args] = qualifying_prefix(fndesc.modname, fndesc.unique_name)
            return sig
        fnid = frame.func_id
        fnty.overloads[args] = qualifying_prefix(fnid.modname, fnid.unique_name)
        return_type = frame.typeinfer.return_types_from_partial()
        if (return_type is None):
            raise TypingError('cannot    type    infer    runaway    recursion')
        sig = typing.signature(return_type, *args)
        sig.pysig = pysig
        return sig
    else:
        return self.context.resolve_function_type(fnty, pos_args, kw_args)
