code: function HandlerInfo(channel, options, func) {
    if (channel.indexOf('*') !== -1 &&
        channel.indexOf('*') !== channel.length - 1) {
      throw new Error("Bad channel name '" + channel + "'. Broadcast symbol (*) must " +
                      'be the last character.');
    }
  
    this.channel   = channel;
    this.func      = func;
    this.name      = func.name || options.name || '<anonymous>';
    this.gen       = isGeneratorFunction(func);
    this.async     = isAsyncFunction(func);
    this.sync      = func.length === 0 || func.length === 1;
    this.once      = Boolean(options.once);
    this.ensure    = Boolean(options.ensure);
    this.parallel  = Boolean(options.parallel);
    this.priority  = Number(options.priority || 0);
    this.ncalled   = 0;
  
    // Use channel name of this handler only as a prefix to match or not.
    this.isBroadcast = (channel.charAt(channel.length - 1) === '*');
  
    // Used to match this handler.
    this.lookupString = this.isBroadcast ? channel.slice(0, -1) : channel;
  
    // Wrapper cache for unified handler call
    this.func_wrapped = null;
  }
docs: //////////////////////////////////////////////////////////////////////////// Structure to hold handler data