2 var path = require('./_path')
3 , invoke = require('./_invoke')
4 , aFunction = require('./_a-function');
5 module.exports = function(/* ...pargs */){
6 var fn = aFunction(this)
7 , length = arguments.length
8 , pargs = Array(length)
12 while(length > i)if((pargs[i] = arguments[i++]) === _)holder = true;
13 return function(/* ...args */){
15 , aLen = arguments.length
17 if(!holder && !aLen)return invoke(fn, pargs, that);
19 if(holder)for(;length > j; j++)if(args[j] === _)args[j] = arguments[k++];
20 while(aLen > k)args.push(arguments[k++]);
21 return invoke(fn, args, that);