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/5.1/#sec-11.9.3
// https://262.ecma-international.org/5.1/#sec-11.9.3
module.exports = function AbstractEqualityComparison(x, y) {
var xType = Type(x);
+2 -5
View File
@@ -1,6 +1,6 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $Number = GetIntrinsic('%Number%');
var $TypeError = GetIntrinsic('%TypeError%');
@@ -13,7 +13,7 @@ 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/5.1/#sec-11.8.5
// eslint-disable-next-line max-statements
module.exports = function AbstractRelationalComparison(x, y, LeftFirst) {
@@ -39,9 +39,6 @@ module.exports = function AbstractRelationalComparison(x, y, LeftFirst) {
if ($isFinite(nx) && $isFinite(ny) && nx === ny) {
return false;
}
if (nx === 0 && ny === 0) {
return false;
}
if (nx === Infinity) {
return false;
}
+2 -2
View File
@@ -1,10 +1,10 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $TypeError = GetIntrinsic('%TypeError%');
// http://www.ecma-international.org/ecma-262/5.1/#sec-9.10
// http://262.ecma-international.org/5.1/#sec-9.10
module.exports = function CheckObjectCoercible(value, optMessage) {
if (value == null) {
+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);
+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;
+4 -4
View File
@@ -1,6 +1,6 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $TypeError = GetIntrinsic('%TypeError%');
@@ -10,7 +10,7 @@ var IsAccessorDescriptor = require('./IsAccessorDescriptor');
var assertRecord = require('../helpers/assertRecord');
// https://ecma-international.org/ecma-262/5.1/#sec-8.10.4
// https://262.ecma-international.org/5.1/#sec-8.10.4
module.exports = function FromPropertyDescriptor(Desc) {
if (typeof Desc === 'undefined') {
@@ -33,7 +33,7 @@ module.exports = function FromPropertyDescriptor(Desc) {
enumerable: !!Desc['[[Enumerable]]'],
configurable: !!Desc['[[Configurable]]']
};
} else {
throw new $TypeError('FromPropertyDescriptor must be called with a fully populated Property Descriptor');
}
throw new $TypeError('FromPropertyDescriptor must be called with a fully populated Property Descriptor');
};
+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));
+1 -1
View File
@@ -6,7 +6,7 @@ var Type = require('./Type');
var assertRecord = require('../helpers/assertRecord');
// https://ecma-international.org/ecma-262/5.1/#sec-8.10.1
// https://262.ecma-international.org/5.1/#sec-8.10.1
module.exports = function IsAccessorDescriptor(Desc) {
if (typeof Desc === 'undefined') {
+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');
+1 -1
View File
@@ -6,7 +6,7 @@ var Type = require('./Type');
var assertRecord = require('../helpers/assertRecord');
// https://ecma-international.org/ecma-262/5.1/#sec-8.10.2
// https://262.ecma-international.org/5.1/#sec-8.10.2
module.exports = function IsDataDescriptor(Desc) {
if (typeof Desc === 'undefined') {
+1 -1
View File
@@ -6,7 +6,7 @@ var Type = require('./Type');
var assertRecord = require('../helpers/assertRecord');
// https://ecma-international.org/ecma-262/5.1/#sec-8.10.3
// https://262.ecma-international.org/5.1/#sec-8.10.3
module.exports = function IsGenericDescriptor(Desc) {
if (typeof Desc === 'undefined') {
+3 -1
View File
@@ -1,12 +1,14 @@
'use strict';
// TODO, semver-major: delete this
var isPropertyDescriptor = require('../helpers/isPropertyDescriptor');
var Type = require('./Type');
var IsDataDescriptor = require('./IsDataDescriptor');
var IsAccessorDescriptor = require('./IsAccessorDescriptor');
// https://ecma-international.org/ecma-262/6.0/#sec-property-descriptor-specification-type
// https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type
module.exports = function IsPropertyDescriptor(Desc) {
return isPropertyDescriptor({
+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);
+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.
+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);
};
+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);
+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);
+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);
};
+1 -1
View File
@@ -1,5 +1,5 @@
'use strict';
// http://www.ecma-international.org/ecma-262/5.1/#sec-9.2
// http://262.ecma-international.org/5.1/#sec-9.2
module.exports = function ToBoolean(value) { return !!value; };
+1 -1
View File
@@ -2,7 +2,7 @@
var ToNumber = require('./ToNumber');
// http://www.ecma-international.org/ecma-262/5.1/#sec-9.5
// http://262.ecma-international.org/5.1/#sec-9.5
module.exports = function ToInt32(x) {
return ToNumber(x) >> 0;
+5 -9
View File
@@ -1,22 +1,18 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var $Math = GetIntrinsic('%Math%');
var abs = require('./abs');
var floor = require('./floor');
var ToNumber = require('./ToNumber');
var $isNaN = require('../helpers/isNaN');
var $isFinite = require('../helpers/isFinite');
var $sign = require('../helpers/sign');
var $floor = $Math.floor;
var $abs = $Math.abs;
// http://www.ecma-international.org/ecma-262/5.1/#sec-9.4
// http://262.ecma-international.org/5.1/#sec-9.4
module.exports = function ToInteger(value) {
var number = ToNumber(value);
if ($isNaN(number)) { return 0; }
if (number === 0 || !$isFinite(number)) { return number; }
return $sign(number) * $floor($abs(number));
return $sign(number) * floor(abs(number));
};
+15 -2
View File
@@ -1,7 +1,20 @@
'use strict';
// http://www.ecma-international.org/ecma-262/5.1/#sec-9.3
var ToPrimitive = require('./ToPrimitive');
// http://262.ecma-international.org/5.1/#sec-9.3
module.exports = function ToNumber(value) {
return +value; // eslint-disable-line no-implicit-coercion
var prim = ToPrimitive(value, Number);
if (typeof prim !== 'string') {
return +prim; // eslint-disable-line no-implicit-coercion
}
// eslint-disable-next-line no-control-regex
var trimmed = prim.replace(/^[ \t\x0b\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u0085]+|[ \t\x0b\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u0085]+$/g, '');
if ((/^0[ob]|^[+-]0x/).test(trimmed)) {
return NaN;
}
return +trimmed; // eslint-disable-line no-implicit-coercion
};
+2 -2
View File
@@ -1,12 +1,12 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $Object = GetIntrinsic('%Object%');
var CheckObjectCoercible = require('./CheckObjectCoercible');
// http://www.ecma-international.org/ecma-262/5.1/#sec-9.9
// http://262.ecma-international.org/5.1/#sec-9.9
module.exports = function ToObject(value) {
CheckObjectCoercible(value);
+1 -1
View File
@@ -1,5 +1,5 @@
'use strict';
// http://www.ecma-international.org/ecma-262/5.1/#sec-9.1
// http://262.ecma-international.org/5.1/#sec-9.1
module.exports = require('es-to-primitive/es5');
+3 -3
View File
@@ -2,7 +2,7 @@
var has = require('has');
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $TypeError = GetIntrinsic('%TypeError%');
@@ -10,7 +10,7 @@ var Type = require('./Type');
var ToBoolean = require('./ToBoolean');
var IsCallable = require('./IsCallable');
// https://ecma-international.org/ecma-262/5.1/#sec-8.10.5
// https://262.ecma-international.org/5.1/#sec-8.10.5
module.exports = function ToPropertyDescriptor(Obj) {
if (Type(Obj) !== 'Object') {
@@ -33,7 +33,7 @@ module.exports = function ToPropertyDescriptor(Obj) {
if (has(Obj, 'get')) {
var getter = Obj.get;
if (typeof getter !== 'undefined' && !IsCallable(getter)) {
throw new TypeError('getter must be a function');
throw new $TypeError('getter must be a function');
}
desc['[[Get]]'] = getter;
}
+2 -2
View File
@@ -1,10 +1,10 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $String = GetIntrinsic('%String%');
// http://www.ecma-international.org/ecma-262/5.1/#sec-9.8
// http://262.ecma-international.org/5.1/#sec-9.8
module.exports = function ToString(value) {
return $String(value);
+6 -11
View File
@@ -1,24 +1,19 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var $Math = GetIntrinsic('%Math%');
var abs = require('./abs');
var floor = require('./floor');
var modulo = require('./modulo');
var ToNumber = require('./ToNumber');
var $isNaN = require('../helpers/isNaN');
var $isFinite = require('../helpers/isFinite');
var $sign = require('../helpers/sign');
var $mod = require('../helpers/mod');
var $floor = $Math.floor;
var $abs = $Math.abs;
// http://www.ecma-international.org/ecma-262/5.1/#sec-9.7
// http://262.ecma-international.org/5.1/#sec-9.7
module.exports = function ToUint16(value) {
var number = ToNumber(value);
if ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; }
var posInt = $sign(number) * $floor($abs(number));
return $mod(posInt, 0x10000);
var posInt = $sign(number) * floor(abs(number));
return modulo(posInt, 0x10000);
};
+1 -1
View File
@@ -2,7 +2,7 @@
var ToNumber = require('./ToNumber');
// http://www.ecma-international.org/ecma-262/5.1/#sec-9.6
// http://262.ecma-international.org/5.1/#sec-9.6
module.exports = function ToUint32(x) {
return ToNumber(x) >>> 0;
+1 -1
View File
@@ -1,6 +1,6 @@
'use strict';
// https://www.ecma-international.org/ecma-262/5.1/#sec-8
// https://262.ecma-international.org/5.1/#sec-8
module.exports = function Type(x) {
if (x === null) {
+3 -4
View File
@@ -1,11 +1,10 @@
'use strict';
var mod = require('../helpers/mod');
var Day = require('./Day');
var modulo = require('./modulo');
// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.6
// https://262.ecma-international.org/5.1/#sec-15.9.1.6
module.exports = function WeekDay(t) {
return mod(Day(t) + 4, 7);
return modulo(Day(t) + 4, 7);
};
+3 -3
View File
@@ -1,14 +1,14 @@
'use strict';
var GetIntrinsic = require('../GetIntrinsic');
var GetIntrinsic = require('get-intrinsic');
var $Date = GetIntrinsic('%Date%');
var callBound = require('../helpers/callBound');
var callBound = require('call-bind/callBound');
var $getUTCFullYear = callBound('Date.prototype.getUTCFullYear');
// 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 YearFromTime(t) {
// largest y such that this.TimeFromYear(y) <= t
+11
View File
@@ -0,0 +1,11 @@
'use strict';
var GetIntrinsic = require('get-intrinsic');
var $abs = GetIntrinsic('%Math.abs%');
// http://262.ecma-international.org/5.1/#sec-5.2
module.exports = function abs(x) {
return $abs(x);
};
+11
View File
@@ -0,0 +1,11 @@
'use strict';
// var modulo = require('./modulo');
var $floor = Math.floor;
// http://262.ecma-international.org/5.1/#sec-5.2
module.exports = function floor(x) {
// return x - modulo(x, 1);
return $floor(x);
};
+1 -1
View File
@@ -2,7 +2,7 @@
var mod = require('../helpers/mod');
// https://ecma-international.org/ecma-262/5.1/#sec-5.2
// https://262.ecma-international.org/5.1/#sec-5.2
module.exports = function modulo(x, y) {
return mod(x, y);
+4 -3
View File
@@ -1,10 +1,11 @@
'use strict';
var mod = require('../helpers/mod');
var modulo = require('./modulo');
var msPerSecond = require('../helpers/timeConstants').msPerSecond;
// 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 msFromTime(t) {
return mod(t, msPerSecond);
return modulo(t, msPerSecond);
};