'if passed a single callable argument: decorate it with mark info.
otherwise add *args/**kwargs in-place to mark information.'

def __call__(self, *args, **kwargs):

    if (args and (not kwargs)):
        func = args[0]
        is_class = inspect.isclass(func)
        if ((len(args) == 1) and (istestfunc(func) or is_class)):
            if is_class:
                if hasattr(func, 'pytestmark'):
                    mark_list = func.pytestmark
                    if (not isinstance(mark_list, list)):
                        mark_list = [mark_list]
                    mark_list = (mark_list + [self])
                    func.pytestmark = mark_list
                else:
                    func.pytestmark = [self]
            else:
                holder = getattr(func, self.name, None)
                if (holder is None):
                    holder = MarkInfo(self.name, self.args, self.kwargs)
                    setattr(func, self.name, holder)
                else:
                    holder.add(self.args, self.kwargs)
            return func
    kw = self.kwargs.copy()
    kw.update(kwargs)
    args = (self.args + args)
    return self.__class__(self.name, args=args, kwargs=kw)
