diff options
Diffstat (limited to 'src/node_modules/es-abstract/2019/SetFunctionLength.js')
-rw-r--r-- | src/node_modules/es-abstract/2019/SetFunctionLength.js | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/node_modules/es-abstract/2019/SetFunctionLength.js b/src/node_modules/es-abstract/2019/SetFunctionLength.js new file mode 100644 index 0000000..cb24496 --- /dev/null +++ b/src/node_modules/es-abstract/2019/SetFunctionLength.js @@ -0,0 +1,31 @@ +'use strict'; + +var GetIntrinsic = require('../GetIntrinsic'); + +var $TypeError = GetIntrinsic('%TypeError%'); + +var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); +var HasOwnProperty = require('./HasOwnProperty'); +var IsExtensible = require('./IsExtensible'); +var ToInteger = require('./ToInteger'); +var Type = require('./Type'); + +// https://ecma-international.org/ecma-262/9.0/#sec-setfunctionlength + +module.exports = function SetFunctionLength(F, length) { + if (typeof F !== 'function' || !IsExtensible(F) || HasOwnProperty(F, 'length')) { + throw new $TypeError('Assertion failed: `F` must be an extensible function and lack an own `length` property'); + } + if (Type(length) !== 'Number') { + throw new $TypeError('Assertion failed: `length` must be a Number'); + } + if (length < 0 || ToInteger(length) !== length) { + throw new $TypeError('Assertion failed: `length` must be an integer >= 0'); + } + return DefinePropertyOrThrow(F, 'length', { + '[[Configurable]]': true, + '[[Enumerable]]': false, + '[[Value]]': length, + '[[Writable]]': false + }); +}; |