| 'use strict'; |
| var path = require('./_path') |
| , invoke = require('./_invoke') |
| , aFunction = require('./_a-function'); |
| module.exports = function(/* ...pargs */){ |
| var fn = aFunction(this) |
| , length = arguments.length |
| , pargs = Array(length) |
| , i = 0 |
| , _ = path._ |
| , holder = false; |
| while(length > i)if((pargs[i] = arguments[i++]) === _)holder = true; |
| return function(/* ...args */){ |
| var that = this |
| , aLen = arguments.length |
| , j = 0, k = 0, args; |
| if(!holder && !aLen)return invoke(fn, pargs, that); |
| args = pargs.slice(); |
| if(holder)for(;length > j; j++)if(args[j] === _)args[j] = arguments[k++]; |
| while(aLen > k)args.push(arguments[k++]); |
| return invoke(fn, args, that); |
| }; |
| }; |