Adds a CallDescriptor hash to the stack. If there is a hook associated with this call it will be executed and passed an instance of the call descriptor.

        :param caliendo.call_descriptor.CallDescriptor call_descriptor: The call descriptor to add to the stack.

def add(self, call_descriptor):
        """
        Adds a CallDescriptor hash to the stack. If there is a hook associated with this call it will be executed and passed an instance of the call descriptor.

        :param caliendo.call_descriptor.CallDescriptor call_descriptor: The call descriptor to add to the stack.

        """
        h = call_descriptor.hash
        self.calls.append(h)
        if h in self.__skip:
            self.__skip[h] -= 1
            if self.__skip[h] == 0:
                del self.__skip[h]
        else:
            hook = self.hooks.get(h, False)
            if hook:
                hook.callback(call_descriptor)