| /** |
| * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/> |
| * Build: `lodash modularize underscore exports="node" -o ./underscore/` |
| * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/> |
| * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE> |
| * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors |
| * Available under MIT license <http://lodash.com/license> |
| */ |
| var baseBind = require('./baseBind'), |
| baseCreateWrapper = require('./baseCreateWrapper'), |
| isFunction = require('../objects/isFunction'), |
| slice = require('./slice'); |
| |
| /** |
| * 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 flags to compose. |
| * The bitmask may be composed of the following flags: |
| * 1 - `_.bind` |
| * 2 - `_.bindKey` |
| * 4 - `_.curry` |
| * 8 - `_.curry` (bound) |
| * 16 - `_.partial` |
| * 32 - `_.partialRight` |
| * @param {Array} [partialArgs] An array of arguments to prepend to those |
| * provided to the new function. |
| * @param {Array} [partialRightArgs] An array of arguments to append to those |
| * provided to the new function. |
| * @param {*} [thisArg] The `this` binding of `func`. |
| * @param {number} [arity] The arity of `func`. |
| * @returns {Function} Returns the new function. |
| */ |
| function createWrapper(func, bitmask, partialArgs, partialRightArgs, thisArg, arity) { |
| var isBind = bitmask & 1, |
| isBindKey = bitmask & 2, |
| isCurry = bitmask & 4, |
| isCurryBound = bitmask & 8, |
| isPartial = bitmask & 16, |
| isPartialRight = bitmask & 32; |
| |
| if (!isBindKey && !isFunction(func)) { |
| throw new TypeError; |
| } |
| if (isPartial && !partialArgs.length) { |
| bitmask &= ~16; |
| isPartial = partialArgs = false; |
| } |
| if (isPartialRight && !partialRightArgs.length) { |
| bitmask &= ~32; |
| isPartialRight = partialRightArgs = false; |
| } |
| // fast path for `_.bind` |
| var creater = (bitmask == 1 || bitmask === 17) ? baseBind : baseCreateWrapper; |
| return creater([func, bitmask, partialArgs, partialRightArgs, thisArg, arity]); |
| } |
| |
| module.exports = createWrapper; |