You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					57 lines
				
				2.1 KiB
			
		
		
			
		
	
	
					57 lines
				
				2.1 KiB
			| 
											3 years ago
										 | var isLaziable = require('./_isLaziable'), | ||
|  |     setData = require('./_setData'), | ||
|  |     setWrapToString = require('./_setWrapToString'); | ||
|  | 
 | ||
|  | /** Used to compose bitmasks for function metadata. */ | ||
|  | var WRAP_BIND_FLAG = 1, | ||
|  |     WRAP_BIND_KEY_FLAG = 2, | ||
|  |     WRAP_CURRY_BOUND_FLAG = 4, | ||
|  |     WRAP_CURRY_FLAG = 8, | ||
|  |     WRAP_PARTIAL_FLAG = 32, | ||
|  |     WRAP_PARTIAL_RIGHT_FLAG = 64; | ||
|  | 
 | ||
|  | /** | ||
|  |  * Creates a function that wraps `func` to continue currying. | ||
|  |  * | ||
|  |  * @private | ||
|  |  * @param {Function} func The function to wrap. | ||
|  |  * @param {number} bitmask The bitmask flags. See `createWrap` for more details. | ||
|  |  * @param {Function} wrapFunc The function to create the `func` wrapper. | ||
|  |  * @param {*} placeholder The placeholder value. | ||
|  |  * @param {*} [thisArg] The `this` binding of `func`. | ||
|  |  * @param {Array} [partials] The arguments to prepend to those provided to | ||
|  |  *  the new function. | ||
|  |  * @param {Array} [holders] The `partials` placeholder indexes. | ||
|  |  * @param {Array} [argPos] The argument positions of the new function. | ||
|  |  * @param {number} [ary] The arity cap of `func`. | ||
|  |  * @param {number} [arity] The arity of `func`. | ||
|  |  * @returns {Function} Returns the new wrapped function. | ||
|  |  */ | ||
|  | function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { | ||
|  |   var isCurry = bitmask & WRAP_CURRY_FLAG, | ||
|  |       newHolders = isCurry ? holders : undefined, | ||
|  |       newHoldersRight = isCurry ? undefined : holders, | ||
|  |       newPartials = isCurry ? partials : undefined, | ||
|  |       newPartialsRight = isCurry ? undefined : partials; | ||
|  | 
 | ||
|  |   bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG); | ||
|  |   bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG); | ||
|  | 
 | ||
|  |   if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) { | ||
|  |     bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG); | ||
|  |   } | ||
|  |   var newData = [ | ||
|  |     func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, | ||
|  |     newHoldersRight, argPos, ary, arity | ||
|  |   ]; | ||
|  | 
 | ||
|  |   var result = wrapFunc.apply(undefined, newData); | ||
|  |   if (isLaziable(func)) { | ||
|  |     setData(result, newData); | ||
|  |   } | ||
|  |   result.placeholder = placeholder; | ||
|  |   return setWrapToString(result, func, bitmask); | ||
|  | } | ||
|  | 
 | ||
|  | module.exports = createRecurry; |