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.
113 lines
2.2 KiB
113 lines
2.2 KiB
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.IsDetachedBuffer = IsDetachedBuffer;
|
|
exports.SpeciesConstructor = SpeciesConstructor;
|
|
exports.ToIntegerOrInfinity = ToIntegerOrInfinity;
|
|
exports.ToLength = ToLength;
|
|
exports.defaultCompare = defaultCompare;
|
|
|
|
var _is = require("./is.cjs");
|
|
|
|
var _messages = require("./messages.cjs");
|
|
|
|
var _primordials = require("./primordials.cjs");
|
|
|
|
function ToIntegerOrInfinity(target) {
|
|
const number = +target;
|
|
|
|
if ((0, _primordials.NumberIsNaN)(number) || number === 0) {
|
|
return 0;
|
|
}
|
|
|
|
return (0, _primordials.MathTrunc)(number);
|
|
}
|
|
|
|
function ToLength(target) {
|
|
const length = ToIntegerOrInfinity(target);
|
|
|
|
if (length < 0) {
|
|
return 0;
|
|
}
|
|
|
|
return length < _primordials.MAX_SAFE_INTEGER ? length : _primordials.MAX_SAFE_INTEGER;
|
|
}
|
|
|
|
function SpeciesConstructor(target, defaultConstructor) {
|
|
if (!(0, _is.isObject)(target)) {
|
|
throw (0, _primordials.NativeTypeError)(_messages.THIS_IS_NOT_AN_OBJECT);
|
|
}
|
|
|
|
const constructor = target.constructor;
|
|
|
|
if (constructor === undefined) {
|
|
return defaultConstructor;
|
|
}
|
|
|
|
if (!(0, _is.isObject)(constructor)) {
|
|
throw (0, _primordials.NativeTypeError)(_messages.THE_CONSTRUCTOR_PROPERTY_VALUE_IS_NOT_AN_OBJECT);
|
|
}
|
|
|
|
const species = constructor[_primordials.SymbolSpecies];
|
|
|
|
if (species == null) {
|
|
return defaultConstructor;
|
|
}
|
|
|
|
return species;
|
|
}
|
|
|
|
function IsDetachedBuffer(buffer) {
|
|
if ((0, _is.isSharedArrayBuffer)(buffer)) {
|
|
return false;
|
|
}
|
|
|
|
try {
|
|
(0, _primordials.ArrayBufferPrototypeSlice)(buffer, 0, 0);
|
|
return false;
|
|
} catch (e) {}
|
|
|
|
return true;
|
|
}
|
|
|
|
function defaultCompare(x, y) {
|
|
const isXNaN = (0, _primordials.NumberIsNaN)(x);
|
|
const isYNaN = (0, _primordials.NumberIsNaN)(y);
|
|
|
|
if (isXNaN && isYNaN) {
|
|
return 0;
|
|
}
|
|
|
|
if (isXNaN) {
|
|
return 1;
|
|
}
|
|
|
|
if (isYNaN) {
|
|
return -1;
|
|
}
|
|
|
|
if (x < y) {
|
|
return -1;
|
|
}
|
|
|
|
if (x > y) {
|
|
return 1;
|
|
}
|
|
|
|
if (x === 0 && y === 0) {
|
|
const isXPlusZero = (0, _primordials.ObjectIs)(x, 0);
|
|
const isYPlusZero = (0, _primordials.ObjectIs)(y, 0);
|
|
|
|
if (!isXPlusZero && isYPlusZero) {
|
|
return -1;
|
|
}
|
|
|
|
if (isXPlusZero && !isYPlusZero) {
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
} |