web 3d图形渲染器
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

31 lines
1.0 KiB

  1. 'use strict';
  2. var GetIntrinsic = require('get-intrinsic');
  3. var $TypeError = GetIntrinsic('%TypeError%');
  4. var DefinePropertyOrThrow = require('./DefinePropertyOrThrow');
  5. var HasOwnProperty = require('./HasOwnProperty');
  6. var IsExtensible = require('./IsExtensible');
  7. var IsInteger = require('./IsInteger');
  8. var Type = require('./Type');
  9. // https://262.ecma-international.org/9.0/#sec-setfunctionlength
  10. module.exports = function SetFunctionLength(F, length) {
  11. if (typeof F !== 'function' || !IsExtensible(F) || HasOwnProperty(F, 'length')) {
  12. throw new $TypeError('Assertion failed: `F` must be an extensible function and lack an own `length` property');
  13. }
  14. if (Type(length) !== 'Number') {
  15. throw new $TypeError('Assertion failed: `length` must be a Number');
  16. }
  17. if (length < 0 || !IsInteger(length)) {
  18. throw new $TypeError('Assertion failed: `length` must be an integer >= 0');
  19. }
  20. return DefinePropertyOrThrow(F, 'length', {
  21. '[[Configurable]]': true,
  22. '[[Enumerable]]': false,
  23. '[[Value]]': length,
  24. '[[Writable]]': false
  25. });
  26. };