This commit is contained in:
2022-07-18 02:50:52 +00:00
parent befd344ab0
commit 06181b34d6
8569 changed files with 818704 additions and 352705 deletions
+1 -1
View File
@@ -4,7 +4,7 @@ var ToNumber = require('./ToNumber');
var ToPrimitive = require('./ToPrimitive');
var Type = require('./Type');
// https://www.ecma-international.org/ecma-262/6.0/#sec-abstract-equality-comparison
// https://ecma-international.org/ecma-262/6.0/#sec-abstract-equality-comparison
module.exports = function AbstractEqualityComparison(x, y) {
var xType = Type(x);
+24 -29
View File
@@ -1,21 +1,20 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $Number = GetIntrinsic('%Number%');
var $TypeError = GetIntrinsic('%TypeError%');
var $isNaN = require('../helpers/isNaN');
var $isFinite = require('../helpers/isFinite');
var isPrefixOf = require('../helpers/isPrefixOf');
var IsStringPrefix = require('./IsStringPrefix');
var ToNumber = require('./ToNumber');
var ToPrimitive = require('./ToPrimitive');
var Type = require('./Type');
// https://www.ecma-international.org/ecma-262/5.1/#sec-11.8.5
// https://262.ecma-international.org/9.0/#sec-abstract-relational-comparison
// eslint-disable-next-line max-statements
module.exports = function AbstractRelationalComparison(x, y, LeftFirst) {
if (Type(LeftFirst) !== 'Boolean') {
throw new $TypeError('Assertion failed: LeftFirst argument must be a Boolean');
@@ -29,38 +28,34 @@ module.exports = function AbstractRelationalComparison(x, y, LeftFirst) {
py = ToPrimitive(y, $Number);
px = ToPrimitive(x, $Number);
}
var bothStrings = Type(px) === 'String' && Type(py) === 'String';
if (!bothStrings) {
var nx = ToNumber(px);
var ny = ToNumber(py);
if ($isNaN(nx) || $isNaN(ny)) {
return undefined;
}
if ($isFinite(nx) && $isFinite(ny) && nx === ny) {
if (Type(px) === 'String' && Type(py) === 'String') {
if (IsStringPrefix(py, px)) {
return false;
}
if (nx === 0 && ny === 0) {
return false;
}
if (nx === Infinity) {
return false;
}
if (ny === Infinity) {
if (IsStringPrefix(px, py)) {
return true;
}
if (ny === -Infinity) {
return false;
}
if (nx === -Infinity) {
return true;
}
return nx < ny; // by now, these are both nonzero, finite, and not equal
return px < py; // both strings, neither a prefix of the other. shortcut for steps 3 c-f
}
if (isPrefixOf(py, px)) {
var nx = ToNumber(px);
var ny = ToNumber(py);
if ($isNaN(nx) || $isNaN(ny)) {
return undefined;
}
if ($isFinite(nx) && $isFinite(ny) && nx === ny) {
return false;
}
if (isPrefixOf(px, py)) {
if (nx === Infinity) {
return false;
}
if (ny === Infinity) {
return true;
}
return px < py; // both strings, neither a prefix of the other. shortcut for steps c-f
if (ny === -Infinity) {
return false;
}
if (nx === -Infinity) {
return true;
}
return nx < ny; // by now, these are both nonzero, finite, and not equal
};
+2 -2
View File
@@ -2,7 +2,7 @@
var inspect = require('object-inspect');
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $TypeError = GetIntrinsic('%TypeError%');
@@ -15,7 +15,7 @@ var IteratorStep = require('./IteratorStep');
var IteratorValue = require('./IteratorValue');
var Type = require('./Type');
// https://tc39.es/ecma262/#sec-add-entries-from-iterable
// https://262.ecma-international.org/10.0//#sec-add-entries-from-iterable
module.exports = function AddEntriesFromIterable(target, iterable, adder) {
if (!IsCallable(adder)) {
+6 -4
View File
@@ -1,15 +1,17 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var IsInteger = require('./IsInteger');
var Type = require('./Type');
var MAX_SAFE_INTEGER = require('../helpers/maxSafeInteger');
var isLeadingSurrogate = require('../helpers/isLeadingSurrogate');
var isTrailingSurrogate = require('../helpers/isTrailingSurrogate');
var $TypeError = GetIntrinsic('%TypeError%');
var $charCodeAt = require('../helpers/callBound')('String.prototype.charCodeAt');
var $charCodeAt = require('call-bind/callBound')('String.prototype.charCodeAt');
// https://ecma-international.org/ecma-262/6.0/#sec-advancestringindex
@@ -32,12 +34,12 @@ module.exports = function AdvanceStringIndex(S, index, unicode) {
}
var first = $charCodeAt(S, index);
if (first < 0xD800 || first > 0xDBFF) {
if (!isLeadingSurrogate(first)) {
return index + 1;
}
var second = $charCodeAt(S, index + 1);
if (second < 0xDC00 || second > 0xDFFF) {
if (!isTrailingSurrogate(second)) {
return index + 1;
}
+9 -9
View File
@@ -1,6 +1,6 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $ArrayPrototype = GetIntrinsic('%Array.prototype%');
var $RangeError = GetIntrinsic('%RangeError%');
@@ -21,7 +21,7 @@ var $setProto = GetIntrinsic('%Object.setPrototypeOf%', true) || (
}
);
// https://www.ecma-international.org/ecma-262/6.0/#sec-arraycreate
// https://ecma-international.org/ecma-262/6.0/#sec-arraycreate
module.exports = function ArrayCreate(length) {
if (!IsInteger(length) || length < 0) {
@@ -42,12 +42,12 @@ module.exports = function ArrayCreate(length) {
A.length = length;
}
/* step 10, the above as a shortcut for the below
OrdinaryDefineOwnProperty(A, 'length', {
'[[Configurable]]': false,
'[[Enumerable]]': false,
'[[Value]]': length,
'[[Writable]]': true
});
*/
OrdinaryDefineOwnProperty(A, 'length', {
'[[Configurable]]': false,
'[[Enumerable]]': false,
'[[Value]]': length,
'[[Writable]]': true
});
*/
return A;
};
+2 -2
View File
@@ -1,6 +1,6 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $RangeError = GetIntrinsic('%RangeError%');
var $TypeError = GetIntrinsic('%TypeError%');
@@ -19,7 +19,7 @@ var ToString = require('./ToString');
var ToUint32 = require('./ToUint32');
var Type = require('./Type');
// https://www.ecma-international.org/ecma-262/6.0/#sec-arraysetlength
// https://ecma-international.org/ecma-262/6.0/#sec-arraysetlength
// eslint-disable-next-line max-statements, max-lines-per-function
module.exports = function ArraySetLength(A, Desc) {
+1 -1
View File
@@ -1,6 +1,6 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $Array = GetIntrinsic('%Array%');
var $species = GetIntrinsic('%Symbol.species%', true);
+12 -5
View File
@@ -1,13 +1,20 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var callBound = require('../helpers/callBound');
var GetIntrinsic = require('get-intrinsic');
var callBound = require('call-bind/callBound');
var $TypeError = GetIntrinsic('%TypeError%');
var IsArray = require('./IsArray');
var $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('%Function.prototype.apply%');
// https://www.ecma-international.org/ecma-262/6.0/#sec-call
// https://ecma-international.org/ecma-262/6.0/#sec-call
module.exports = function Call(F, V) {
var args = arguments.length > 2 ? arguments[2] : [];
return $apply(F, V, args);
var argumentsList = arguments.length > 2 ? arguments[2] : [];
if (!IsArray(argumentsList)) {
throw new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List');
}
return $apply(F, V, argumentsList);
};
+1 -1
View File
@@ -1,6 +1,6 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $TypeError = GetIntrinsic('%TypeError%');
+31
View File
@@ -0,0 +1,31 @@
'use strict';
var GetIntrinsic = require('get-intrinsic');
var callBound = require('call-bind/callBound');
var $fromCharCode = GetIntrinsic('%String.fromCharCode%');
var $TypeError = GetIntrinsic('%TypeError%');
var $charCodeAt = callBound('%String.prototype.charCodeAt%');
var $push = callBound('%Array.prototype.push%');
module.exports = function CharacterRange(A, B) {
if (A.length !== 1 || B.length !== 1) {
throw new $TypeError('Assertion failed: CharSets A and B contain exactly one character');
}
var a = A[0];
var b = B[0];
var i = $charCodeAt(a, 0);
var j = $charCodeAt(b, 0);
if (!(i <= j)) {
throw new $TypeError('Assertion failed: i is not <= j');
}
var arr = [];
for (var k = i; k <= j; k += 1) {
$push(arr, $fromCharCode(k));
}
return arr;
};
+11 -7
View File
@@ -1,6 +1,10 @@
'use strict';
var callBound = require('../helpers/callBound');
var GetIntrinsic = require('get-intrinsic');
var $TypeError = GetIntrinsic('%TypeError%');
var callBound = require('call-bind/callBound');
var forEach = require('../helpers/forEach');
var OwnPropertyKeys = require('../helpers/OwnPropertyKeys');
@@ -16,19 +20,19 @@ var ToNumber = require('./ToNumber');
var ToObject = require('./ToObject');
var Type = require('./Type');
// https://www.ecma-international.org/ecma-262/9.0/#sec-copydataproperties
// https://262.ecma-international.org/9.0/#sec-copydataproperties
module.exports = function CopyDataProperties(target, source, excludedItems) {
if (Type(target) !== 'Object') {
throw new TypeError('Assertion failed: "target" must be an Object');
throw new $TypeError('Assertion failed: "target" must be an Object');
}
if (!IsArray(excludedItems)) {
throw new TypeError('Assertion failed: "excludedItems" must be a List of Property Keys');
throw new $TypeError('Assertion failed: "excludedItems" must be a List of Property Keys');
}
for (var i = 0; i < excludedItems.length; i += 1) {
if (!IsPropertyKey(excludedItems[i])) {
throw new TypeError('Assertion failed: "excludedItems" must be a List of Property Keys');
throw new $TypeError('Assertion failed: "excludedItems" must be a List of Property Keys');
}
}
@@ -51,8 +55,8 @@ module.exports = function CopyDataProperties(target, source, excludedItems) {
var enumerable = $isEnumerable(fromObj, nextKey) || (
// this is to handle string keys being non-enumerable in older engines
typeof source === 'string'
&& nextKey >= 0
&& IsInteger(ToNumber(nextKey))
&& nextKey >= 0
&& IsInteger(ToNumber(nextKey))
);
if (excluded === false && enumerable) {
var propValue = Get(fromObj, nextKey);
+4 -4
View File
@@ -1,6 +1,6 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $TypeError = GetIntrinsic('%TypeError%');
@@ -14,7 +14,7 @@ var IsPropertyKey = require('./IsPropertyKey');
var SameValue = require('./SameValue');
var Type = require('./Type');
// https://www.ecma-international.org/ecma-262/6.0/#sec-createdataproperty
// https://ecma-international.org/ecma-262/6.0/#sec-createdataproperty
module.exports = function CreateDataProperty(O, P, V) {
if (Type(O) !== 'Object') {
@@ -25,8 +25,8 @@ module.exports = function CreateDataProperty(O, P, V) {
}
var oldDesc = OrdinaryGetOwnProperty(O, P);
var extensible = !oldDesc || IsExtensible(O);
var immutable = oldDesc && (!oldDesc['[[Writable]]'] || !oldDesc['[[Configurable]]']);
if (immutable || !extensible) {
var nonConfigurable = oldDesc && !oldDesc['[[Configurable]]'];
if (nonConfigurable || !extensible) {
return false;
}
return DefineOwnProperty(
+1 -1
View File
@@ -1,6 +1,6 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $TypeError = GetIntrinsic('%TypeError%');
+3 -3
View File
@@ -1,10 +1,10 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $TypeError = GetIntrinsic('%TypeError%');
var callBound = require('../helpers/callBound');
var callBound = require('call-bind/callBound');
var $replace = callBound('String.prototype.replace');
@@ -12,7 +12,7 @@ var RequireObjectCoercible = require('./RequireObjectCoercible');
var ToString = require('./ToString');
var Type = require('./Type');
// https://www.ecma-international.org/ecma-262/6.0/#sec-createhtml
// https://ecma-international.org/ecma-262/6.0/#sec-createhtml
module.exports = function CreateHTML(string, tag, attribute, value) {
if (Type(tag) !== 'String' || Type(attribute) !== 'String') {
+1 -1
View File
@@ -1,6 +1,6 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $TypeError = GetIntrinsic('%TypeError%');
+2 -2
View File
@@ -1,8 +1,8 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var callBound = require('../helpers/callBound');
var callBound = require('call-bind/callBound');
var $TypeError = GetIntrinsic('%TypeError%');
var $indexOf = callBound('Array.prototype.indexOf', true) || callBound('String.prototype.indexOf');
+2 -2
View File
@@ -1,6 +1,6 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $TypeError = GetIntrinsic('%TypeError%');
@@ -12,7 +12,7 @@ var IsPropertyKey = require('./IsPropertyKey');
var SameValue = require('./SameValue');
var Type = require('./Type');
// https://www.ecma-international.org/ecma-262/6.0/#sec-createmethodproperty
// https://ecma-international.org/ecma-262/6.0/#sec-createmethodproperty
module.exports = function CreateMethodProperty(O, P, V) {
if (Type(O) !== 'Object') {
+2 -2
View File
@@ -1,6 +1,6 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $EvalError = GetIntrinsic('%EvalError%');
@@ -8,7 +8,7 @@ var DayWithinYear = require('./DayWithinYear');
var InLeapYear = require('./InLeapYear');
var MonthFromTime = require('./MonthFromTime');
// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.5
// https://262.ecma-international.org/5.1/#sec-15.9.1.5
module.exports = function DateFromTime(t) {
var m = MonthFromTime(t);
+2 -2
View File
@@ -1,6 +1,6 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $TypeError = GetIntrinsic('%TypeError%');
@@ -16,7 +16,7 @@ var MonthFromTime = require('./MonthFromTime');
var YearFromTime = require('./YearFromTime');
var DateFromTime = require('./DateFromTime');
// https://www.ecma-international.org/ecma-262/9.0/#sec-datestring
// https://262.ecma-international.org/9.0/#sec-datestring
module.exports = function DateString(tv) {
if (Type(tv) !== 'Number' || $isNaN(tv)) {
+3 -5
View File
@@ -1,13 +1,11 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var $floor = GetIntrinsic('%Math.floor%');
var floor = require('./floor');
var msPerDay = require('../helpers/timeConstants').msPerDay;
// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.2
// https://262.ecma-international.org/5.1/#sec-15.9.1.2
module.exports = function Day(t) {
return $floor(t / msPerDay);
return floor(t / msPerDay);
};
+3 -5
View File
@@ -1,12 +1,10 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var floor = require('./floor');
var $floor = GetIntrinsic('%Math.floor%');
// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
// https://262.ecma-international.org/5.1/#sec-15.9.1.3
module.exports = function DayFromYear(y) {
return (365 * (y - 1970)) + $floor((y - 1969) / 4) - $floor((y - 1901) / 100) + $floor((y - 1601) / 400);
return (365 * (y - 1970)) + floor((y - 1969) / 4) - floor((y - 1901) / 100) + floor((y - 1601) / 400);
};
+1 -1
View File
@@ -4,7 +4,7 @@ var Day = require('./Day');
var DayFromYear = require('./DayFromYear');
var YearFromTime = require('./YearFromTime');
// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.4
// https://262.ecma-international.org/5.1/#sec-15.9.1.4
module.exports = function DayWithinYear(t) {
return Day(t) - DayFromYear(YearFromTime(t));
+5 -5
View File
@@ -1,17 +1,17 @@
'use strict';
var mod = require('../helpers/mod');
var modulo = require('./modulo');
// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
// https://262.ecma-international.org/5.1/#sec-15.9.1.3
module.exports = function DaysInYear(y) {
if (mod(y, 4) !== 0) {
if (modulo(y, 4) !== 0) {
return 365;
}
if (mod(y, 100) !== 0) {
if (modulo(y, 100) !== 0) {
return 366;
}
if (mod(y, 400) !== 0) {
if (modulo(y, 400) !== 0) {
return 365;
}
return 366;
+2 -2
View File
@@ -1,6 +1,6 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $TypeError = GetIntrinsic('%TypeError%');
@@ -15,7 +15,7 @@ var SameValue = require('./SameValue');
var ToPropertyDescriptor = require('./ToPropertyDescriptor');
var Type = require('./Type');
// https://www.ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow
// https://ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow
module.exports = function DefinePropertyOrThrow(O, P, desc) {
if (Type(O) !== 'Object') {
+2 -2
View File
@@ -1,13 +1,13 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $TypeError = GetIntrinsic('%TypeError%');
var IsPropertyKey = require('./IsPropertyKey');
var Type = require('./Type');
// https://www.ecma-international.org/ecma-262/6.0/#sec-deletepropertyorthrow
// https://ecma-international.org/ecma-262/6.0/#sec-deletepropertyorthrow
module.exports = function DeletePropertyOrThrow(O, P) {
if (Type(O) !== 'Object') {
+5 -5
View File
@@ -1,14 +1,14 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $TypeError = GetIntrinsic('%TypeError%');
var objectKeys = require('object-keys');
var callBound = require('../helpers/callBound');
var callBound = require('call-bind/callBound');
var callBind = require('../helpers/callBind');
var callBind = require('call-bind');
var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');
var $pushApply = callBind.apply(GetIntrinsic('%Array.prototype.push%'));
@@ -17,9 +17,9 @@ var forEach = require('../helpers/forEach');
var Type = require('./Type');
// https://www.ecma-international.org/ecma-262/8.0/#sec-enumerableownproperties
// https://262.ecma-international.org/8.0/#sec-enumerableownproperties
module.exports = function EnumerableOwnProperties(O, kind) {
module.exports = function EnumerableOwnPropertyNames(O, kind) {
if (Type(O) !== 'Object') {
throw new $TypeError('Assertion failed: Type(O) is not Object');
}
+3 -3
View File
@@ -1,6 +1,6 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $TypeError = GetIntrinsic('%TypeError%');
@@ -14,9 +14,9 @@ var IsArray = require('./IsArray');
var ToLength = require('./ToLength');
var ToString = require('./ToString');
// https://ecma-international.org/ecma-262/10.0/#sec-flattenintoarray
// https://262.ecma-international.org/10.0/#sec-flattenintoarray
// eslint-disable-next-line max-params, max-statements
// eslint-disable-next-line max-params
module.exports = function FlattenIntoArray(target, source, sourceLen, start, depth) {
var mapperFunction;
if (arguments.length > 5) {
+5 -25
View File
@@ -1,36 +1,16 @@
'use strict';
var assertRecord = require('../helpers/assertRecord');
var fromPropertyDescriptor = require('../helpers/fromPropertyDescriptor');
var Type = require('./Type');
// https://www.ecma-international.org/ecma-262/6.0/#sec-frompropertydescriptor
// https://ecma-international.org/ecma-262/6.0/#sec-frompropertydescriptor
module.exports = function FromPropertyDescriptor(Desc) {
if (typeof Desc === 'undefined') {
return Desc;
if (typeof Desc !== 'undefined') {
assertRecord(Type, 'Property Descriptor', 'Desc', Desc);
}
assertRecord(Type, 'Property Descriptor', 'Desc', Desc);
var obj = {};
if ('[[Value]]' in Desc) {
obj.value = Desc['[[Value]]'];
}
if ('[[Writable]]' in Desc) {
obj.writable = Desc['[[Writable]]'];
}
if ('[[Get]]' in Desc) {
obj.get = Desc['[[Get]]'];
}
if ('[[Set]]' in Desc) {
obj.set = Desc['[[Set]]'];
}
if ('[[Enumerable]]' in Desc) {
obj.enumerable = Desc['[[Enumerable]]'];
}
if ('[[Configurable]]' in Desc) {
obj.configurable = Desc['[[Configurable]]'];
}
return obj;
return fromPropertyDescriptor(Desc);
};
+2 -7
View File
@@ -1,6 +1,6 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $TypeError = GetIntrinsic('%TypeError%');
@@ -9,12 +9,7 @@ var inspect = require('object-inspect');
var IsPropertyKey = require('./IsPropertyKey');
var Type = require('./Type');
/**
* 7.3.1 Get (O, P) - https://ecma-international.org/ecma-262/6.0/#sec-get-o-p
* 1. Assert: Type(O) is Object.
* 2. Assert: IsPropertyKey(P) is true.
* 3. Return O.[[Get]](P, O).
*/
// https://ecma-international.org/ecma-262/6.0/#sec-get-o-p
module.exports = function Get(O, P) {
// 7.3.1.1
+2 -3
View File
@@ -1,6 +1,6 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $TypeError = GetIntrinsic('%TypeError%');
@@ -20,8 +20,7 @@ module.exports = function GetIterator(obj, method) {
{
AdvanceStringIndex: AdvanceStringIndex,
GetMethod: GetMethod,
IsArray: IsArray,
Type: Type
IsArray: IsArray
},
obj
);
+2 -10
View File
@@ -1,6 +1,6 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $TypeError = GetIntrinsic('%TypeError%');
@@ -8,15 +8,7 @@ var GetV = require('./GetV');
var IsCallable = require('./IsCallable');
var IsPropertyKey = require('./IsPropertyKey');
/**
* 7.3.9 - https://ecma-international.org/ecma-262/6.0/#sec-getmethod
* 1. Assert: IsPropertyKey(P) is true.
* 2. Let func be GetV(O, P).
* 3. ReturnIfAbrupt(func).
* 4. If func is either undefined or null, return undefined.
* 5. If IsCallable(func) is false, throw a TypeError exception.
* 6. Return func.
*/
// https://ecma-international.org/ecma-262/6.0/#sec-getmethod
module.exports = function GetMethod(O, P) {
// 7.3.9.1
+4 -4
View File
@@ -1,18 +1,18 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var hasSymbols = require('has-symbols')();
var $TypeError = GetIntrinsic('%TypeError%');
var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%');
var $gOPS = hasSymbols && GetIntrinsic('%Object.getOwnPropertySymbols%');
var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%', true);
var $gOPS = hasSymbols && GetIntrinsic('%Object.getOwnPropertySymbols%', true);
var keys = require('object-keys');
var esType = require('./Type');
// https://www.ecma-international.org/ecma-262/6.0/#sec-getownpropertykeys
// https://ecma-international.org/ecma-262/6.0/#sec-getownpropertykeys
module.exports = function GetOwnPropertyKeys(O, Type) {
if (esType(O) !== 'Object') {
+1 -1
View File
@@ -1,6 +1,6 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $Function = GetIntrinsic('%Function%');
var $TypeError = GetIntrinsic('%TypeError%');
+7 -7
View File
@@ -1,10 +1,10 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $TypeError = GetIntrinsic('%TypeError%');
var callBound = require('../helpers/callBound');
var callBound = require('call-bind/callBound');
var regexTester = require('../helpers/regexTester');
var every = require('../helpers/every');
@@ -30,7 +30,7 @@ var isStringOrHole = function (capture, index, arr) {
return Type(capture) === 'String' || (canDistinguishSparseFromUndefined ? !(index in arr) : Type(capture) === 'Undefined');
};
// http://www.ecma-international.org/ecma-262/9.0/#sec-getsubstitution
// http://262.ecma-international.org/9.0/#sec-getsubstitution
// eslint-disable-next-line max-statements, max-params, max-lines-per-function
module.exports = function GetSubstitution(matched, str, position, captures, namedCaptures, replacement) {
@@ -88,14 +88,14 @@ module.exports = function GetSubstitution(matched, str, position, captures, name
// $1 through $9, and not followed by a digit
var n = $parseInt(next, 10);
// if (n > m, impl-defined)
result += (n <= m && Type(captures[n - 1]) === 'Undefined') ? '' : captures[n - 1];
result += n <= m && Type(captures[n - 1]) === 'Undefined' ? '' : captures[n - 1];
i += 1;
} else if (isDigit(next) && (nextIsLast || isDigit(nextNext))) {
// $00 through $99
var nn = next + nextNext;
var nnI = $parseInt(nn, 10) - 1;
// if nn === '00' or nn > m, impl-defined
result += (nn <= m && Type(captures[nnI]) === 'Undefined') ? '' : captures[nnI];
result += nn <= m && Type(captures[nnI]) === 'Undefined' ? '' : captures[nnI];
i += 2;
} else if (next === '<') {
// eslint-disable-next-line max-depth
@@ -106,13 +106,13 @@ module.exports = function GetSubstitution(matched, str, position, captures, name
var endIndex = $indexOf(replacement, '>', i);
// eslint-disable-next-line max-depth
if (endIndex > -1) {
var groupName = $strSlice(replacement, i, endIndex);
var groupName = $strSlice(replacement, i + '$<'.length, endIndex);
var capture = Get(namedCaptures, groupName);
// eslint-disable-next-line max-depth
if (Type(capture) !== 'Undefined') {
result += ToString(capture);
}
i += '$<' + groupName + '>'.length;
i += ('<' + groupName + '>').length;
}
}
} else {
+2 -8
View File
@@ -1,19 +1,13 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $TypeError = GetIntrinsic('%TypeError%');
var IsPropertyKey = require('./IsPropertyKey');
var ToObject = require('./ToObject');
/**
* 7.3.2 GetV (V, P)
* 1. Assert: IsPropertyKey(P) is true.
* 2. Let O be ToObject(V).
* 3. ReturnIfAbrupt(O).
* 4. Return O.[[Get]](P, V).
*/
// https://ecma-international.org/ecma-262/6.0/#sec-getv
module.exports = function GetV(V, P) {
// 7.3.2.1
+1 -1
View File
@@ -1,6 +1,6 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $TypeError = GetIntrinsic('%TypeError%');
+1 -1
View File
@@ -1,6 +1,6 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $TypeError = GetIntrinsic('%TypeError%');
+4 -6
View File
@@ -1,16 +1,14 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var floor = require('./floor');
var modulo = require('./modulo');
var $floor = GetIntrinsic('%Math.floor%');
var mod = require('../helpers/mod');
var timeConstants = require('../helpers/timeConstants');
var msPerHour = timeConstants.msPerHour;
var HoursPerDay = timeConstants.HoursPerDay;
// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.10
// https://262.ecma-international.org/5.1/#sec-15.9.1.10
module.exports = function HourFromTime(t) {
return mod($floor(t / msPerHour), HoursPerDay);
return modulo(floor(t / msPerHour), HoursPerDay);
};
+2 -2
View File
@@ -1,13 +1,13 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $EvalError = GetIntrinsic('%EvalError%');
var DaysInYear = require('./DaysInYear');
var YearFromTime = require('./YearFromTime');
// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
// https://262.ecma-international.org/5.1/#sec-15.9.1.3
module.exports = function InLeapYear(t) {
var days = DaysInYear(YearFromTime(t));
+2 -2
View File
@@ -1,6 +1,6 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $TypeError = GetIntrinsic('%TypeError%');
@@ -13,7 +13,7 @@ var OrdinaryHasInstance = require('./OrdinaryHasInstance');
var ToBoolean = require('./ToBoolean');
var Type = require('./Type');
// https://www.ecma-international.org/ecma-262/6.0/#sec-instanceofoperator
// https://ecma-international.org/ecma-262/6.0/#sec-instanceofoperator
module.exports = function InstanceofOperator(O, C) {
if (Type(O) !== 'Object') {
+7 -5
View File
@@ -1,12 +1,11 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $TypeError = GetIntrinsic('%TypeError%');
var $arraySlice = require('../helpers/callBound')('Array.prototype.slice');
var Call = require('./Call');
var IsArray = require('./IsArray');
var GetV = require('./GetV');
var IsPropertyKey = require('./IsPropertyKey');
@@ -14,9 +13,12 @@ var IsPropertyKey = require('./IsPropertyKey');
module.exports = function Invoke(O, P) {
if (!IsPropertyKey(P)) {
throw new $TypeError('P must be a Property Key');
throw new $TypeError('Assertion failed: P must be a Property Key');
}
var argumentsList = arguments.length > 2 ? arguments[2] : [];
if (!IsArray(argumentsList)) {
throw new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List');
}
var argumentsList = $arraySlice(arguments, 2);
var func = GetV(O, P);
return Call(func, O, argumentsList);
};
+1 -1
View File
@@ -6,7 +6,7 @@ var assertRecord = require('../helpers/assertRecord');
var Type = require('./Type');
// https://www.ecma-international.org/ecma-262/6.0/#sec-isaccessordescriptor
// https://ecma-international.org/ecma-262/6.0/#sec-isaccessordescriptor
module.exports = function IsAccessorDescriptor(Desc) {
if (typeof Desc === 'undefined') {
+2 -12
View File
@@ -1,14 +1,4 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var $Array = GetIntrinsic('%Array%');
// eslint-disable-next-line global-require
var toStr = !$Array.isArray && require('../helpers/callBound')('Object.prototype.toString');
// https://www.ecma-international.org/ecma-262/6.0/#sec-isarray
module.exports = $Array.isArray || function IsArray(argument) {
return toStr(argument) === '[object Array]';
};
// https://ecma-international.org/ecma-262/6.0/#sec-isarray
module.exports = require('../helpers/IsArray');
+1 -1
View File
@@ -1,5 +1,5 @@
'use strict';
// http://www.ecma-international.org/ecma-262/5.1/#sec-9.11
// http://262.ecma-international.org/5.1/#sec-9.11
module.exports = require('is-callable');
+9
View File
@@ -0,0 +1,9 @@
'use strict';
var ValidateAndApplyPropertyDescriptor = require('./ValidateAndApplyPropertyDescriptor');
// https://262.ecma-international.org/6.0/#sec-iscompatiblepropertydescriptor
module.exports = function IsCompatiblePropertyDescriptor(Extensible, Desc, Current) {
return ValidateAndApplyPropertyDescriptor(undefined, undefined, Extensible, Desc, Current);
};
+1 -1
View File
@@ -1,6 +1,6 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $isConcatSpreadable = GetIntrinsic('%Symbol.isConcatSpreadable%', true);
+1 -1
View File
@@ -12,7 +12,7 @@ try {
DefinePropertyOrThrow = null;
}
// https://www.ecma-international.org/ecma-262/6.0/#sec-isconstructor
// https://ecma-international.org/ecma-262/6.0/#sec-isconstructor
if (DefinePropertyOrThrow && $construct) {
var isConstructorMarker = {};
+1 -1
View File
@@ -6,7 +6,7 @@ var assertRecord = require('../helpers/assertRecord');
var Type = require('./Type');
// https://www.ecma-international.org/ecma-262/6.0/#sec-isdatadescriptor
// https://ecma-international.org/ecma-262/6.0/#sec-isdatadescriptor
module.exports = function IsDataDescriptor(Desc) {
if (typeof Desc === 'undefined') {
+4 -6
View File
@@ -1,15 +1,13 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $Object = GetIntrinsic('%Object%');
var $preventExtensions = GetIntrinsic('%Object.preventExtensions%', true);
var $isExtensible = GetIntrinsic('%Object.isExtensible%', true);
var isPrimitive = require('../helpers/isPrimitive');
var $preventExtensions = $Object.preventExtensions;
var $isExtensible = $Object.isExtensible;
// https://www.ecma-international.org/ecma-262/6.0/#sec-isextensible-o
// https://ecma-international.org/ecma-262/6.0/#sec-isextensible-o
module.exports = $preventExtensions
? function IsExtensible(obj) {
+1 -1
View File
@@ -6,7 +6,7 @@ var IsAccessorDescriptor = require('./IsAccessorDescriptor');
var IsDataDescriptor = require('./IsDataDescriptor');
var Type = require('./Type');
// https://www.ecma-international.org/ecma-262/6.0/#sec-isgenericdescriptor
// https://ecma-international.org/ecma-262/6.0/#sec-isgenericdescriptor
module.exports = function IsGenericDescriptor(Desc) {
if (typeof Desc === 'undefined') {
+5 -9
View File
@@ -1,21 +1,17 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var $Math = GetIntrinsic('%Math%');
var $floor = $Math.floor;
var $abs = $Math.abs;
var abs = require('./abs');
var floor = require('./floor');
var $isNaN = require('../helpers/isNaN');
var $isFinite = require('../helpers/isFinite');
// https://www.ecma-international.org/ecma-262/6.0/#sec-isinteger
// https://ecma-international.org/ecma-262/6.0/#sec-isinteger
module.exports = function IsInteger(argument) {
if (typeof argument !== 'number' || $isNaN(argument) || !$isFinite(argument)) {
return false;
}
var abs = $abs(argument);
return $floor(abs) === abs;
var absValue = abs(argument);
return floor(absValue) === absValue;
};
+2 -2
View File
@@ -1,12 +1,12 @@
'use strict';
var callBound = require('../helpers/callBound');
var callBound = require('call-bind/callBound');
var $PromiseThen = callBound('Promise.prototype.then', true);
var Type = require('./Type');
// https://www.ecma-international.org/ecma-262/6.0/#sec-ispromise
// https://ecma-international.org/ecma-262/6.0/#sec-ispromise
module.exports = function IsPromise(x) {
if (Type(x) !== 'Object') {
+1 -1
View File
@@ -1,6 +1,6 @@
'use strict';
// https://www.ecma-international.org/ecma-262/6.0/#sec-ispropertykey
// https://ecma-international.org/ecma-262/6.0/#sec-ispropertykey
module.exports = function IsPropertyKey(argument) {
return typeof argument === 'string' || typeof argument === 'symbol';
+1 -1
View File
@@ -1,6 +1,6 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $match = GetIntrinsic('%Symbol.match%', true);
+19
View File
@@ -0,0 +1,19 @@
'use strict';
var GetIntrinsic = require('get-intrinsic');
var $TypeError = GetIntrinsic('%TypeError%');
var Type = require('./Type');
var isSharedArrayBuffer = require('is-shared-array-buffer');
// https://262.ecma-international.org/8.0/#sec-issharedarraybuffer
module.exports = function IsSharedArrayBuffer(obj) {
if (Type(obj) !== 'Object') {
throw new $TypeError('Assertion failed: Type(O) is not Object');
}
return isSharedArrayBuffer(obj);
};
+3 -3
View File
@@ -1,18 +1,18 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $TypeError = GetIntrinsic('%TypeError%');
var isPrefixOf = require('../helpers/isPrefixOf');
// var callBound = require('../helpers/callBound');
// var callBound = require('call-bind/callBound');
// var $charAt = callBound('String.prototype.charAt');
var Type = require('./Type');
// https://www.ecma-international.org/ecma-262/9.0/#sec-isstringprefix
// https://262.ecma-international.org/9.0/#sec-isstringprefix
module.exports = function IsStringPrefix(p, q) {
if (Type(p) !== 'String') {
+2 -2
View File
@@ -1,13 +1,13 @@
'use strict';
var callBound = require('../helpers/callBound');
var callBound = require('call-bind/callBound');
var $arrayPush = callBound('Array.prototype.push');
var GetIterator = require('./GetIterator');
var IteratorStep = require('./IteratorStep');
var IteratorValue = require('./IteratorValue');
// https://www.ecma-international.org/ecma-262/8.0/#sec-iterabletolist
// https://262.ecma-international.org/8.0/#sec-iterabletolist
module.exports = function IterableToList(items, method) {
var iterator = GetIterator(items, method);
+1 -1
View File
@@ -1,6 +1,6 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $TypeError = GetIntrinsic('%TypeError%');
+1 -1
View File
@@ -1,6 +1,6 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $TypeError = GetIntrinsic('%TypeError%');
+1 -1
View File
@@ -1,6 +1,6 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $TypeError = GetIntrinsic('%TypeError%');
+1 -1
View File
@@ -1,6 +1,6 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $TypeError = GetIntrinsic('%TypeError%');
+1 -1
View File
@@ -3,7 +3,7 @@
var $isFinite = require('../helpers/isFinite');
var msPerDay = require('../helpers/timeConstants').msPerDay;
// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.13
// https://262.ecma-international.org/5.1/#sec-15.9.1.13
module.exports = function MakeDate(day, time) {
if (!$isFinite(day) || !$isFinite(time)) {
+6 -6
View File
@@ -1,20 +1,20 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $floor = GetIntrinsic('%Math.floor%');
var $DateUTC = GetIntrinsic('%Date.UTC%');
var mod = require('../helpers/mod');
var $isFinite = require('../helpers/isFinite');
var DateFromTime = require('./DateFromTime');
var Day = require('./Day');
var floor = require('./floor');
var modulo = require('./modulo');
var MonthFromTime = require('./MonthFromTime');
var ToInteger = require('./ToInteger');
var YearFromTime = require('./YearFromTime');
// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.12
// https://262.ecma-international.org/5.1/#sec-15.9.1.12
module.exports = function MakeDay(year, month, date) {
if (!$isFinite(year) || !$isFinite(month) || !$isFinite(date)) {
@@ -23,8 +23,8 @@ module.exports = function MakeDay(year, month, date) {
var y = ToInteger(year);
var m = ToInteger(month);
var dt = ToInteger(date);
var ym = y + $floor(m / 12);
var mn = mod(m, 12);
var ym = y + floor(m / 12);
var mn = modulo(m, 12);
var t = $DateUTC(ym, mn, 1);
if (YearFromTime(t) !== ym || MonthFromTime(t) !== mn || DateFromTime(t) !== 1) {
return NaN;
+1 -1
View File
@@ -8,7 +8,7 @@ var msPerHour = timeConstants.msPerHour;
var ToInteger = require('./ToInteger');
// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.11
// https://262.ecma-international.org/5.1/#sec-15.9.1.11
module.exports = function MakeTime(hour, min, sec, ms) {
if (!$isFinite(hour) || !$isFinite(min) || !$isFinite(sec) || !$isFinite(ms)) {
+4 -6
View File
@@ -1,16 +1,14 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var floor = require('./floor');
var modulo = require('./modulo');
var $floor = GetIntrinsic('%Math.floor%');
var mod = require('../helpers/mod');
var timeConstants = require('../helpers/timeConstants');
var msPerMinute = timeConstants.msPerMinute;
var MinutesPerHour = timeConstants.MinutesPerHour;
// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.10
// https://262.ecma-international.org/5.1/#sec-15.9.1.10
module.exports = function MinFromTime(t) {
return mod($floor(t / msPerMinute), MinutesPerHour);
return modulo(floor(t / msPerMinute), MinutesPerHour);
};
+1 -1
View File
@@ -3,7 +3,7 @@
var DayWithinYear = require('./DayWithinYear');
var InLeapYear = require('./InLeapYear');
// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.4
// https://262.ecma-international.org/5.1/#sec-15.9.1.4
module.exports = function MonthFromTime(t) {
var day = DayWithinYear(t);
+4 -3
View File
@@ -1,16 +1,17 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $String = GetIntrinsic('%String%');
var $TypeError = GetIntrinsic('%TypeError%');
var Type = require('./Type');
// https://www.ecma-international.org/ecma-262/9.0/#sec-tostring-applied-to-the-number-type
// https://262.ecma-international.org/9.0/#sec-tostring-applied-to-the-number-type
module.exports = function NumberToString(m) {
if (Type(m) !== 'Number') {
throw new TypeError('Assertion failed: "m" must be a String');
throw new $TypeError('Assertion failed: "m" must be a String');
}
return $String(m);
+2 -2
View File
@@ -1,6 +1,6 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $ObjectCreate = GetIntrinsic('%Object.create%', true);
var $TypeError = GetIntrinsic('%TypeError%');
@@ -10,7 +10,7 @@ var Type = require('./Type');
var hasProto = !({ __proto__: null } instanceof Object);
// https://www.ecma-international.org/ecma-262/6.0/#sec-objectcreate
// https://ecma-international.org/ecma-262/6.0/#sec-objectcreate
module.exports = function ObjectCreate(proto, internalSlotsList) {
if (proto !== null && Type(proto) !== 'Object') {
+40
View File
@@ -0,0 +1,40 @@
'use strict';
var callBound = require('call-bind/callBound');
var DefinePropertyOrThrow = require('./DefinePropertyOrThrow');
var FromPropertyDescriptor = require('./FromPropertyDescriptor');
var Get = require('./Get');
var ToObject = require('./ToObject');
var ToPropertyDescriptor = require('./ToPropertyDescriptor');
var forEach = require('../helpers/forEach');
var getOwnPropertyDescriptor = require('../helpers/getOwnPropertyDescriptor');
var OwnPropertyKeys = require('../helpers/OwnPropertyKeys');
var $push = callBound('Array.prototype.push');
// https://262.ecma-international.org/6.0/#sec-objectdefineproperties
module.exports = function ObjectDefineProperties(O, Properties) {
var props = ToObject(Properties); // step 1
var keys = OwnPropertyKeys(props); // step 2
var descriptors = []; // step 3
forEach(keys, function (nextKey) { // step 4
var propDesc = ToPropertyDescriptor(getOwnPropertyDescriptor(props, nextKey)); // step 4.a
if (typeof propDesc !== 'undefined' && propDesc['[[Enumerable]]']) { // step 4.b
var descObj = Get(props, nextKey); // step 4.b.i
var desc = ToPropertyDescriptor(descObj); // step 4.b.ii
$push(descriptors, [nextKey, desc]); // step 4.b.iii
}
});
forEach(descriptors, function (pair) { // step 5
var P = pair[0]; // step 5.a
var desc = pair[1]; // step 5.b
desc = FromPropertyDescriptor(desc); // TODO: remove this once DefinePropertyOrThrow is fixed
DefinePropertyOrThrow(O, P, desc); // step 5.c
});
return O; // step 6
};
+20
View File
@@ -0,0 +1,20 @@
'use strict';
var GetIntrinsic = require('get-intrinsic');
var $TypeError = GetIntrinsic('%TypeError%');
var GetPrototypeFromConstructor = require('./GetPrototypeFromConstructor');
var IsArray = require('./IsArray');
var ObjectCreate = require('./ObjectCreate');
// https://ecma-international.org/ecma-262/6.0/#sec-ordinarycreatefromconstructor
module.exports = function OrdinaryCreateFromConstructor(constructor, intrinsicDefaultProto) {
GetIntrinsic(intrinsicDefaultProto); // throws if not a valid intrinsic
var proto = GetPrototypeFromConstructor(constructor, intrinsicDefaultProto);
var slots = arguments.length < 3 ? [] : arguments[2];
if (!IsArray(slots)) {
throw new $TypeError('Assertion failed: if provided, `internalSlotsList` must be a List');
}
return ObjectCreate(proto, slots);
};
+2 -2
View File
@@ -1,6 +1,6 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $gOPD = require('../helpers/getOwnPropertyDescriptor');
var $SyntaxError = GetIntrinsic('%SyntaxError%');
@@ -17,7 +17,7 @@ var SameValue = require('./SameValue');
var Type = require('./Type');
var ValidateAndApplyPropertyDescriptor = require('./ValidateAndApplyPropertyDescriptor');
// https://www.ecma-international.org/ecma-262/6.0/#sec-ordinarydefineownproperty
// https://ecma-international.org/ecma-262/6.0/#sec-ordinarydefineownproperty
module.exports = function OrdinaryDefineOwnProperty(O, P, Desc) {
if (Type(O) !== 'Object') {
+3 -3
View File
@@ -1,11 +1,11 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $gOPD = require('../helpers/getOwnPropertyDescriptor');
var $TypeError = GetIntrinsic('%TypeError%');
var callBound = require('../helpers/callBound');
var callBound = require('call-bind/callBound');
var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');
@@ -17,7 +17,7 @@ var IsRegExp = require('./IsRegExp');
var ToPropertyDescriptor = require('./ToPropertyDescriptor');
var Type = require('./Type');
// https://www.ecma-international.org/ecma-262/6.0/#sec-ordinarygetownproperty
// https://ecma-international.org/ecma-262/6.0/#sec-ordinarygetownproperty
module.exports = function OrdinaryGetOwnProperty(O, P) {
if (Type(O) !== 'Object') {
+2 -2
View File
@@ -1,6 +1,6 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $TypeError = GetIntrinsic('%TypeError%');
@@ -8,7 +8,7 @@ var $getProto = require('../helpers/getProto');
var Type = require('./Type');
// https://ecma-international.org/ecma-262/7.0/#sec-ordinarygetprototypeof
// https://262.ecma-international.org/7.0/#sec-ordinarygetprototypeof
module.exports = function OrdinaryGetPrototypeOf(O) {
if (Type(O) !== 'Object') {
+2 -2
View File
@@ -1,6 +1,6 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $TypeError = GetIntrinsic('%TypeError%');
@@ -8,7 +8,7 @@ var Get = require('./Get');
var IsCallable = require('./IsCallable');
var Type = require('./Type');
// https://www.ecma-international.org/ecma-262/6.0/#sec-ordinaryhasinstance
// https://ecma-international.org/ecma-262/6.0/#sec-ordinaryhasinstance
module.exports = function OrdinaryHasInstance(C, O) {
if (IsCallable(C) === false) {
+2 -2
View File
@@ -1,13 +1,13 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $TypeError = GetIntrinsic('%TypeError%');
var IsPropertyKey = require('./IsPropertyKey');
var Type = require('./Type');
// https://www.ecma-international.org/ecma-262/6.0/#sec-ordinaryhasproperty
// https://ecma-international.org/ecma-262/6.0/#sec-ordinaryhasproperty
module.exports = function OrdinaryHasProperty(O, P) {
if (Type(O) !== 'Object') {
+29 -29
View File
@@ -1,6 +1,6 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $TypeError = GetIntrinsic('%TypeError%');
@@ -9,22 +9,22 @@ var $setProto = require('../helpers/setProto');
var OrdinaryGetPrototypeOf = require('./OrdinaryGetPrototypeOf');
var Type = require('./Type');
// https://ecma-international.org/ecma-262/7.0/#sec-ordinarysetprototypeof
// https://262.ecma-international.org/7.0/#sec-ordinarysetprototypeof
module.exports = function OrdinarySetPrototypeOf(O, V) {
if (Type(V) !== 'Object' && Type(V) !== 'Null') {
throw new $TypeError('Assertion failed: V must be Object or Null');
}
/*
var extensible = IsExtensible(O);
var current = OrdinaryGetPrototypeOf(O);
if (SameValue(V, current)) {
return true;
}
if (!extensible) {
return false;
}
*/
var extensible = IsExtensible(O);
var current = OrdinaryGetPrototypeOf(O);
if (SameValue(V, current)) {
return true;
}
if (!extensible) {
return false;
}
*/
try {
$setProto(O, V);
} catch (e) {
@@ -32,22 +32,22 @@ module.exports = function OrdinarySetPrototypeOf(O, V) {
}
return OrdinaryGetPrototypeOf(O) === V;
/*
var p = V;
var done = false;
while (!done) {
if (p === null) {
done = true;
} else if (SameValue(p, O)) {
return false;
} else {
if (wat) {
done = true;
} else {
p = p.[[Prototype]];
}
}
}
O.[[Prototype]] = V;
return true;
*/
var p = V;
var done = false;
while (!done) {
if (p === null) {
done = true;
} else if (SameValue(p, O)) {
return false;
} else {
if (wat) {
done = true;
} else {
p = p.[[Prototype]];
}
}
}
O.[[Prototype]] = V;
return true;
*/
};
+38
View File
@@ -0,0 +1,38 @@
'use strict';
var GetIntrinsic = require('get-intrinsic');
var $TypeError = GetIntrinsic('%TypeError%');
var Call = require('./Call');
var Get = require('./Get');
var IsCallable = require('./IsCallable');
var Type = require('./Type');
var inspect = require('object-inspect');
// https://262.ecma-international.org/8.0/#sec-ordinarytoprimitive
module.exports = function OrdinaryToPrimitive(O, hint) {
if (Type(O) !== 'Object') {
throw new $TypeError('Assertion failed: Type(O) is not Object');
}
if (/* Type(hint) !== 'String' || */ hint !== 'string' && hint !== 'number') {
throw new $TypeError('Assertion failed: `hint` must be "string" or "number"');
}
var methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString'];
for (var i = 0; i < methodNames.length; i += 1) {
var name = methodNames[i];
var method = Get(O, name);
if (IsCallable(method)) {
var result = Call(method, O);
if (Type(result) !== 'Object') {
return result;
}
}
}
throw new $TypeError('No primitive value for ' + inspect(O));
};
+5 -3
View File
@@ -1,10 +1,12 @@
'use strict';
var callBound = require('../helpers/callBound');
var GetIntrinsic = require('get-intrinsic');
var callBind = require('call-bind');
var $PromiseResolve = callBound('Promise.resolve', true);
var $resolve = GetIntrinsic('%Promise.resolve%', true);
var $PromiseResolve = $resolve && callBind($resolve);
// https://ecma-international.org/ecma-262/9.0/#sec-promise-resolve
// https://262.ecma-international.org/9.0/#sec-promise-resolve
module.exports = function PromiseResolve(C, x) {
if (!$PromiseResolve) {
+54
View File
@@ -0,0 +1,54 @@
'use strict';
var GetIntrinsic = require('get-intrinsic');
var $TypeError = GetIntrinsic('%TypeError%');
var callBound = require('call-bind/callBound');
var forEach = require('../helpers/forEach');
var isLeadingSurrogate = require('../helpers/isLeadingSurrogate');
var isTrailingSurrogate = require('../helpers/isTrailingSurrogate');
var $charCodeAt = callBound('String.prototype.charCodeAt');
var $strSplit = callBound('String.prototype.split');
var Type = require('./Type');
var UnicodeEscape = require('./UnicodeEscape');
var UTF16Encoding = require('./UTF16Encoding');
var has = require('has');
// https://262.ecma-international.org/10.0/#sec-quotejsonstring
var escapes = {
'\u0008': '\\b',
'\u0009': '\\t',
'\u000A': '\\n',
'\u000C': '\\f',
'\u000D': '\\r',
'\u0022': '\\"',
'\u005c': '\\\\'
};
module.exports = function QuoteJSONString(value) {
if (Type(value) !== 'String') {
throw new $TypeError('Assertion failed: `value` must be a String');
}
var product = '"';
if (value) {
forEach($strSplit(value), function (C) {
if (has(escapes, C)) {
product += escapes[C];
} else {
var cCharCode = $charCodeAt(C, 0);
if (cCharCode < 0x20 || isLeadingSurrogate(C) || isTrailingSurrogate(C)) {
product += UnicodeEscape(C);
} else {
product += UTF16Encoding(cCharCode);
}
}
});
}
product += '"';
return product;
};
+21
View File
@@ -0,0 +1,21 @@
'use strict';
var GetIntrinsic = require('get-intrinsic');
var $RegExp = GetIntrinsic('%RegExp%');
// var RegExpAlloc = require('./RegExpAlloc');
// var RegExpInitialize = require('./RegExpInitialize');
var ToString = require('./ToString');
// https://262.ecma-international.org/6.0/#sec-regexpcreate
module.exports = function RegExpCreate(P, F) {
// var obj = RegExpAlloc($RegExp);
// return RegExpInitialize(obj, P, F);
// covers spec mechanics; bypass regex brand checking
var pattern = typeof P === 'undefined' ? '' : ToString(P);
var flags = typeof F === 'undefined' ? '' : ToString(F);
return new $RegExp(pattern, flags);
};
+2 -2
View File
@@ -1,10 +1,10 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $TypeError = GetIntrinsic('%TypeError%');
var regexExec = require('../helpers/callBound')('RegExp.prototype.exec');
var regexExec = require('call-bind/callBound')('RegExp.prototype.exec');
var Call = require('./Call');
var Get = require('./Get');
+1 -1
View File
@@ -2,7 +2,7 @@
var $isNaN = require('../helpers/isNaN');
// http://www.ecma-international.org/ecma-262/5.1/#sec-9.12
// http://262.ecma-international.org/5.1/#sec-9.12
module.exports = function SameValue(x, y) {
if (x === y) { // 0 === -0, but they are not identical.
+2 -2
View File
@@ -1,12 +1,12 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $TypeError = GetIntrinsic('%TypeError%');
var SameValue = require('./SameValue');
// https://www.ecma-international.org/ecma-262/7.0/#sec-samevaluenonnumber
// https://262.ecma-international.org/7.0/#sec-samevaluenonnumber
module.exports = function SameValueNonNumber(x, y) {
if (typeof x === 'number' || typeof x !== typeof y) {
+1 -1
View File
@@ -2,7 +2,7 @@
var $isNaN = require('../helpers/isNaN');
// https://www.ecma-international.org/ecma-262/6.0/#sec-samevaluezero
// https://ecma-international.org/ecma-262/6.0/#sec-samevaluezero
module.exports = function SameValueZero(x, y) {
return (x === y) || ($isNaN(x) && $isNaN(y));
+4 -6
View File
@@ -1,16 +1,14 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var floor = require('./floor');
var modulo = require('./modulo');
var $floor = GetIntrinsic('%Math.floor%');
var mod = require('../helpers/mod');
var timeConstants = require('../helpers/timeConstants');
var msPerSecond = timeConstants.msPerSecond;
var SecondsPerMinute = timeConstants.SecondsPerMinute;
// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.10
// https://262.ecma-international.org/5.1/#sec-15.9.1.10
module.exports = function SecFromTime(t) {
return mod($floor(t / msPerSecond), SecondsPerMinute);
return modulo(floor(t / msPerSecond), SecondsPerMinute);
};
+8 -8
View File
@@ -1,6 +1,6 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $TypeError = GetIntrinsic('%TypeError%');
@@ -36,12 +36,12 @@ module.exports = function Set(O, P, V, Throw) {
throw new $TypeError('Attempted to assign to readonly property.');
}
return true;
} else {
try {
O[P] = V; // eslint-disable-line no-param-reassign
return noThrowOnStrictViolation ? SameValue(O[P], V) : true;
} catch (e) {
return false;
}
}
try {
O[P] = V; // eslint-disable-line no-param-reassign
return noThrowOnStrictViolation ? SameValue(O[P], V) : true;
} catch (e) {
return false;
}
};
+31
View File
@@ -0,0 +1,31 @@
'use strict';
var GetIntrinsic = require('get-intrinsic');
var $TypeError = GetIntrinsic('%TypeError%');
var DefinePropertyOrThrow = require('./DefinePropertyOrThrow');
var HasOwnProperty = require('./HasOwnProperty');
var IsExtensible = require('./IsExtensible');
var IsInteger = require('./IsInteger');
var Type = require('./Type');
// https://262.ecma-international.org/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 || !IsInteger(length)) {
throw new $TypeError('Assertion failed: `length` must be an integer >= 0');
}
return DefinePropertyOrThrow(F, 'length', {
'[[Configurable]]': true,
'[[Enumerable]]': false,
'[[Value]]': length,
'[[Writable]]': false
});
};
+2 -2
View File
@@ -1,12 +1,12 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var has = require('has');
var $TypeError = GetIntrinsic('%TypeError%');
var getSymbolDescription = require('../helpers/getSymbolDescription');
var getSymbolDescription = require('get-symbol-description');
var DefinePropertyOrThrow = require('./DefinePropertyOrThrow');
var IsExtensible = require('./IsExtensible');
+4 -4
View File
@@ -1,12 +1,12 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $SyntaxError = GetIntrinsic('%SyntaxError%');
var $TypeError = GetIntrinsic('%TypeError%');
var $preventExtensions = GetIntrinsic('%Object.preventExtensions%');
var $preventExtensions = GetIntrinsic('%Object.preventExtensions%', true);
var $gOPD = require('../helpers/getOwnPropertyDescriptor');
var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%');
var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%', true);
var forEach = require('../helpers/forEach');
@@ -15,7 +15,7 @@ var IsAccessorDescriptor = require('./IsAccessorDescriptor');
var ToPropertyDescriptor = require('./ToPropertyDescriptor');
var Type = require('./Type');
// https://www.ecma-international.org/ecma-262/6.0/#sec-setintegritylevel
// https://ecma-international.org/ecma-262/6.0/#sec-setintegritylevel
module.exports = function SetIntegrityLevel(O, level) {
if (Type(O) !== 'Object') {
+1 -1
View File
@@ -1,6 +1,6 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $species = GetIntrinsic('%Symbol.species%', true);
var $TypeError = GetIntrinsic('%TypeError%');
+38
View File
@@ -0,0 +1,38 @@
'use strict';
var GetIntrinsic = require('get-intrinsic');
var callBound = require('call-bind/callBound');
var $TypeError = GetIntrinsic('%TypeError%');
var IsInteger = require('./IsInteger');
var Type = require('./Type');
var $charAt = callBound('String.prototype.charAt');
// https://262.ecma-international.org/6.0/#sec-splitmatch
module.exports = function SplitMatch(S, q, R) {
if (Type(S) !== 'String') {
throw new $TypeError('Assertion failed: `S` must be a String');
}
if (!IsInteger(q)) {
throw new $TypeError('Assertion failed: `q` must be an integer');
}
if (Type(R) !== 'String') {
throw new $TypeError('Assertion failed: `R` must be a String');
}
var r = R.length;
var s = S.length;
if (q + r > s) {
return false;
}
for (var i = 0; i < r; i += 1) {
if ($charAt(S, q + i) !== $charAt(R, i)) {
return false;
}
}
return q + r;
};
+1 -1
View File
@@ -2,7 +2,7 @@
var Type = require('./Type');
// https://www.ecma-international.org/ecma-262/5.1/#sec-11.9.6
// https://262.ecma-international.org/5.1/#sec-11.9.6
module.exports = function StrictEqualityComparison(x, y) {
var xType = Type(x);
+40
View File
@@ -0,0 +1,40 @@
'use strict';
var GetIntrinsic = require('get-intrinsic');
var $Object = GetIntrinsic('%Object%');
var $StringPrototype = GetIntrinsic('%String.prototype%');
var $SyntaxError = GetIntrinsic('%SyntaxError%');
var $TypeError = GetIntrinsic('%TypeError%');
var DefinePropertyOrThrow = require('./DefinePropertyOrThrow');
var Type = require('./Type');
var setProto = require('../helpers/setProto');
// https://262.ecma-international.org/6.0/#sec-stringcreate
module.exports = function StringCreate(value, prototype) {
if (Type(value) !== 'String') {
throw new $TypeError('Assertion failed: `S` must be a String');
}
var S = $Object(value);
if (prototype !== $StringPrototype) {
if (setProto) {
setProto(S, prototype);
} else {
throw new $SyntaxError('StringCreate: a `proto` argument that is not `String.prototype` is not supported in an environment that does not support setting the [[Prototype]]');
}
}
var length = value.length;
DefinePropertyOrThrow(S, 'length', {
'[[Configurable]]': false,
'[[Enumerable]]': false,
'[[Value]]': length,
'[[Writable]]': false
});
return S;
};
+48
View File
@@ -0,0 +1,48 @@
'use strict';
var GetIntrinsic = require('get-intrinsic');
var $TypeError = GetIntrinsic('%TypeError%');
var callBound = require('call-bind/callBound');
var $charAt = callBound('String.prototype.charAt');
var $stringToString = callBound('String.prototype.toString');
var CanonicalNumericIndexString = require('./CanonicalNumericIndexString');
var IsInteger = require('./IsInteger');
var IsPropertyKey = require('./IsPropertyKey');
var Type = require('./Type');
var isNegativeZero = require('is-negative-zero');
// https://262.ecma-international.org/8.0/#sec-stringgetownproperty
module.exports = function StringGetOwnProperty(S, P) {
var str;
if (Type(S) === 'Object') {
try {
str = $stringToString(S);
} catch (e) { /**/ }
}
if (Type(str) !== 'String') {
throw new $TypeError('Assertion failed: `S` must be a boxed string object');
}
if (!IsPropertyKey(P)) {
throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true');
}
if (Type(P) !== 'String') {
return void undefined;
}
var index = CanonicalNumericIndexString(P);
var len = str.length;
if (typeof index === 'undefined' || !IsInteger(index) || isNegativeZero(index) || index < 0 || len <= index) {
return void undefined;
}
var resultStr = $charAt(S, index);
return {
'[[Configurable]]': false,
'[[Enumerable]]': true,
'[[Value]]': resultStr,
'[[Writable]]': false
};
};
+3 -3
View File
@@ -1,16 +1,16 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $TypeError = GetIntrinsic('%TypeError%');
var callBound = require('../helpers/callBound');
var callBound = require('call-bind/callBound');
var $SymbolToString = callBound('Symbol.prototype.toString', true);
var Type = require('./Type');
// https://www.ecma-international.org/ecma-262/6.0/#sec-symboldescriptivestring
// https://ecma-international.org/ecma-262/6.0/#sec-symboldescriptivestring
module.exports = function SymbolDescriptiveString(sym) {
if (Type(sym) !== 'Symbol') {
+4 -4
View File
@@ -1,19 +1,19 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $gOPD = require('../helpers/getOwnPropertyDescriptor');
var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%');
var $TypeError = GetIntrinsic('%TypeError%');
var every = require('../helpers/every');
var OwnPropertyKeys = require('../helpers/OwnPropertyKeys');
var IsDataDescriptor = require('./IsDataDescriptor');
var IsExtensible = require('./IsExtensible');
var ToPropertyDescriptor = require('./ToPropertyDescriptor');
var Type = require('./Type');
// https://www.ecma-international.org/ecma-262/6.0/#sec-testintegritylevel
// https://ecma-international.org/ecma-262/6.0/#sec-testintegritylevel
module.exports = function TestIntegrityLevel(O, level) {
if (Type(O) !== 'Object') {
@@ -26,7 +26,7 @@ module.exports = function TestIntegrityLevel(O, level) {
if (status) {
return false;
}
var theKeys = $gOPN(O);
var theKeys = OwnPropertyKeys(O);
return theKeys.length === 0 || every(theKeys, function (k) {
var currentDesc = $gOPD(O, k);
if (typeof currentDesc !== 'undefined') {
+4 -4
View File
@@ -1,19 +1,19 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $Date = GetIntrinsic('%Date%');
var $Number = GetIntrinsic('%Number%');
var $abs = GetIntrinsic('%Math.abs%');
var $isFinite = require('../helpers/isFinite');
var abs = require('./abs');
var ToNumber = require('./ToNumber');
// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.14
// https://262.ecma-international.org/5.1/#sec-15.9.1.14
module.exports = function TimeClip(time) {
if (!$isFinite(time) || $abs(time) > 8.64e15) {
if (!$isFinite(time) || abs(time) > 8.64e15) {
return NaN;
}
return $Number(new $Date(ToNumber(time)));
+1 -1
View File
@@ -4,7 +4,7 @@ var msPerDay = require('../helpers/timeConstants').msPerDay;
var DayFromYear = require('./DayFromYear');
// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
// https://262.ecma-international.org/5.1/#sec-15.9.1.3
module.exports = function TimeFromYear(y) {
return msPerDay * DayFromYear(y);
+2 -2
View File
@@ -1,6 +1,6 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $TypeError = GetIntrinsic('%TypeError%');
@@ -12,7 +12,7 @@ var MinFromTime = require('./MinFromTime');
var SecFromTime = require('./SecFromTime');
var Type = require('./Type');
// https://www.ecma-international.org/ecma-262/9.0/#sec-timestring
// https://262.ecma-international.org/9.0/#sec-timestring
module.exports = function TimeString(tv) {
if (Type(tv) !== 'Number' || $isNaN(tv)) {
+4 -3
View File
@@ -1,11 +1,12 @@
'use strict';
var mod = require('../helpers/mod');
var modulo = require('./modulo');
var msPerDay = require('../helpers/timeConstants').msPerDay;
// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.2
// https://262.ecma-international.org/5.1/#sec-15.9.1.2
module.exports = function TimeWithinDay(t) {
return mod(t, msPerDay);
return modulo(t, msPerDay);
};

Some files were not shown because too many files have changed in this diff Show More