MCPcopy
hub / github.com/stemkoski/stemkoski.github.com / createWrapper

Function createWrapper

MathBox/mathbox-bundle.js:36528–36584  ·  view source on GitHub ↗

* Creates a function that, when called, either curries or invokes `func` * with an optional `this` binding and partially applied arguments. * * @private * @param {Function|string} func The function or method name to reference. * @param {number} bitmask The bitmask of method

(func, bitmask, partialArgs, partialRightArgs, thisArg, arity)

Source from the content-addressed store, hash-verified

36526 * @returns {Function} Returns the new function.
36527 */
36528 function createWrapper(func, bitmask, partialArgs, partialRightArgs, thisArg, arity) {
36529 var isBind = bitmask & 1,
36530 isBindKey = bitmask & 2,
36531 isCurry = bitmask & 4,
36532 isCurryBound = bitmask & 8,
36533 isPartial = bitmask & 16,
36534 isPartialRight = bitmask & 32;
36535
36536 if (!isBindKey && !isFunction(func)) {
36537 throw new TypeError;
36538 }
36539 if (isPartial && !partialArgs.length) {
36540 bitmask &= ~16;
36541 isPartial = partialArgs = false;
36542 }
36543 if (isPartialRight && !partialRightArgs.length) {
36544 bitmask &= ~32;
36545 isPartialRight = partialRightArgs = false;
36546 }
36547 var bindData = func && func.__bindData__;
36548 if (bindData && bindData !== true) {
36549 // clone `bindData`
36550 bindData = slice(bindData);
36551 if (bindData[2]) {
36552 bindData[2] = slice(bindData[2]);
36553 }
36554 if (bindData[3]) {
36555 bindData[3] = slice(bindData[3]);
36556 }
36557 // set `thisBinding` is not previously bound
36558 if (isBind && !(bindData[1] & 1)) {
36559 bindData[4] = thisArg;
36560 }
36561 // set if previously bound but not currently (subsequent curried functions)
36562 if (!isBind && bindData[1] & 1) {
36563 bitmask |= 8;
36564 }
36565 // set curried arity if not yet set
36566 if (isCurry && !(bindData[1] & 4)) {
36567 bindData[5] = arity;
36568 }
36569 // append partial left arguments
36570 if (isPartial) {
36571 push.apply(bindData[2] || (bindData[2] = []), partialArgs);
36572 }
36573 // append partial right arguments
36574 if (isPartialRight) {
36575 unshift.apply(bindData[3] || (bindData[3] = []), partialRightArgs);
36576 }
36577 // merge flags
36578 bindData[1] |= bitmask;
36579 return createWrapper.apply(null, bindData);
36580 }
36581 // fast path for `_.bind`
36582 var creater = (bitmask == 1 || bitmask === 17) ? baseBind : baseCreateWrapper;
36583 return creater([func, bitmask, partialArgs, partialRightArgs, thisArg, arity]);
36584 }
36585

Callers 7

bindFunction · 0.85
bindAllFunction · 0.85
bindKeyFunction · 0.85
curryFunction · 0.85
partialFunction · 0.85
partialRightFunction · 0.85
wrapFunction · 0.85

Calls 2

sliceFunction · 0.85
isFunctionFunction · 0.70

Tested by

no test coverage detected