1 var apply = require(
'./_apply'),
2 createCtor = require(
'./_createCtor'),
3 createHybrid = require(
'./_createHybrid'),
4 createRecurry = require(
'./_createRecurry'),
5 getHolder = require(
'./_getHolder'),
6 replaceHolders = require(
'./_replaceHolders'),
7 root = require(
'./_root');
18 function createCurry(func, bitmask, arity) {
19 var Ctor = createCtor(func);
22 var length = arguments.length,
25 placeholder = getHolder(wrapper);
28 args[index] = arguments[index];
30 var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)
32 : replaceHolders(args, placeholder);
34 length -= holders.length;
37 func, bitmask, createHybrid, wrapper.placeholder, undefined,
38 args, holders, undefined, undefined, arity - length);
40 var fn = (
this &&
this !== root &&
this instanceof wrapper) ? Ctor : func;
41 return apply(fn,
this, args);
46 module.exports = createCurry;