1 | import isLaziable from './_isLaziable.js';
|
2 | import setData from './_setData.js';
|
3 | import setWrapToString from './_setWrapToString.js';
|
4 |
|
5 |
|
6 | var WRAP_BIND_FLAG = 1,
|
7 | WRAP_BIND_KEY_FLAG = 2,
|
8 | WRAP_CURRY_BOUND_FLAG = 4,
|
9 | WRAP_CURRY_FLAG = 8,
|
10 | WRAP_PARTIAL_FLAG = 32,
|
11 | WRAP_PARTIAL_RIGHT_FLAG = 64;
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
24 |
|
25 |
|
26 |
|
27 |
|
28 |
|
29 |
|
30 | function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {
|
31 | var isCurry = bitmask & WRAP_CURRY_FLAG,
|
32 | newHolders = isCurry ? holders : undefined,
|
33 | newHoldersRight = isCurry ? undefined : holders,
|
34 | newPartials = isCurry ? partials : undefined,
|
35 | newPartialsRight = isCurry ? undefined : partials;
|
36 |
|
37 | bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);
|
38 | bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);
|
39 |
|
40 | if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {
|
41 | bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);
|
42 | }
|
43 | var newData = [
|
44 | func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,
|
45 | newHoldersRight, argPos, ary, arity
|
46 | ];
|
47 |
|
48 | var result = wrapFunc.apply(undefined, newData);
|
49 | if (isLaziable(func)) {
|
50 | setData(result, newData);
|
51 | }
|
52 | result.placeholder = placeholder;
|
53 | return setWrapToString(result, func, bitmask);
|
54 | }
|
55 |
|
56 | export default createRecurry;
|