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