code: function wrap(func, superFunc) {
        function superWrapper() {
          var ret;
          var sup  = this && this.__nextSuper;
          var args = new Array(arguments.length);
          for (var i = 0, l = args.length; i < l; i++) {
            args[i] = arguments[i];
          }
          if(this) { this.__nextSuper = superFunc; }
          ret = apply(this, func, args);
          if(this) { this.__nextSuper = sup; }
          return ret;
        }
  
        superWrapper.wrappedFunction = func;
        superWrapper.wrappedFunction.__ember_arity__ = func.length;
        superWrapper.__ember_observes__ = func.__ember_observes__;
        superWrapper.__ember_observesBefore__ = func.__ember_observesBefore__;
        superWrapper.__ember_listens__ = func.__ember_listens__;
  
        return superWrapper;
      }
docs: Wraps the passed function so that `this._super` will point to the superFunc
  when the function is invoked. This is the primitive we use to implement
  calls to super.
  
  @private
  @method wrap
  @for Ember
  @param {Function} func The function to call
  @param {Function} superFunc The super function.
  @return {Function} wrapped function.