aboutsummaryrefslogtreecommitdiff
path: root/node_modules/es5-ext/function/_define-length.js
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2017-08-14 05:01:11 +0200
committerFlorian Dold <florian.dold@gmail.com>2017-08-14 05:02:09 +0200
commit363723fc84f7b8477592e0105aeb331ec9a017af (patch)
tree29f92724f34131bac64d6a318dd7e30612e631c7 /node_modules/es5-ext/function/_define-length.js
parent5634e77ad96bfe1818f6b6ee70b7379652e5487f (diff)
node_modules
Diffstat (limited to 'node_modules/es5-ext/function/_define-length.js')
-rw-r--r--node_modules/es5-ext/function/_define-length.js56
1 files changed, 56 insertions, 0 deletions
diff --git a/node_modules/es5-ext/function/_define-length.js b/node_modules/es5-ext/function/_define-length.js
new file mode 100644
index 000000000..13749d3bb
--- /dev/null
+++ b/node_modules/es5-ext/function/_define-length.js
@@ -0,0 +1,56 @@
+"use strict";
+
+var toPosInt = require("../number/to-pos-integer");
+
+var test = function (arg1, arg2) {
+ return arg2;
+};
+
+var desc, defineProperty, generate, mixin;
+
+try {
+ Object.defineProperty(test, "length", {
+ configurable: true,
+ writable: false,
+ enumerable: false,
+ value: 1
+ });
+} catch (ignore) {}
+
+if (test.length === 1) {
+ // ES6
+ desc = { configurable: true, writable: false, enumerable: false };
+ defineProperty = Object.defineProperty;
+ module.exports = function (fn, length) {
+ length = toPosInt(length);
+ if (fn.length === length) return fn;
+ desc.value = length;
+ return defineProperty(fn, "length", desc);
+ };
+} else {
+ mixin = require("../object/mixin");
+ generate = (function () {
+ var cache = [];
+ return function (length) {
+ var args, i = 0;
+ if (cache[length]) return cache[length];
+ args = [];
+ while (length--) args.push("a" + (++i).toString(36));
+ // eslint-disable-next-line no-new-func
+ return new Function(
+ "fn",
+ "return function (" + args.join(", ") + ") { return fn.apply(this, arguments); };"
+ );
+ };
+ }());
+ module.exports = function (src, length) {
+ var target;
+ length = toPosInt(length);
+ if (src.length === length) return src;
+ target = generate(length)(src);
+ try {
+ mixin(target, src);
+ } catch (ignore) {}
+ return target;
+ };
+}