summaryrefslogtreecommitdiff
path: root/deps/npm/node_modules/node-gyp/node_modules/path-array/node_modules/array-index/node_modules/es6-symbol/node_modules/es5-ext/function/#/curry.js
blob: 943d6faf860772e13f8a3aac1c449d9483a049b6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
'use strict';

var toPosInt     = require('../../number/to-pos-integer')
  , callable     = require('../../object/valid-callable')
  , defineLength = require('../_define-length')

  , slice = Array.prototype.slice, apply = Function.prototype.apply
  , curry;

curry = function self(fn, length, preArgs) {
	return defineLength(function () {
		var args = preArgs ?
				preArgs.concat(slice.call(arguments, 0, length - preArgs.length)) :
				slice.call(arguments, 0, length);
		return (args.length === length) ? apply.call(fn, this, args) :
				self(fn, length, args);
	}, preArgs ? (length - preArgs.length) : length);
};

module.exports = function (/*length*/) {
	var length = arguments[0];
	return curry(callable(this),
		isNaN(length) ? toPosInt(this.length) : toPosInt(length));
};