spec.cjs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.IsDetachedBuffer = IsDetachedBuffer;
  6. exports.SpeciesConstructor = SpeciesConstructor;
  7. exports.ToIntegerOrInfinity = ToIntegerOrInfinity;
  8. exports.ToLength = ToLength;
  9. exports.defaultCompare = defaultCompare;
  10. var _is = require("./is.cjs");
  11. var _messages = require("./messages.cjs");
  12. var _primordials = require("./primordials.cjs");
  13. function ToIntegerOrInfinity(target) {
  14. const number = +target;
  15. if ((0, _primordials.NumberIsNaN)(number) || number === 0) {
  16. return 0;
  17. }
  18. return (0, _primordials.MathTrunc)(number);
  19. }
  20. function ToLength(target) {
  21. const length = ToIntegerOrInfinity(target);
  22. if (length < 0) {
  23. return 0;
  24. }
  25. return length < _primordials.MAX_SAFE_INTEGER ? length : _primordials.MAX_SAFE_INTEGER;
  26. }
  27. function SpeciesConstructor(target, defaultConstructor) {
  28. if (!(0, _is.isObject)(target)) {
  29. throw (0, _primordials.NativeTypeError)(_messages.THIS_IS_NOT_AN_OBJECT);
  30. }
  31. const constructor = target.constructor;
  32. if (constructor === undefined) {
  33. return defaultConstructor;
  34. }
  35. if (!(0, _is.isObject)(constructor)) {
  36. throw (0, _primordials.NativeTypeError)(_messages.THE_CONSTRUCTOR_PROPERTY_VALUE_IS_NOT_AN_OBJECT);
  37. }
  38. const species = constructor[_primordials.SymbolSpecies];
  39. if (species == null) {
  40. return defaultConstructor;
  41. }
  42. return species;
  43. }
  44. function IsDetachedBuffer(buffer) {
  45. if ((0, _is.isSharedArrayBuffer)(buffer)) {
  46. return false;
  47. }
  48. try {
  49. (0, _primordials.ArrayBufferPrototypeSlice)(buffer, 0, 0);
  50. return false;
  51. } catch (e) {}
  52. return true;
  53. }
  54. function defaultCompare(x, y) {
  55. const isXNaN = (0, _primordials.NumberIsNaN)(x);
  56. const isYNaN = (0, _primordials.NumberIsNaN)(y);
  57. if (isXNaN && isYNaN) {
  58. return 0;
  59. }
  60. if (isXNaN) {
  61. return 1;
  62. }
  63. if (isYNaN) {
  64. return -1;
  65. }
  66. if (x < y) {
  67. return -1;
  68. }
  69. if (x > y) {
  70. return 1;
  71. }
  72. if (x === 0 && y === 0) {
  73. const isXPlusZero = (0, _primordials.ObjectIs)(x, 0);
  74. const isYPlusZero = (0, _primordials.ObjectIs)(y, 0);
  75. if (!isXPlusZero && isYPlusZero) {
  76. return -1;
  77. }
  78. if (isXPlusZero && !isYPlusZero) {
  79. return 1;
  80. }
  81. }
  82. return 0;
  83. }