From 46e43f4bde4a35785b4997b81e86cd19f046b69b Mon Sep 17 00:00:00 2001 From: Minteck Date: Tue, 21 Dec 2021 16:52:28 +0100 Subject: Commit --- .../es-abstract/2019/SetFunctionLength.js | 31 ++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 src/node_modules/es-abstract/2019/SetFunctionLength.js (limited to 'src/node_modules/es-abstract/2019/SetFunctionLength.js') 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 + }); +}; -- cgit