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.
		
		
		
		
		
			
		
			
				
					
					
						
							56 lines
						
					
					
						
							2.1 KiB
						
					
					
				
			
		
		
	
	
							56 lines
						
					
					
						
							2.1 KiB
						
					
					
				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;
 | 
						|
 |