00001 var isLaziable = require('./_isLaziable'), 00002 setData = require('./_setData'), 00003 setWrapToString = require('./_setWrapToString'); 00004 00006 var WRAP_BIND_FLAG = 1, 00007 WRAP_BIND_KEY_FLAG = 2, 00008 WRAP_CURRY_BOUND_FLAG = 4, 00009 WRAP_CURRY_FLAG = 8, 00010 WRAP_PARTIAL_FLAG = 32, 00011 WRAP_PARTIAL_RIGHT_FLAG = 64; 00012 00030 function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { 00031 var isCurry = bitmask & WRAP_CURRY_FLAG, 00032 newHolders = isCurry ? holders : undefined, 00033 newHoldersRight = isCurry ? undefined : holders, 00034 newPartials = isCurry ? partials : undefined, 00035 newPartialsRight = isCurry ? undefined : partials; 00036 00037 bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG); 00038 bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG); 00039 00040 if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) { 00041 bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG); 00042 } 00043 var newData = [ 00044 func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, 00045 newHoldersRight, argPos, ary, arity 00046 ]; 00047 00048 var result = wrapFunc.apply(undefined, newData); 00049 if (isLaziable(func)) { 00050 setData(result, newData); 00051 } 00052 result.placeholder = placeholder; 00053 return setWrapToString(result, func, bitmask); 00054 } 00055 00056 module.exports = createRecurry;