UNPKG

prepack

Version:

Execute a JS bundle, serialize global state and side effects to a snapshot that can be quickly restored.

671 lines (433 loc) 31.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = _default; var _errors = require("../../errors.js"); var _index = require("../../values/index.js"); var _index2 = require("../../methods/index.js"); var _singletons = require("../../singletons"); var _invariant = _interopRequireDefault(require("../../invariant.js")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * Copyright (c) 2017-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ /* strict-local */ function _default(realm, obj) { // ECMA262 20.3.4.2 obj.defineNativeMethod("getDate", 0, context => { // 1. Let t be ? thisTimeValue(this value). let t = (0, _index2.thisTimeValue)(realm, context).throwIfNotConcreteNumber().value; // 2. If t is NaN, return NaN. if (isNaN(t)) return realm.intrinsics.NaN; // 3. Return DateFromTime(LocalTime(t)). return new _index.NumberValue(realm, (0, _index2.DateFromTime)(realm, (0, _index2.LocalTime)(realm, t))); }); // ECMA262 20.3.4.3 obj.defineNativeMethod("getDay", 0, context => { // 1. Let t be ? thisTimeValue(this value). let t = (0, _index2.thisTimeValue)(realm, context).throwIfNotConcreteNumber().value; // 2. If t is NaN, return NaN. if (isNaN(t)) return realm.intrinsics.NaN; // 3. Return WeekDay(LocalTime(t)). return new _index.NumberValue(realm, (0, _index2.WeekDay)(realm, (0, _index2.LocalTime)(realm, t))); }); // ECMA262 20.3.4.4 obj.defineNativeMethod("getFullYear", 0, context => { // 1. Let t be ? thisTimeValue(this value). let t = (0, _index2.thisTimeValue)(realm, context).throwIfNotConcreteNumber().value; // 2. If t is NaN, return NaN. if (isNaN(t)) return realm.intrinsics.NaN; // 3. Return YearFromTime(LocalTime(t)). return new _index.NumberValue(realm, (0, _index2.YearFromTime)(realm, (0, _index2.LocalTime)(realm, t))); }); // ECMA262 20.3.4.5 obj.defineNativeMethod("getHours", 0, context => { // 1. Let t be ? thisTimeValue(this value). let t = (0, _index2.thisTimeValue)(realm, context).throwIfNotConcreteNumber().value; // 2. If t is NaN, return NaN. if (isNaN(t)) return realm.intrinsics.NaN; // 3. Return HourFromTime(LocalTime(t)). return new _index.NumberValue(realm, (0, _index2.HourFromTime)(realm, (0, _index2.LocalTime)(realm, t))); }); // ECMA262 20.3.4.6 obj.defineNativeMethod("getMilliseconds", 0, context => { // 1. Let t be ? thisTimeValue(this value). let t = (0, _index2.thisTimeValue)(realm, context).throwIfNotConcreteNumber().value; // 2. If t is NaN, return NaN. if (isNaN(t)) return realm.intrinsics.NaN; // 3. Return msFromTime(LocalTime(t)). return new _index.NumberValue(realm, (0, _index2.msFromTime)(realm, (0, _index2.LocalTime)(realm, t))); }); // ECMA262 20.3.4.7 obj.defineNativeMethod("getMinutes", 0, context => { // 1. Let t be ? thisTimeValue(this value). let t = (0, _index2.thisTimeValue)(realm, context).throwIfNotConcreteNumber().value; // 2. If t is NaN, return NaN. if (isNaN(t)) return realm.intrinsics.NaN; // 3. Return MinFromTime(LocalTime(t)). return new _index.NumberValue(realm, (0, _index2.MinFromTime)(realm, (0, _index2.LocalTime)(realm, t))); }); // ECMA262 20.3.4.8 obj.defineNativeMethod("getMonth", 0, context => { // 1. Let t be ? thisTimeValue(this value). let t = (0, _index2.thisTimeValue)(realm, context).throwIfNotConcreteNumber().value; // 2. If t is NaN, return NaN. if (isNaN(t)) return realm.intrinsics.NaN; // 3. Return MonthFromTime(LocalTime(t)). return new _index.NumberValue(realm, (0, _index2.MonthFromTime)(realm, (0, _index2.LocalTime)(realm, t))); }); // ECMA262 20.3.4.9 obj.defineNativeMethod("getSeconds", 0, context => { // 1. Let t be ? thisTimeValue(this value). let t = (0, _index2.thisTimeValue)(realm, context).throwIfNotConcreteNumber().value; // 2. If t is NaN, return NaN. if (isNaN(t)) return realm.intrinsics.NaN; // 3. Return SecFromTime(LocalTime(t)). return new _index.NumberValue(realm, (0, _index2.SecFromTime)(realm, (0, _index2.LocalTime)(realm, t))); }); // ECMA262 20.3.4.10 obj.defineNativeMethod("getTime", 0, context => { // 1. Return ? thisTimeValue(this value). return (0, _index2.thisTimeValue)(realm, context); }); // ECMA262 20.3.4.11 obj.defineNativeMethod("getTimezoneOffset", 0, context => { // 1. Let t be ? thisTimeValue(this value). let t = (0, _index2.thisTimeValue)(realm, context).throwIfNotConcreteNumber().value; // 2. If t is NaN, return NaN. if (isNaN(t)) return realm.intrinsics.NaN; // 3. Return (t - LocalTime(t)) / msPerMinute. return new _index.NumberValue(realm, (t - (0, _index2.LocalTime)(realm, t)) / _index2.msPerMinute); }); // ECMA262 20.3.4.12 obj.defineNativeMethod("getUTCDate", 0, context => { // 1. Let t be ? thisTimeValue(this value). let t = (0, _index2.thisTimeValue)(realm, context).throwIfNotConcreteNumber().value; // 2. If t is NaN, return NaN. if (isNaN(t)) return realm.intrinsics.NaN; // 3. Return DateFromTime(t). return new _index.NumberValue(realm, (0, _index2.DateFromTime)(realm, t)); }); // ECMA262 20.3.4.13 obj.defineNativeMethod("getUTCDay", 0, context => { // 1. Let t be ? thisTimeValue(this value). let t = (0, _index2.thisTimeValue)(realm, context).throwIfNotConcreteNumber().value; // 2. If t is NaN, return NaN. if (isNaN(t)) return realm.intrinsics.NaN; // 3. Return WeekDay(t). return new _index.NumberValue(realm, (0, _index2.WeekDay)(realm, t)); }); // ECMA262 20.3.4.14 obj.defineNativeMethod("getUTCFullYear", 0, context => { // 1. Let t be ? thisTimeValue(this value). let t = (0, _index2.thisTimeValue)(realm, context).throwIfNotConcreteNumber().value; // 2. If t is NaN, return NaN. if (isNaN(t)) return realm.intrinsics.NaN; // 3. Return YearFromTime(t). return new _index.NumberValue(realm, (0, _index2.YearFromTime)(realm, t)); }); // ECMA262 20.3.4.15 obj.defineNativeMethod("getUTCHours", 0, context => { // 1. Let t be ? thisTimeValue(this value). let t = (0, _index2.thisTimeValue)(realm, context).throwIfNotConcreteNumber().value; // 2. If t is NaN, return NaN. if (isNaN(t)) return realm.intrinsics.NaN; // 3. Return HourFromTime(t). return new _index.NumberValue(realm, (0, _index2.HourFromTime)(realm, t)); }); // ECMA262 20.3.4.16 obj.defineNativeMethod("getUTCMilliseconds", 0, context => { // 1. Let t be ? thisTimeValue(this value). let t = (0, _index2.thisTimeValue)(realm, context).throwIfNotConcreteNumber().value; // 2. If t is NaN, return NaN. if (isNaN(t)) return realm.intrinsics.NaN; // 3. Return msFromTime(t). return new _index.NumberValue(realm, (0, _index2.msFromTime)(realm, t)); }); // ECMA262 20.3.4.17 obj.defineNativeMethod("getUTCMinutes", 0, context => { // 1. Let t be ? thisTimeValue(this value). let t = (0, _index2.thisTimeValue)(realm, context).throwIfNotConcreteNumber().value; // 2. If t is NaN, return NaN. if (isNaN(t)) return realm.intrinsics.NaN; // 3. Return MinFromTime(t). return new _index.NumberValue(realm, (0, _index2.MinFromTime)(realm, t)); }); // ECMA262 20.3.4.18 obj.defineNativeMethod("getUTCMonth", 0, context => { // 1. Let t be ? thisTimeValue(this value). let t = (0, _index2.thisTimeValue)(realm, context).throwIfNotConcreteNumber().value; // 2. If t is NaN, return NaN. if (isNaN(t)) return realm.intrinsics.NaN; // 3. Return MonthFromTime(t). return new _index.NumberValue(realm, (0, _index2.MonthFromTime)(realm, t)); }); // ECMA262 20.3.4.19 obj.defineNativeMethod("getUTCSeconds", 0, context => { // 1. Let t be ? thisTimeValue(this value). let t = (0, _index2.thisTimeValue)(realm, context).throwIfNotConcreteNumber().value; (0, _invariant.default)(context instanceof _index.ObjectValue); // 2. If t is NaN, return NaN. if (isNaN(t)) return realm.intrinsics.NaN; // 3. Return SecFromTime(t). return new _index.NumberValue(realm, (0, _index2.SecFromTime)(realm, t)); }); // ECMA262 20.3.4.20 obj.defineNativeMethod("setDate", 1, (context, [date]) => { // 1. Let t be LocalTime(? thisTimeValue(this value)). let t = (0, _index2.LocalTime)(realm, (0, _index2.thisTimeValue)(realm, context).throwIfNotConcreteNumber().value); (0, _invariant.default)(context instanceof _index.ObjectValue); // 2. Let dt be ? ToNumber(date). let dt = _singletons.To.ToNumber(realm, date); // 3. Let newDate be MakeDate(MakeDay(YearFromTime(t), MonthFromTime(t), dt), TimeWithinDay(t)). let newDate = (0, _index2.MakeDate)(realm, (0, _index2.MakeDay)(realm, (0, _index2.YearFromTime)(realm, t), (0, _index2.MonthFromTime)(realm, t), dt), (0, _index2.TimeWithinDay)(realm, t)); // 4. Let u be TimeClip(UTC(newDate)). let u = (0, _index2.TimeClip)(realm, (0, _index2.UTC)(realm, newDate)); // 5. Set the [[DateValue]] internal slot of this Date object to u. context.$DateValue = u; // 6. Return u. return u; }); // ECMA262 20.3.4.21 obj.defineNativeMethod("setFullYear", 3, (context, [year, month, date], argCount) => { // 1. Let t be ? thisTimeValue(this value). let t = (0, _index2.thisTimeValue)(realm, context).throwIfNotConcreteNumber().value; (0, _invariant.default)(context instanceof _index.ObjectValue); // 2. If t is NaN, let t be +0; otherwise, let t be LocalTime(t). t = isNaN(t) ? +0 : (0, _index2.LocalTime)(realm, t); // 3. Let y be ? ToNumber(year). let y = _singletons.To.ToNumber(realm, year); // 4. If month is not specified, let m be MonthFromTime(t); otherwise, let m be ? ToNumber(month). let m = argCount >= 2 ? _singletons.To.ToNumber(realm, month) : (0, _index2.MonthFromTime)(realm, t); // 5. If date is not specified, let dt be DateFromTime(t); otherwise, let dt be ? ToNumber(date). let dt = argCount >= 3 ? _singletons.To.ToNumber(realm, date) : (0, _index2.DateFromTime)(realm, t); // 6. Let newDate be MakeDate(MakeDay(y, m, dt), TimeWithinDay(t)). let newDate = (0, _index2.MakeDate)(realm, (0, _index2.MakeDay)(realm, y, m, dt), (0, _index2.TimeWithinDay)(realm, t)); // 7. Let u be TimeClip(UTC(newDate)). let u = (0, _index2.TimeClip)(realm, (0, _index2.UTC)(realm, newDate)); // 8. Set the [[DateValue]] internal slot of this Date object to u. context.$DateValue = u; // 9. Return u. return u; }); // ECMA262 20.3.4.22 obj.defineNativeMethod("setHours", 4, (context, [hour, min, sec, ms], argCount) => { // 1. Let t be LocalTime(? thisTimeValue(this value)). let t = (0, _index2.LocalTime)(realm, (0, _index2.thisTimeValue)(realm, context).throwIfNotConcreteNumber().value); (0, _invariant.default)(context instanceof _index.ObjectValue); // 2. Let h be ? ToNumber(hour). let h = _singletons.To.ToNumber(realm, hour); // 3. If min is not specified, let m be MinFromTime(t); otherwise, let m be ? ToNumber(min). let m = argCount >= 2 ? _singletons.To.ToNumber(realm, min) : (0, _index2.MinFromTime)(realm, t); // 4. If sec is not specified, let s be SecFromTime(t); otherwise, let s be ? ToNumber(sec). let s = argCount >= 3 ? _singletons.To.ToNumber(realm, sec) : (0, _index2.SecFromTime)(realm, t); // 5. If ms is not specified, let milli be msFromTime(t); otherwise, let milli be ? ToNumber(ms). let milli = argCount >= 4 ? _singletons.To.ToNumber(realm, ms) : (0, _index2.msFromTime)(realm, t); // 6. Let date be MakeDate(Day(t), MakeTime(h, m, s, milli)). let date = (0, _index2.MakeDate)(realm, (0, _index2.Day)(realm, t), (0, _index2.MakeTime)(realm, h, m, s, milli)); // 7. Let u be TimeClip(UTC(date)). let u = (0, _index2.TimeClip)(realm, (0, _index2.UTC)(realm, date)); // 8. Set the [[DateValue]] internal slot of this Date object to u. context.$DateValue = u; // 9. Return u. return u; }); // ECMA262 20.3.4.23 obj.defineNativeMethod("setMilliseconds", 1, (context, [_ms]) => { let ms = _ms; // 1. Let t be LocalTime(? thisTimeValue(this value)). let t = (0, _index2.LocalTime)(realm, (0, _index2.thisTimeValue)(realm, context).throwIfNotConcreteNumber().value); (0, _invariant.default)(context instanceof _index.ObjectValue); // 2. Let ms be ? ToNumber(ms). ms = _singletons.To.ToNumber(realm, ms); // 3. Let time be MakeTime(HourFromTime(t), MinFromTime(t), SecFromTime(t), ms). let time = (0, _index2.MakeTime)(realm, (0, _index2.HourFromTime)(realm, t), (0, _index2.MinFromTime)(realm, t), (0, _index2.SecFromTime)(realm, t), ms); // 4. Let u be TimeClip(UTC(MakeDate(Day(t), time))). let u = (0, _index2.TimeClip)(realm, (0, _index2.UTC)(realm, (0, _index2.MakeDate)(realm, (0, _index2.Day)(realm, t), time))); // 5. Set the [[DateValue]] internal slot of this Date object to u. context.$DateValue = u; // 6. Return u. return u; }); // ECMA262 20.3.4.24 obj.defineNativeMethod("setMinutes", 3, (context, [min, sec, ms], argCount) => { // 1. Let t be LocalTime(? thisTimeValue(this value)). let t = (0, _index2.LocalTime)(realm, (0, _index2.thisTimeValue)(realm, context).throwIfNotConcreteNumber().value); (0, _invariant.default)(context instanceof _index.ObjectValue); // 2. Let m be ? ToNumber(min). let m = _singletons.To.ToNumber(realm, min); // 3. If sec is not specified, let s be SecFromTime(t); otherwise, let s be ? ToNumber(sec). let s = argCount >= 2 ? _singletons.To.ToNumber(realm, sec) : (0, _index2.SecFromTime)(realm, t); // 4. If ms is not specified, let milli be msFromTime(t); otherwise, let milli be ? ToNumber(ms). let milli = argCount >= 3 ? _singletons.To.ToNumber(realm, ms) : (0, _index2.msFromTime)(realm, t); // 5. Let date be MakeDate(Day(t), MakeTime(HourFromTime(t), m, s, milli)). let date = (0, _index2.MakeDate)(realm, (0, _index2.Day)(realm, t), (0, _index2.MakeTime)(realm, (0, _index2.HourFromTime)(realm, t), m, s, milli)); // 6. Let u be TimeClip(UTC(date)). let u = (0, _index2.TimeClip)(realm, (0, _index2.UTC)(realm, date)); // 7. Set the [[DateValue]] internal slot of this Date object to u. context.$DateValue = u; // 8. Return u. return u; }); // ECMA262 20.3.4.25 obj.defineNativeMethod("setMonth", 2, (context, [month, date], argCount) => { // 1. Let t be LocalTime(? thisTimeValue(this value)). let t = (0, _index2.LocalTime)(realm, (0, _index2.thisTimeValue)(realm, context).throwIfNotConcreteNumber().value); (0, _invariant.default)(context instanceof _index.ObjectValue); // 2. Let m be ? ToNumber(month). let m = _singletons.To.ToNumber(realm, month); // 3. If date is not specified, let dt be DateFromTime(t); otherwise, let dt be ? ToNumber(date). let dt = argCount >= 2 ? _singletons.To.ToNumber(realm, date) : (0, _index2.DateFromTime)(realm, t); // 4. Let newDate be MakeDate(MakeDay(YearFromTime(t), m, dt), TimeWithinDay(t)). let newDate = (0, _index2.MakeDate)(realm, (0, _index2.MakeDay)(realm, (0, _index2.YearFromTime)(realm, t), m, dt), (0, _index2.TimeWithinDay)(realm, t)); // 5. Let u be TimeClip(UTC(newDate)). let u = (0, _index2.TimeClip)(realm, (0, _index2.UTC)(realm, newDate)); // 6. Set the [[DateValue]] internal slot of this Date object to u. context.$DateValue = u; // 7. Return u. return u; }); // ECMA262 20.3.4.26 obj.defineNativeMethod("setSeconds", 2, (context, [sec, ms], argCount) => { // 1. Let t be LocalTime(? thisTimeValue(this value)). let t = (0, _index2.LocalTime)(realm, (0, _index2.thisTimeValue)(realm, context).throwIfNotConcreteNumber().value); (0, _invariant.default)(context instanceof _index.ObjectValue); // 2. Let s be ? ToNumber(sec). let s = _singletons.To.ToNumber(realm, sec); // 3. If ms is not specified, let milli be msFromTime(t); otherwise, let milli be ? ToNumber(ms). let milli = argCount >= 2 ? _singletons.To.ToNumber(realm, ms) : (0, _index2.msFromTime)(realm, t); // 4. Let date be MakeDate(Day(t), MakeTime(HourFromTime(t), MinFromTime(t), s, milli)). let date = (0, _index2.MakeDate)(realm, (0, _index2.Day)(realm, t), (0, _index2.MakeTime)(realm, (0, _index2.HourFromTime)(realm, t), (0, _index2.MinFromTime)(realm, t), s, milli)); // 5. Let u be TimeClip(UTC(date)). let u = (0, _index2.TimeClip)(realm, (0, _index2.UTC)(realm, date)); // 6. Set the [[DateValue]] internal slot of this Date object to u. context.$DateValue = u; // 7. Return u. return u; }); // ECMA262 20.3.4.27 obj.defineNativeMethod("setTime", 1, (context, [time]) => { // 1. Perform ? thisTimeValue(this value). (0, _index2.thisTimeValue)(realm, context); (0, _invariant.default)(context instanceof _index.ObjectValue); // 2. Let t be ? ToNumber(time). let t = _singletons.To.ToNumber(realm, time); // 3. Let v be TimeClip(t). let v = (0, _index2.TimeClip)(realm, t); // 4. Set the [[DateValue]] internal slot of this Date object to v. context.$DateValue = v; // 5. Return v. return v; }); // ECMA262 20.3.4.28 obj.defineNativeMethod("setUTCDate", 1, (context, [date]) => { // 1. Let t be ? thisTimeValue(this value). let t = (0, _index2.thisTimeValue)(realm, context).throwIfNotConcreteNumber().value; (0, _invariant.default)(context instanceof _index.ObjectValue); // 2. Let dt be ? ToNumber(date). let dt = _singletons.To.ToNumber(realm, date); // 3. Let newDate be MakeDate(MakeDay(YearFromTime(t), MonthFromTime(t), dt), TimeWithinDay(t)). let newDate = (0, _index2.MakeDate)(realm, (0, _index2.MakeDay)(realm, (0, _index2.YearFromTime)(realm, t), (0, _index2.MonthFromTime)(realm, t), dt), (0, _index2.TimeWithinDay)(realm, t)); // 4. Let v be TimeClip(newDate). let v = (0, _index2.TimeClip)(realm, newDate); // 5. Set the [[DateValue]] internal slot of this Date object to v. context.$DateValue = v; // 6. Return v. return v; }); // ECMA262 20.3.4.29 obj.defineNativeMethod("setUTCFullYear", 3, (context, [year, month, date], argCount) => { // 1. Let t be ? thisTimeValue(this value). let t = (0, _index2.thisTimeValue)(realm, context).throwIfNotConcreteNumber().value; (0, _invariant.default)(context instanceof _index.ObjectValue); // 2. If t is NaN, let t be +0. if (isNaN(t)) t = +0; // 3. Let y be ? ToNumber(year). let y = _singletons.To.ToNumber(realm, year); // 4. If month is not specified, let m be MonthFromTime(t); otherwise, let m be ? ToNumber(month). let m = argCount >= 2 ? _singletons.To.ToNumber(realm, month) : (0, _index2.MonthFromTime)(realm, t); // 5. If date is not specified, let dt be DateFromTime(t); otherwise, let dt be ? ToNumber(date). let dt = argCount >= 3 ? _singletons.To.ToNumber(realm, date) : (0, _index2.DateFromTime)(realm, t); // 6. Let newDate be MakeDate(MakeDay(y, m, dt), TimeWithinDay(t)). let newDate = (0, _index2.MakeDate)(realm, (0, _index2.MakeDay)(realm, y, m, dt), (0, _index2.TimeWithinDay)(realm, t)); // 7. Let v be TimeClip(newDate). let v = (0, _index2.TimeClip)(realm, newDate); // 8. Set the [[DateValue]] internal slot of this Date object to v. context.$DateValue = v; // 9. Return v. return v; }); // ECMA262 20.3.4.30 obj.defineNativeMethod("setUTCHours", 4, (context, [hour, min, sec, ms], argCount) => { // 1. Let t be ? thisTimeValue(this value). let t = (0, _index2.thisTimeValue)(realm, context).throwIfNotConcreteNumber().value; (0, _invariant.default)(context instanceof _index.ObjectValue); // 2. Let h be ? ToNumber(hour). let h = _singletons.To.ToNumber(realm, hour); // 3. If min is not specified, let m be MinFromTime(t); otherwise, let m be ? ToNumber(min). let m = argCount >= 2 ? _singletons.To.ToNumber(realm, min) : (0, _index2.MinFromTime)(realm, t); // 4. If sec is not specified, let s be SecFromTime(t); otherwise, let s be ? ToNumber(sec). let s = argCount >= 3 ? _singletons.To.ToNumber(realm, sec) : (0, _index2.SecFromTime)(realm, t); // 5. If ms is not specified, let milli be msFromTime(t); otherwise, let milli be ? ToNumber(ms). let milli = argCount >= 4 ? _singletons.To.ToNumber(realm, ms) : (0, _index2.msFromTime)(realm, t); // 6. Let newDate be MakeDate(Day(t), MakeTime(h, m, s, milli)). let newDate = (0, _index2.MakeDate)(realm, (0, _index2.Day)(realm, t), (0, _index2.MakeTime)(realm, h, m, s, milli)); // 7. Let v be TimeClip(newDate). let v = (0, _index2.TimeClip)(realm, newDate); // 8. Set the [[DateValue]] internal slot of this Date object to v. context.$DateValue = v; // 9. Return v. return v; }); // ECMA262 20.3.4.31 obj.defineNativeMethod("setUTCMilliseconds", 1, (context, [ms]) => { // 1. Let t be ? thisTimeValue(this value). let t = (0, _index2.thisTimeValue)(realm, context).throwIfNotConcreteNumber().value; (0, _invariant.default)(context instanceof _index.ObjectValue); // 2. Let milli be ? ToNumber(ms). let milli = _singletons.To.ToNumber(realm, ms); // 3. Let time be MakeTime(HourFromTime(t), MinFromTime(t), SecFromTime(t), milli). let time = (0, _index2.MakeTime)(realm, (0, _index2.HourFromTime)(realm, t), (0, _index2.MinFromTime)(realm, t), (0, _index2.SecFromTime)(realm, t), milli); // 4. Let v be TimeClip(MakeDate(Day(t), time)). let v = (0, _index2.TimeClip)(realm, (0, _index2.MakeDate)(realm, (0, _index2.Day)(realm, t), time)); // 5. Set the [[DateValue]] internal slot of this Date object to v. context.$DateValue = v; // 6. Return v. return v; }); // ECMA262 20.3.4.32 obj.defineNativeMethod("setUTCMinutes", 3, (context, [min, sec, ms], argCount) => { // 1. Let t be ? thisTimeValue(this value). let t = (0, _index2.thisTimeValue)(realm, context).throwIfNotConcreteNumber().value; (0, _invariant.default)(context instanceof _index.ObjectValue); // 2. Let m be ? ToNumber(min). let m = _singletons.To.ToNumber(realm, min); // 3. If sec is not specified, let s be SecFromTime(t). let s; if (argCount < 2) { s = (0, _index2.SecFromTime)(realm, t); } else { // 4. Else, // a. Let s be ? ToNumber(sec). s = _singletons.To.ToNumber(realm, sec); } // 5. If ms is not specified, let milli be msFromTime(t). let milli; if (argCount < 3) { milli = (0, _index2.msFromTime)(realm, t); } else { // 6. Else, // a. Let milli be ? ToNumber(ms). milli = _singletons.To.ToNumber(realm, ms); } // 7. Let date be MakeDate(Day(t), MakeTime(HourFromTime(t), m, s, milli)). let date = (0, _index2.MakeDate)(realm, (0, _index2.Day)(realm, t), (0, _index2.MakeTime)(realm, (0, _index2.HourFromTime)(realm, t), m, s, milli)); // 8. Let v be TimeClip(date). let v = (0, _index2.TimeClip)(realm, date); // 9. Set the [[DateValue]] internal slot of this Date object to v. context.$DateValue = v; // 10. Return v. return v; }); // ECMA262 20.3.4.33 obj.defineNativeMethod("setUTCMonth", 2, (context, [month, date], argCount) => { // 1. Let t be ? thisTimeValue(this value). let t = (0, _index2.thisTimeValue)(realm, context).throwIfNotConcreteNumber().value; (0, _invariant.default)(context instanceof _index.ObjectValue); // 2. Let m be ? ToNumber(month). let m = _singletons.To.ToNumber(realm, month); // 3. If date is not specified, let dt be DateFromTime(t). let dt; if (argCount < 2) { dt = (0, _index2.DateFromTime)(realm, t); } else { // 4. Else, // a. Let dt be ? ToNumber(date). dt = _singletons.To.ToNumber(realm, date); } // 5. Let newDate be MakeDate(MakeDay(YearFromTime(t), m, dt), TimeWithinDay(t)). let newDate = (0, _index2.MakeDate)(realm, (0, _index2.MakeDay)(realm, (0, _index2.YearFromTime)(realm, t), m, dt), (0, _index2.TimeWithinDay)(realm, t)); // 6. Let v be TimeClip(newDate). let v = (0, _index2.TimeClip)(realm, newDate); // 7. Set the [[DateValue]] internal slot of this Date object to v. context.$DateValue = v; // 8. Return v. return v; }); // ECMA262 20.3.4.34 obj.defineNativeMethod("setUTCSeconds", 2, (context, [sec, ms], argCount) => { // 1. Let t be ? thisTimeValue(this value). let t = (0, _index2.thisTimeValue)(realm, context).throwIfNotConcreteNumber().value; (0, _invariant.default)(context instanceof _index.ObjectValue); // 2. Let s be ? ToNumber(sec). let s = _singletons.To.ToNumber(realm, sec); // 3. If ms is not specified, let milli be msFromTime(t). let milli; if (argCount < 2) { milli = (0, _index2.msFromTime)(realm, t); } else { // 4. Else, // a. Let milli be ? ToNumber(ms). milli = _singletons.To.ToNumber(realm, ms); } // 5. Let date be MakeDate(Day(t), MakeTime(HourFromTime(t), MinFromTime(t), s, milli)). let date = (0, _index2.MakeDate)(realm, (0, _index2.Day)(realm, t), (0, _index2.MakeTime)(realm, (0, _index2.HourFromTime)(realm, t), (0, _index2.MinFromTime)(realm, t), s, milli)); // 6. Let v be TimeClip(date). let v = (0, _index2.TimeClip)(realm, date); // 7. Set the [[DateValue]] internal slot of this Date object to v. context.$DateValue = v; // 8. Return v. return v; }); // ECMA262 20.3.4.35 obj.defineNativeMethod("toDateString", 0, context => { throw new _errors.FatalError("TODO #1005: implement Date.prototype.toDateString"); }); // ECMA262 20.3.4.36 obj.defineNativeMethod("toISOString", 0, context => { let t = (0, _index2.thisTimeValue)(realm, context).throwIfNotConcreteNumber().value; if (!isFinite(t)) { throw realm.createErrorThrowCompletion(realm.intrinsics.RangeError); } return new _index.StringValue(realm, new Date(t).toISOString()); }); // ECMA262 20.3.4.37 obj.defineNativeMethod("toJSON", 1, (context, [key]) => { // 1. Let O be ? ToObject(this value). let O = _singletons.To.ToObject(realm, context); // 2. Let tv be ? ToPrimitive(O, hint Number). let tv = _singletons.To.ToPrimitive(realm, O.throwIfNotConcreteObject(), "number"); // 3. If Type(tv) is Number and tv is not finite, return null. if (tv instanceof _index.NumberValue && !isFinite(tv.value)) { return realm.intrinsics.null; } // 4. Return ? Invoke(O, "toISOString"). return (0, _index2.Invoke)(realm, O, "toISOString"); }); // ECMA262 20.3.4.38 obj.defineNativeMethod("toLocaleDateString", 0, context => { throw new _errors.FatalError("TODO #1005: implement Date.prototype.toLocaleDateString"); }); // ECMA262 20.3.4.39 obj.defineNativeMethod("toLocaleString", 0, context => { throw new _errors.FatalError("TODO #1005: implement Date.prototype.toLocaleString"); }); // ECMA262 20.3.4.40 obj.defineNativeMethod("toLocaleTimeString", 0, context => { throw new _errors.FatalError("TODO #1005: implement Date.prototype.toLocaleTimeString"); }); // ECMA262 20.3.4.41 obj.defineNativeMethod("toString", 0, context => { // 1. Let O be this Date object. let O = context; // 2. If O does not have a [[DateValue]] internal slot, then let tv; if (O.$DateValue === undefined) { // a. Let tv be NaN. tv = NaN; } else { // 3. Else, // a. Let tv be thisTimeValue(O). tv = (0, _index2.thisTimeValue)(realm, O).throwIfNotConcreteNumber().value; } // 4. Return ToDateString(tv). return new _index.StringValue(realm, (0, _index2.ToDateString)(realm, tv)); }); // ECMA262 20.3.4.42 obj.defineNativeMethod("toTimeString", 0, context => { throw new _errors.FatalError("TODO #1005: implement Date.prototype.toTimeString"); }); // ECMA262 20.3.4.43 obj.defineNativeMethod("toUTCString", 0, context => { throw new _errors.FatalError("TODO #1005: implement Date.prototype.toUTCString"); }); // ECMA262 20.3.4.44 obj.defineNativeMethod("valueOf", 0, context => { // 1. Return ? thisTimeValue(this value). return (0, _index2.thisTimeValue)(realm, context); }); // ECMA262 20.3.4.45 obj.defineNativeMethod(realm.intrinsics.SymbolToPrimitive, 1, (context, [_hint]) => { let hint = _hint; // 1. Let O be the this value. let O = context.throwIfNotConcrete(); // 2. If Type(O) is not Object, throw a TypeError exception. if (!(O instanceof _index.ObjectValue)) { throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError, "Type(O) is not Object"); } let tryFirst; hint = hint.throwIfNotConcrete(); // 3. If hint is the String value "string" or the String value "default", then if (hint instanceof _index.StringValue && (hint.value === "string" || hint.value === "default")) { // a. Let tryFirst be "string". tryFirst = "string"; } else if (hint instanceof _index.StringValue && hint.value === "number") { // 4. Else if hint is the String value "number", then // a. Let tryFirst be "number". tryFirst = "number"; } else { // 5. Else, throw a TypeError exception. throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError, "Type(O) is not Object"); } // 6. Return ? OrdinaryToPrimitive(O, tryFirst). return _singletons.To.OrdinaryToPrimitive(realm, O, tryFirst); }, { writable: false }); // B.2.4.1 obj.defineNativeMethod("getYear", 0, context => { // 1. Let t be ? thisTimeValue(this value). let t = (0, _index2.thisTimeValue)(realm, context).throwIfNotConcreteNumber().value; // 2. If t is NaN, return NaN. if (isNaN(t)) return realm.intrinsics.NaN; // 3. Return YearFromTime(LocalTime(t)) - 1900. return new _index.NumberValue(realm, (0, _index2.YearFromTime)(realm, (0, _index2.LocalTime)(realm, t)) - 1900); }); // B.2.4.2 obj.defineNativeMethod("setYear", 1, (context, [year]) => { // 1. Let t be ? thisTimeValue(this value). let t = (0, _index2.thisTimeValue)(realm, context).throwIfNotConcreteNumber().value; (0, _invariant.default)(context instanceof _index.ObjectValue); // 2. If t is NaN, let t be +0; otherwise, let t be LocalTime(t). t = isNaN(t) ? +0 : (0, _index2.LocalTime)(realm, t); // 3. Let y be ? ToNumber(year). let y = _singletons.To.ToNumber(realm, year); // 4. If y is NaN, set the [[DateValue]] internal slot of this Date object to NaN and return NaN. if (isNaN(y)) { context.$DateValue = realm.intrinsics.NaN; return realm.intrinsics.NaN; } // 5. If y is not NaN and 0 ≤ To.ToInteger(y) ≤ 99, let yyyy be To.ToInteger(y) + 1900. let yyyy; if (_singletons.To.ToInteger(realm, y) < 99) { yyyy = _singletons.To.ToInteger(realm, y) + 1900; } else { // 6. Else, let yyyy be y. yyyy = y; } // 7. Let d be MakeDay(yyyy, MonthFromTime(t), DateFromTime(t)). let d = (0, _index2.MakeDay)(realm, yyyy, (0, _index2.MonthFromTime)(realm, t), (0, _index2.DateFromTime)(realm, t)); // 8. Let date be UTC(MakeDate(d, TimeWithinDay(t))). let date = (0, _index2.UTC)(realm, (0, _index2.MakeDate)(realm, d, (0, _index2.TimeWithinDay)(realm, t))); // 9. Set the [[DateValue]] internal slot of this Date object to TimeClip(date). let dateValue = (0, _index2.TimeClip)(realm, date); context.$DateValue = dateValue; // 10. Return the value of the [[DateValue]] internal slot of this Date object. return dateValue; }); // B.2.4.3 obj.defineNativeProperty("toGMTString", obj.$Get("toUTCString", obj)); } //# sourceMappingURL=DatePrototype.js.map