first commit
This commit is contained in:
280
build/node_modules/prepack/lib/intrinsics/ecma262/Date.js
generated
vendored
Normal file
280
build/node_modules/prepack/lib/intrinsics/ecma262/Date.js
generated
vendored
Normal file
@@ -0,0 +1,280 @@
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
|
||||
var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); /**
|
||||
* 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.
|
||||
*/
|
||||
|
||||
exports.default = function (realm) {
|
||||
var lastNow = void 0;
|
||||
var offsetGenerator = void 0;
|
||||
function getCurrentTime() {
|
||||
if (realm.useAbstractInterpretation) {
|
||||
return _index.AbstractValue.createTemporalFromTemplate(realm, buildDateNow, _index.NumberValue, [], {
|
||||
isPure: true,
|
||||
skipInvariant: true
|
||||
});
|
||||
} else {
|
||||
var newNow = Date.now();
|
||||
if (realm.strictlyMonotonicDateNow && lastNow >= newNow) {
|
||||
if (!offsetGenerator) offsetGenerator = (0, _seedrandom2.default)(0);
|
||||
// certain behaviors in the test262 test suite can only be (reliably) triggered if Date.now() is strictly monotonically increasing
|
||||
// TODO #1004: Set the strictlyMonotonicDateNow option on the realm in the test262 test runner, fix the issues that will come up in the tests, and remove this comment.
|
||||
newNow = lastNow + 1 + Math.floor(offsetGenerator() * 500);
|
||||
}
|
||||
lastNow = newNow;
|
||||
return new _index.NumberValue(realm, newNow);
|
||||
}
|
||||
}
|
||||
|
||||
// ECMA262 20.3.2
|
||||
var func = new _index.NativeFunctionValue(realm, "Date", "Date", 7, function (context, args, argCount, NewTarget) {
|
||||
if (argCount >= 2) {
|
||||
// ECMA262 20.3.2.1
|
||||
var _args = _slicedToArray(args, 7),
|
||||
year = _args[0],
|
||||
month = _args[1],
|
||||
date = _args[2],
|
||||
hours = _args[3],
|
||||
minutes = _args[4],
|
||||
seconds = _args[5],
|
||||
ms = _args[6];
|
||||
|
||||
// 1. Let numberOfArgs be the number of arguments passed to this function call.
|
||||
|
||||
|
||||
var numberOfArgs = argCount;
|
||||
|
||||
// 2. Assert: numberOfArgs ≥ 2.
|
||||
(0, _invariant2.default)(numberOfArgs >= 2, "expected two or more arguments");
|
||||
|
||||
// 3. If NewTarget is not undefined, then
|
||||
if (NewTarget) {
|
||||
// a. Let y be ? ToNumber(year).
|
||||
var y = _singletons.To.ToNumber(realm, year);
|
||||
|
||||
// b. Let m be ? ToNumber(month).
|
||||
var m = _singletons.To.ToNumber(realm, month);
|
||||
|
||||
// c. If date is supplied, let dt be ? ToNumber(date); else let dt be 1.
|
||||
var dt = argCount >= 3 ? _singletons.To.ToNumber(realm, date) : 1;
|
||||
|
||||
// d. If hours is supplied, let h be ? ToNumber(hours); else let h be 0.
|
||||
var h = argCount >= 4 ? _singletons.To.ToNumber(realm, hours) : 0;
|
||||
|
||||
// e. If minutes is supplied, let min be ? ToNumber(minutes); else let min be 0.
|
||||
var min = argCount >= 5 ? _singletons.To.ToNumber(realm, minutes) : 0;
|
||||
|
||||
// f. If seconds is supplied, let s be ? ToNumber(seconds); else let s be 0.
|
||||
var s = argCount >= 6 ? _singletons.To.ToNumber(realm, seconds) : 0;
|
||||
|
||||
// g. If ms is supplied, let milli be ? ToNumber(ms); else let milli be 0.
|
||||
var milli = argCount >= 7 ? _singletons.To.ToNumber(realm, ms) : 0;
|
||||
|
||||
// h. If y is not NaN and 0 ≤ ToInteger(y) ≤ 99, let yr be 1900+ToInteger(y); otherwise, let yr be y.
|
||||
var yr = void 0;
|
||||
if (!isNaN(y) && _singletons.To.ToInteger(realm, y) >= 0 && _singletons.To.ToInteger(realm, y) <= 99) {
|
||||
yr = 1900 + _singletons.To.ToInteger(realm, new _index.NumberValue(realm, y));
|
||||
} else {
|
||||
yr = y;
|
||||
}
|
||||
|
||||
// i. Let finalDate be MakeDate(MakeDay(yr, m, dt), MakeTime(h, min, s, milli)).
|
||||
var finalDate = (0, _date.MakeDate)(realm, (0, _date.MakeDay)(realm, yr, m, dt), (0, _date.MakeTime)(realm, h, min, s, milli));
|
||||
|
||||
// j. Let O be ? OrdinaryCreateFromConstructor(NewTarget, "%DatePrototype%", « [[DateValue]] »).
|
||||
var O = _singletons.Create.OrdinaryCreateFromConstructor(realm, NewTarget, "DatePrototype", { $DateValue: undefined });
|
||||
|
||||
// k. Set the [[DateValue]] internal slot of O to TimeClip(UTC(finalDate)).
|
||||
O.$DateValue = (0, _date.TimeClip)(realm, (0, _date.UTC)(realm, finalDate));
|
||||
|
||||
// l. Return O.
|
||||
return O;
|
||||
} else {
|
||||
// 4. Else,
|
||||
// a. Let now be the Number that is the time value (UTC) identifying the current time.
|
||||
var now = getCurrentTime().throwIfNotConcreteNumber().value;
|
||||
|
||||
// b. Return ToDateString(now).
|
||||
return new _index.StringValue(realm, (0, _date.ToDateString)(realm, now));
|
||||
}
|
||||
} else if (argCount === 1) {
|
||||
// ECMA262 20.3.2.2
|
||||
var _args2 = _slicedToArray(args, 1),
|
||||
value_ = _args2[0];
|
||||
|
||||
var value = value_.throwIfNotConcrete();
|
||||
|
||||
// 1. Let numberOfArgs be the number of arguments passed to this function call.
|
||||
var _numberOfArgs = argCount;
|
||||
|
||||
// 2. Assert: numberOfArgs = 1.
|
||||
(0, _invariant2.default)(_numberOfArgs === 1, "expected number of arguments to equal 1");
|
||||
|
||||
// 3. If NewTarget is not undefined, then
|
||||
if (NewTarget) {
|
||||
var tv = void 0;
|
||||
|
||||
// a. If Type(value) is Object and value has a [[DateValue]] internal slot, then
|
||||
if (value instanceof _index.ObjectValue && value.$DateValue !== undefined) {
|
||||
// i. Let tv be thisTimeValue(value).
|
||||
tv = (0, _date.thisTimeValue)(realm, value);
|
||||
} else {
|
||||
// b. Else,
|
||||
// i. Let v be ? ToPrimitive(value)
|
||||
var v = _singletons.To.ToPrimitive(realm, value);
|
||||
|
||||
// ii. If Type(v) is String, then
|
||||
if (v instanceof _index.StringValue) {
|
||||
// 1. Let tv be the result of parsing v as a date, in exactly the same manner as for the parse
|
||||
// method (20.3.3.2). If the parse resulted in an abrupt completion, tv is the Completion Record.
|
||||
tv = new _index.NumberValue(realm, new Date(v.value).getTime());
|
||||
|
||||
// 2. ReturnIfAbrupt(tv).
|
||||
} else {
|
||||
// iii. Else,
|
||||
// 1. Let tv be ? ToNumber(v).
|
||||
tv = new _index.NumberValue(realm, _singletons.To.ToNumber(realm, v));
|
||||
}
|
||||
}
|
||||
|
||||
// c. Let O be ? OrdinaryCreateFromConstructor(NewTarget, "%DatePrototype%", « [[DateValue]] »).
|
||||
var _O = _singletons.Create.OrdinaryCreateFromConstructor(realm, NewTarget, "DatePrototype", { $DateValue: undefined });
|
||||
|
||||
// d. Set the [[DateValue]] internal slot of O to TimeClip(tv).
|
||||
_O.$DateValue = (0, _date.TimeClip)(realm, tv);
|
||||
|
||||
// e. Return O.
|
||||
return _O;
|
||||
} else {
|
||||
// 4. Else,
|
||||
// a. Let now be the Number that is the time value (UTC) identifying the current time.
|
||||
var _now = getCurrentTime().throwIfNotConcreteNumber().value;
|
||||
|
||||
// b. Return ToDateString(now).
|
||||
return new _index.StringValue(realm, (0, _date.ToDateString)(realm, _now));
|
||||
}
|
||||
} else {
|
||||
// ECMA262 20.3.2.3
|
||||
|
||||
// 1. Let numberOfArgs be the number of arguments passed to this function call.
|
||||
var _numberOfArgs2 = argCount;
|
||||
|
||||
// 2. Assert: numberOfArgs = 0.
|
||||
(0, _invariant2.default)(_numberOfArgs2 === 0, "expected zero arguments");
|
||||
|
||||
// 3. If NewTarget is not undefined, then
|
||||
if (NewTarget) {
|
||||
// a. Let O be ? OrdinaryCreateFromConstructor(NewTarget, "%DatePrototype%", « [[DateValue]] »).
|
||||
var _O2 = _singletons.Create.OrdinaryCreateFromConstructor(realm, NewTarget, "DatePrototype", { $DateValue: undefined });
|
||||
|
||||
// b. Set the [[DateValue]] internal slot of O to the time value (UTC) identifying the current time.
|
||||
_O2.$DateValue = getCurrentTime();
|
||||
|
||||
// c. Return O.
|
||||
return _O2;
|
||||
} else {
|
||||
// 4. Else,
|
||||
// a. Let now be the Number that is the time value (UTC) identifying the current time.
|
||||
var _now2 = getCurrentTime().throwIfNotConcreteNumber().value;
|
||||
|
||||
// b. Return ToDateString(now).
|
||||
return new _index.StringValue(realm, (0, _date.ToDateString)(realm, _now2));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// ECMA262 20.3.3.1
|
||||
func.defineNativeMethod("now", 0, function (context) {
|
||||
return getCurrentTime();
|
||||
});
|
||||
|
||||
// ECMA262 20.3.3.2
|
||||
func.defineNativeMethod("parse", 1, function (context, _ref) {
|
||||
var _ref2 = _slicedToArray(_ref, 1),
|
||||
string = _ref2[0];
|
||||
|
||||
if (realm.useAbstractInterpretation) {
|
||||
_index.AbstractValue.reportIntrospectionError(string);
|
||||
throw new _errors.FatalError();
|
||||
} else {
|
||||
var parsedDate = Date.parse(string.value);
|
||||
return new _index.NumberValue(realm, parsedDate);
|
||||
}
|
||||
});
|
||||
|
||||
// ECMA262 20.3.3.4
|
||||
func.defineNativeMethod("UTC", 7, function (context, _ref3, argCount) {
|
||||
var _ref4 = _slicedToArray(_ref3, 7),
|
||||
year = _ref4[0],
|
||||
month = _ref4[1],
|
||||
date = _ref4[2],
|
||||
hours = _ref4[3],
|
||||
minutes = _ref4[4],
|
||||
seconds = _ref4[5],
|
||||
ms = _ref4[6];
|
||||
|
||||
// 1. Let y be ? ToNumber(year).
|
||||
var y = _singletons.To.ToNumber(realm, year);
|
||||
|
||||
// 2. Let m be ? ToNumber(month).
|
||||
var m = argCount >= 2 ? _singletons.To.ToNumber(realm, month) : 0;
|
||||
|
||||
// 3. If date is supplied, let dt be ? ToNumber(date); else let dt be 1.
|
||||
var dt = argCount >= 3 ? _singletons.To.ToNumber(realm, date) : 1;
|
||||
|
||||
// 4. If hours is supplied, let h be ? ToNumber(hours); else let h be 0.
|
||||
var h = argCount >= 4 ? _singletons.To.ToNumber(realm, hours) : 0;
|
||||
|
||||
// 5. If minutes is supplied, let min be ? ToNumber(minutes); else let min be 0.
|
||||
var min = argCount >= 5 ? _singletons.To.ToNumber(realm, minutes) : 0;
|
||||
|
||||
// 6. If seconds is supplied, let s be ? ToNumber(seconds); else let s be 0.
|
||||
var s = argCount >= 6 ? _singletons.To.ToNumber(realm, seconds) : 0;
|
||||
|
||||
// 7. If ms is supplied, let milli be ? ToNumber(ms); else let milli be 0.
|
||||
var milli = argCount >= 7 ? _singletons.To.ToNumber(realm, ms) : 0;
|
||||
|
||||
// 8. If y is not NaN and 0 ≤ ToInteger(y) ≤ 99, let yr be 1900+ToInteger(y); otherwise, let yr be y.
|
||||
var yr = !isNaN(y) && _singletons.To.ToInteger(realm, y) >= 0 && _singletons.To.ToInteger(realm, y) <= 99 ? 1900 + _singletons.To.ToInteger(realm, y) : y;
|
||||
|
||||
// 9. Return TimeClip(MakeDate(MakeDay(yr, m, dt), MakeTime(h, min, s, milli))).
|
||||
return (0, _date.TimeClip)(realm, (0, _date.MakeDate)(realm, (0, _date.MakeDay)(realm, yr, m, dt), (0, _date.MakeTime)(realm, h, min, s, milli)));
|
||||
});
|
||||
|
||||
return func;
|
||||
};
|
||||
|
||||
var _index = require("../../values/index.js");
|
||||
|
||||
var _singletons = require("../../singletons.js");
|
||||
|
||||
var _date = require("../../methods/date.js");
|
||||
|
||||
var _errors = require("../../errors.js");
|
||||
|
||||
var _invariant = require("../../invariant.js");
|
||||
|
||||
var _invariant2 = _interopRequireDefault(_invariant);
|
||||
|
||||
var _builder = require("../../utils/builder.js");
|
||||
|
||||
var _builder2 = _interopRequireDefault(_builder);
|
||||
|
||||
var _seedrandom = require("seedrandom");
|
||||
|
||||
var _seedrandom2 = _interopRequireDefault(_seedrandom);
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
var buildDateNowSrc = "global.Date.now()";
|
||||
var buildDateNow = (0, _builder2.default)(buildDateNowSrc);
|
||||
//# sourceMappingURL=Date.js.map
|
||||
Reference in New Issue
Block a user