3 var toPosInt = require('../number/to-pos-integer')
5 , test = function (a, b) {}, desc, defineProperty
9 Object.defineProperty(test, 'length', { configurable: true, writable: false,
10 enumerable: false, value: 1 });
13 if (test.length === 1) {
15 desc = { configurable: true, writable: false, enumerable: false };
16 defineProperty = Object.defineProperty;
17 module.exports = function (fn, length) {
18 length = toPosInt(length);
19 if (fn.length === length) return fn;
21 return defineProperty(fn, 'length', desc);
24 mixin = require('../object/mixin');
25 generate = (function () {
29 if (cache[l]) return cache[l];
31 while (l--) args.push('a' + (++i).toString(36));
32 return new Function('fn', 'return function (' + args.join(', ') +
33 ') { return fn.apply(this, arguments); };');
36 module.exports = function (src, length) {
38 length = toPosInt(length);
39 if (src.length === length) return src;
40 target = generate(length)(src);
41 try { mixin(target, src); } catch (ignore) {}