'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 = 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); }; };