first commit

This commit is contained in:
s.golasch
2023-08-01 13:49:46 +02:00
commit 1fc239fd54
20238 changed files with 3112246 additions and 0 deletions

View File

@@ -0,0 +1,29 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function (realm) {
var obj = new _index.ObjectValue(realm, realm.intrinsics.ObjectPrototype, "console");
obj.defineNativeMethod("log", 0, function (context, args) {
realm.outputToConsole("log", args);
return realm.intrinsics.undefined;
});
obj.defineNativeMethod("error", 0, function (context, args) {
realm.outputToConsole("error", args);
return realm.intrinsics.undefined;
});
obj.defineNativeMethod("warn", 0, function (context, args) {
realm.outputToConsole("warn", args);
return realm.intrinsics.undefined;
});
return obj;
};
var _index = require("../../values/index.js");
//# sourceMappingURL=console.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../../src/intrinsics/common/console.js"],"names":["realm","obj","intrinsics","ObjectPrototype","defineNativeMethod","context","args","outputToConsole","undefined"],"mappings":";;;;;;kBAce,UAASA,KAAT,EAAoC;AACjD,MAAIC,MAAM,uBAAgBD,KAAhB,EAAuBA,MAAME,UAAN,CAAiBC,eAAxC,EAAyD,SAAzD,CAAV;;AAEAF,MAAIG,kBAAJ,CAAuB,KAAvB,EAA8B,CAA9B,EAAiC,UAACC,OAAD,EAAUC,IAAV,EAAmB;AAClDN,UAAMO,eAAN,CAAsB,KAAtB,EAA6BD,IAA7B;AACA,WAAON,MAAME,UAAN,CAAiBM,SAAxB;AACD,GAHD;;AAKAP,MAAIG,kBAAJ,CAAuB,OAAvB,EAAgC,CAAhC,EAAmC,UAACC,OAAD,EAAUC,IAAV,EAAmB;AACpDN,UAAMO,eAAN,CAAsB,OAAtB,EAA+BD,IAA/B;AACA,WAAON,MAAME,UAAN,CAAiBM,SAAxB;AACD,GAHD;;AAKAP,MAAIG,kBAAJ,CAAuB,MAAvB,EAA+B,CAA/B,EAAkC,UAACC,OAAD,EAAUC,IAAV,EAAmB;AACnDN,UAAMO,eAAN,CAAsB,MAAtB,EAA8BD,IAA9B;AACA,WAAON,MAAME,UAAN,CAAiBM,SAAxB;AACD,GAHD;;AAKA,SAAOP,GAAP;AACD,C;;AArBD","file":"console.js","sourcesContent":["/**\n * Copyright (c) 2017-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n/* @flow */\n\nimport type { Realm } from \"../../realm.js\";\nimport { ObjectValue } from \"../../values/index.js\";\n\nexport default function(realm: Realm): ObjectValue {\n let obj = new ObjectValue(realm, realm.intrinsics.ObjectPrototype, \"console\");\n\n obj.defineNativeMethod(\"log\", 0, (context, args) => {\n realm.outputToConsole(\"log\", args);\n return realm.intrinsics.undefined;\n });\n\n obj.defineNativeMethod(\"error\", 0, (context, args) => {\n realm.outputToConsole(\"error\", args);\n return realm.intrinsics.undefined;\n });\n\n obj.defineNativeMethod(\"warn\", 0, (context, args) => {\n realm.outputToConsole(\"warn\", args);\n return realm.intrinsics.undefined;\n });\n\n return obj;\n}\n"]}

View File

@@ -0,0 +1,73 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function (realm) {
// document object
var document = new _index.ObjectValue(realm, realm.intrinsics.ObjectPrototype, "document", false);
// check if we can use abstracts
if (realm.useAbstractInterpretation) {
// common methods on document
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = functions[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var name = _step.value;
var func = (0, _utils.createAbstract)(realm, "function", "document." + name);
_singletons.Properties.Set(realm, document, name, func, false);
}
// document.body
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
var body = new _index.ObjectValue(realm, realm.intrinsics.ObjectPrototype, "document.body");
_singletons.Properties.Set(realm, document, "body", body, false);
// make abstract
var abstractObject = (0, _utils.createAbstract)(realm, document, "document");
(0, _invariant2.default)(abstractObject instanceof _index.AbstractObjectValue);
return abstractObject;
}
return document;
};
var _index = require("../../values/index.js");
var _utils = require("../prepack/utils.js");
var _singletons = require("../../singletons.js");
var _invariant = require("../../invariant");
var _invariant2 = _interopRequireDefault(_invariant);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var functions = ["getElementById", "getElementByTag", "getElementByClassName", "getElementByName", "getElementByTagName", "getElementByTagNameNS", "querySelector", "querySelectorAll", "createElement", "createDocumentFragment", "createTextNode"]; /**
* 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.
*/
//# sourceMappingURL=document.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../../src/intrinsics/dom/document.js"],"names":["realm","document","intrinsics","ObjectPrototype","useAbstractInterpretation","functions","name","func","Set","body","abstractObject"],"mappings":";;;;;;kBA+Be,UAASA,KAAT,EAA4C;AACzD;AACA,MAAIC,WAAW,uBAAgBD,KAAhB,EAAuBA,MAAME,UAAN,CAAiBC,eAAxC,EAAyD,UAAzD,EAAqE,KAArE,CAAf;;AAEA;AACA,MAAIH,MAAMI,yBAAV,EAAqC;AACnC;AADmC;AAAA;AAAA;;AAAA;AAEnC,2BAAiBC,SAAjB,8HAA4B;AAAA,YAAnBC,IAAmB;;AAC1B,YAAIC,OAAO,2BAAeP,KAAf,EAAsB,UAAtB,gBAA8CM,IAA9C,CAAX;AACA,+BAAWE,GAAX,CAAeR,KAAf,EAAsBC,QAAtB,EAAgCK,IAAhC,EAAsCC,IAAtC,EAA4C,KAA5C;AACD;;AAED;AAPmC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAQnC,QAAIE,OAAO,uBAAgBT,KAAhB,EAAuBA,MAAME,UAAN,CAAiBC,eAAxC,EAAyD,eAAzD,CAAX;AACA,2BAAWK,GAAX,CAAeR,KAAf,EAAsBC,QAAtB,EAAgC,MAAhC,EAAwCQ,IAAxC,EAA8C,KAA9C;;AAEA;AACA,QAAIC,iBAAiB,2BAAeV,KAAf,EAAsBC,QAAtB,EAAgC,UAAhC,CAArB;AACA,6BAAUS,oDAAV;AACA,WAAOA,cAAP;AACD;AACD,SAAOT,QAAP;AACD,C;;AAzCD;;AACA;;AACA;;AACA;;;;;;AAEA,IAAMI,YAAY,CAChB,gBADgB,EAEhB,iBAFgB,EAGhB,uBAHgB,EAIhB,kBAJgB,EAKhB,qBALgB,EAMhB,uBANgB,EAOhB,eAPgB,EAQhB,kBARgB,EAShB,eATgB,EAUhB,wBAVgB,EAWhB,gBAXgB,CAAlB,C,CAjBA","file":"document.js","sourcesContent":["/**\n * Copyright (c) 2017-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n/* @flow */\n\nimport type { Realm } from \"../../realm.js\";\nimport { ObjectValue, AbstractObjectValue } from \"../../values/index.js\";\nimport { createAbstract } from \"../prepack/utils.js\";\nimport { Properties } from \"../../singletons.js\";\nimport invariant from \"../../invariant\";\n\nconst functions = [\n \"getElementById\",\n \"getElementByTag\",\n \"getElementByClassName\",\n \"getElementByName\",\n \"getElementByTagName\",\n \"getElementByTagNameNS\",\n \"querySelector\",\n \"querySelectorAll\",\n \"createElement\",\n \"createDocumentFragment\",\n \"createTextNode\",\n];\n\nexport default function(realm: Realm): AbstractObjectValue {\n // document object\n let document = new ObjectValue(realm, realm.intrinsics.ObjectPrototype, \"document\", false);\n\n // check if we can use abstracts\n if (realm.useAbstractInterpretation) {\n // common methods on document\n for (let name of functions) {\n let func = createAbstract(realm, \"function\", `document.${name}`);\n Properties.Set(realm, document, name, func, false);\n }\n\n // document.body\n let body = new ObjectValue(realm, realm.intrinsics.ObjectPrototype, \"document.body\");\n Properties.Set(realm, document, \"body\", body, false);\n\n // make abstract\n let abstractObject = createAbstract(realm, document, \"document\");\n invariant(abstractObject instanceof AbstractObjectValue);\n return abstractObject;\n }\n return document;\n}\n"]}

120
build/node_modules/prepack/lib/intrinsics/dom/global.js generated vendored Normal file
View File

@@ -0,0 +1,120 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function (realm) {
var global = realm.$GlobalObject;
global.$DefineOwnProperty("console", {
value: (0, _console2.default)(realm),
writable: true,
enumerable: false,
configurable: true
});
global.$DefineOwnProperty("self", {
value: global,
writable: true,
enumerable: true,
configurable: true
});
global.$DefineOwnProperty("window", {
value: global,
writable: true,
enumerable: true,
configurable: true
});
global.$DefineOwnProperty("document", {
value: (0, _document2.default)(realm),
writable: true,
enumerable: false,
configurable: true
});
global.$DefineOwnProperty("setTimeout", {
value: new _index.NativeFunctionValue(realm, "global.setTimeout", "", 2, function (context, args) {
var callback = args[0].throwIfNotConcrete();
if (!(callback instanceof _index.FunctionValue)) throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError, "callback arguments must be function");
if (!realm.useAbstractInterpretation) throw new _errors.FatalError("TODO #1003: implement global.setTimeout");
(0, _invariant2.default)(realm.generator !== undefined);
var generator = realm.generator;
return generator.emitCallAndCaptureResult(_index2.TypesDomain.topVal, _index2.ValuesDomain.topVal, function () {
return generator.preludeGenerator.memoizeReference("global.setTimeout");
}, args);
}),
writable: true,
enumerable: true,
configurable: true
});
global.$DefineOwnProperty("clearTimeout", {
value: new _index.NativeFunctionValue(realm, "global.clearTimeout", "", 2, function (context, args) {
if (!realm.useAbstractInterpretation) throw new _errors.FatalError("TODO #1003: implement global.clearTimeout");
(0, _invariant2.default)(realm.generator !== undefined);
var generator = realm.generator;
generator.emitCall(function () {
return generator.preludeGenerator.memoizeReference("global.clearTimeout");
}, args);
return realm.intrinsics.undefined;
}),
writable: true,
enumerable: true,
configurable: true
});
global.$DefineOwnProperty("setInterval", {
value: new _index.NativeFunctionValue(realm, "global.setInterval", "", 2, function (context, args) {
if (!realm.useAbstractInterpretation) throw new _errors.FatalError("TODO #1003: implement global.setInterval");
var callback = args[0].throwIfNotConcrete();
if (!(callback instanceof _index.FunctionValue)) throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError, "callback arguments must be function");
(0, _invariant2.default)(realm.generator !== undefined);
var generator = realm.generator;
return generator.emitCallAndCaptureResult(_index2.TypesDomain.topVal, _index2.ValuesDomain.topVal, function () {
return generator.preludeGenerator.memoizeReference("global.setInterval");
}, args);
}),
writable: true,
enumerable: true,
configurable: true
});
global.$DefineOwnProperty("clearInterval", {
value: new _index.NativeFunctionValue(realm, "global.clearInterval", "", 2, function (context, args) {
if (!realm.useAbstractInterpretation) throw new _errors.FatalError("TODO #1003: implement global.clearInterval");
(0, _invariant2.default)(realm.generator !== undefined);
var generator = realm.generator;
generator.emitCall(function () {
return generator.preludeGenerator.memoizeReference("global.clearInterval");
}, args);
return realm.intrinsics.undefined;
}),
writable: true,
enumerable: true,
configurable: true
});
};
var _index = require("../../values/index.js");
var _document = require("./document.js");
var _document2 = _interopRequireDefault(_document);
var _console = require("../common/console.js");
var _console2 = _interopRequireDefault(_console);
var _errors = require("../../errors.js");
var _invariant = require("../../invariant.js");
var _invariant2 = _interopRequireDefault(_invariant);
var _index2 = require("../../domains/index.js");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
//# sourceMappingURL=global.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,2 @@
"use strict";
//# sourceMappingURL=setInterval.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":[],"names":[],"mappings":"","file":"setInterval.js","sourcesContent":[]}

View File

@@ -0,0 +1,2 @@
"use strict";
//# sourceMappingURL=setTimeout.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":[],"names":[],"mappings":"","file":"setTimeout.js","sourcesContent":[]}

View File

@@ -0,0 +1,400 @@
"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"); } }; }();
exports.default = function (realm) {
var func = new _index.NativeFunctionValue(realm, "Array", "Array", 1, function (context, _ref, argCount, NewTarget) {
var _ref2 = _toArray(_ref),
items = _ref2.slice(0);
if (argCount === 0) {
// 1. Let numberOfArgs be the number of arguments passed to this function call.
var numberOfArgs = argCount;
// 2. Assert: numberOfArgs = 0.
(0, _invariant2.default)(numberOfArgs === 0, "numberOfArgs = 0");
// 3. If NewTarget is undefined, let newTarget be the active function object, else let newTarget be NewTarget.
var newTarget = NewTarget === undefined ? func : NewTarget;
// 4. Let proto be ? GetPrototypeFromConstructor(newTarget, "%ArrayPrototype%").
var proto = (0, _index2.GetPrototypeFromConstructor)(realm, newTarget, "ArrayPrototype");
// 5. Return ArrayCreate(0, proto).
return _singletons.Create.ArrayCreate(realm, 0, proto);
} else if (argCount === 1) {
// 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, "numberOfArgs = 1");
// 3. If NewTarget is undefined, let newTarget be the active function object, else let newTarget be NewTarget.
var _newTarget = NewTarget === undefined ? func : NewTarget;
// 4. Let proto be ? GetPrototypeFromConstructor(newTarget, "%ArrayPrototype%").
var _proto = (0, _index2.GetPrototypeFromConstructor)(realm, _newTarget, "ArrayPrototype");
// 5. Let array be ArrayCreate(0, proto).
var array = _singletons.Create.ArrayCreate(realm, 0, _proto);
// 6. If Type(len) is not Number, then
var len = items[0];
(0, _invariant2.default)(len !== undefined);
var intLen = void 0;
if (!len.mightBeNumber()) {
// a. Let defineStatus be CreateDataProperty(array, "0", len).
var defineStatus = _singletons.Create.CreateDataProperty(realm, array, "0", len);
// b. Assert: defineStatus is true.
(0, _invariant2.default)(defineStatus, "defineStatus is true");
// c. Let intLen be 1.
intLen = 1;
} else {
// 7. Else,
// a. Let intLen be ToUint32(len).
intLen = _singletons.To.ToUint32(realm, len.throwIfNotConcreteNumber());
// b If intLen ≠ len, throw a RangeError exception.
if (intLen !== len.value) {
throw realm.createErrorThrowCompletion(realm.intrinsics.RangeError, "intLen ≠ len");
}
}
// 8. Perform ! Set(array, "length", intLen, true).
_singletons.Properties.Set(realm, array, "length", new _index.NumberValue(realm, intLen), true);
// 9. Return array.
return array;
} else {
// 1. Let numberOfArgs be the number of arguments passed to this function call.
var _numberOfArgs2 = argCount;
// 2. Assert: numberOfArgs ≥ 2.
(0, _invariant2.default)(_numberOfArgs2 >= 2, "numberOfArgs >= 2");
// 3. If NewTarget is undefined, let newTarget be the active function object, else let newTarget be NewTarget.
var _newTarget2 = NewTarget === undefined ? func : NewTarget;
// 4. Let proto be ? GetPrototypeFromConstructor(newTarget, "%ArrayPrototype%").
var _proto2 = (0, _index2.GetPrototypeFromConstructor)(realm, _newTarget2, "ArrayPrototype");
// 5. Let array be ? ArrayCreate(numberOfArgs, proto).
var _array = _singletons.Create.ArrayCreate(realm, _numberOfArgs2, _proto2);
// 6. Let k be 0.
var k = 0;
// 7. Let items be a zero-origined List containing the argument items in order.
items;
// 8. Repeat, while k < numberOfArgs
while (k < _numberOfArgs2) {
// a. Let Pk be ! ToString(k).
var Pk = _singletons.To.ToString(realm, new _index.NumberValue(realm, k));
// b. Let itemK be items[k].
var itemK = items[k];
(0, _invariant2.default)(itemK !== undefined);
// c. Let defineStatus be CreateDataProperty(array, Pk, itemK).
var _defineStatus = _singletons.Create.CreateDataProperty(realm, _array, Pk, itemK);
// d. Assert: defineStatus is true.
(0, _invariant2.default)(_defineStatus, "defineStatus is true");
// e. Increase k by 1.
k += 1;
}
// 9. Assert: the value of array's length property is numberOfArgs.
var length = (0, _index2.Get)(realm, _array, "length").throwIfNotConcrete();
(0, _invariant2.default)(length instanceof _index.NumberValue);
(0, _invariant2.default)(length.value === _numberOfArgs2, "the value of array's length property is numberOfArgs");
// 10. Return array.
return _array;
}
});
// ECMA262 22.1.2.2
func.defineNativeMethod("isArray", 1, function (context, _ref3) {
var _ref4 = _slicedToArray(_ref3, 1),
arg = _ref4[0];
// 1. Return ? IsArray(arg).
return new _index.BooleanValue(realm, (0, _index2.IsArray)(realm, arg));
});
// ECMA262 22.1.2.3
if (!realm.isCompatibleWith(realm.MOBILE_JSC_VERSION)) func.defineNativeMethod("of", 0, function (context, _ref5, argCount) {
var _ref6 = _toArray(_ref5),
items = _ref6.slice(0);
// 1. Let len be the actual number of arguments passed to this function.
var len = argCount;
// 2. Let items be the List of arguments passed to this function.
items;
// 3. Let C be the this value.
var C = context;
// 4. If IsConstructor(C) is true, then
var A = void 0;
if ((0, _index2.IsConstructor)(realm, C)) {
(0, _invariant2.default)(C instanceof _index.ObjectValue);
// a. Let A be ? Construct(C, « len »).
A = (0, _index2.Construct)(realm, C, [new _index.NumberValue(realm, len)]);
} else {
// 5. Else,
// a. Let A be ? ArrayCreate(len).
A = _singletons.Create.ArrayCreate(realm, len);
}
// 6. Let k be 0.
var k = 0;
// 7. Repeat, while k < len
while (k < len) {
// a. Let kValue be items[k].
var kValue = items[k];
// b. Let Pk be ! To.ToString(k).
var Pk = _singletons.To.ToString(realm, new _index.NumberValue(realm, k));
// c. Perform ? CreateDataPropertyOrThrow(A, Pk, kValue).
_singletons.Create.CreateDataPropertyOrThrow(realm, A, Pk, kValue);
// d. Increase k by 1.
k += 1;
}
// 8. Perform ? Set(A, "length", len, true).
_singletons.Properties.Set(realm, A, "length", new _index.NumberValue(realm, len), true);
// 9. Return A.
return A;
});
// ECMA262 22.1.2.1
if (!realm.isCompatibleWith(realm.MOBILE_JSC_VERSION)) func.defineNativeMethod("from", 1, function (context, _ref7, argCount) {
var _ref8 = _slicedToArray(_ref7, 3),
items = _ref8[0],
mapfn = _ref8[1],
thisArg = _ref8[2];
// 1. Let C be the this value.
var C = context;
var mapping = void 0,
T = void 0;
// 2. If mapfn is undefined, let mapping be false.
if (!mapfn || mapfn instanceof _index.UndefinedValue) {
mapping = false;
} else if (mapfn.mightBeUndefined()) {
(0, _invariant2.default)(mapfn instanceof _index.AbstractValue);
mapfn.throwIfNotConcrete();
} else {
// 3. Else,
// a. If IsCallable(mapfn) is false, throw a TypeError exception.
if ((0, _index2.IsCallable)(realm, mapfn) === false) {
mapfn.throwIfNotConcrete();
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError, "IsCallable(mapfn) is false");
}
// b. If thisArg was supplied, let T be thisArg; else let T be undefined.
T = thisArg !== undefined ? thisArg : realm.intrinsics.undefined;
// c. Let mapping be true.
mapping = true;
}
// 4. Let usingIterator be ? GetMethod(items, @@iterator).
var usingIterator = (0, _index2.GetMethod)(realm, items, realm.intrinsics.SymbolIterator);
// 5. If usingIterator is not undefined, then
if (!usingIterator.mightBeUndefined()) {
var _A = void 0;
// a. If IsConstructor(C) is true, then
if ((0, _index2.IsConstructor)(realm, C)) {
(0, _invariant2.default)(C instanceof _index.ObjectValue);
// i. Let A be ? Construct(C).
_A = (0, _index2.Construct)(realm, C);
} else {
// b. Else,
// i. Let A be ArrayCreate(0).
_A = _singletons.Create.ArrayCreate(realm, 0);
}
// c. Let iterator be ? GetIterator(items, usingIterator).
var iterator = (0, _iterator.GetIterator)(realm, items, usingIterator);
// d. Let k be 0.
var _k = 0;
// e. Repeat
while (true) {
// i. If k ≥ 2^53-1, then
if (_k >= Math.pow(2, 53) - 1) {
// 1. Let error be Completion{[[Type]]: throw, [[Value]]: a newly created TypeError object, [[Target]]: empty}.
var error = realm.createErrorThrowCompletion(realm.intrinsics.TypeError, "k >= 2^53 - 1");
// 2. Return ? IteratorClose(iterator, error).
throw (0, _iterator.IteratorClose)(realm, iterator, error);
}
// ii. Let Pk be ! ToString(k).
var Pk = _singletons.To.ToString(realm, new _index.NumberValue(realm, _k));
// iii. Let next be ? IteratorStep(iterator).
var next = (0, _iterator.IteratorStep)(realm, iterator);
// iv. If next is false, then
if (next === false) {
// 1. Perform ? Set(A, "length", k, true).
_singletons.Properties.Set(realm, _A, "length", new _index.NumberValue(realm, _k), true);
// 2. Return A.
return _A;
}
// v. Let nextValue be ? IteratorValue(next).
var nextValue = (0, _iterator.IteratorValue)(realm, next);
var mappedValue = void 0;
// vi. If mapping is true, then
if (mapping === true) {
// 1. Let mappedValue be Call(mapfn, T, « nextValue, k »).
try {
(0, _invariant2.default)(T !== undefined);
mappedValue = (0, _index2.Call)(realm, mapfn, T, [nextValue, new _index.NumberValue(realm, _k)]);
} catch (mappedValueCompletion) {
if (mappedValueCompletion instanceof _completions.AbruptCompletion) {
// 2. If mappedValue is an abrupt completion, return ? IteratorClose(iterator, mappedValue).
throw (0, _iterator.IteratorClose)(realm, iterator, mappedValueCompletion);
} else {
throw mappedValueCompletion;
}
}
// 3. Let mappedValue be mappedValue.[[Value]].
} else {
// vii. Else, let mappedValue be nextValue.
mappedValue = nextValue;
}
// viii. Let defineStatus be CreateDataPropertyOrThrow(A, Pk, mappedValue).
try {
_singletons.Create.CreateDataPropertyOrThrow(realm, _A, Pk, mappedValue);
} catch (completion) {
if (completion instanceof _completions.AbruptCompletion) {
// ix. If defineStatus is an abrupt completion, return ? IteratorClose(iterator, defineStatus).
throw (0, _iterator.IteratorClose)(realm, iterator, completion);
} else throw completion;
}
// x. Increase k by 1.
_k = _k + 1;
}
} else {
usingIterator.throwIfNotConcrete();
}
// 6. NOTE: items is not an Iterable so assume it is an array-like object.
items = items.throwIfNotConcrete();
(0, _invariant2.default)(items instanceof _index.ObjectValue);
// 7. Let arrayLike be ! ToObject(items).
var arrayLike = _singletons.To.ToObject(realm, items);
// 8. Let len be ? ToLength(? Get(arrayLike, "length")).
var len = _singletons.To.ToLength(realm, (0, _index2.Get)(realm, arrayLike, "length"));
var A = void 0;
// 9. If IsConstructor(C) is true, then
if ((0, _index2.IsConstructor)(realm, C)) {
(0, _invariant2.default)(C instanceof _index.ObjectValue);
// a. Let A be ? Construct(C, « len »).
A = (0, _index2.Construct)(realm, C, [new _index.NumberValue(realm, len)]);
} else {
// 10. Else,
// a. Let A be ? ArrayCreate(len).
A = _singletons.Create.ArrayCreate(realm, len);
}
// 11. Let k be 0.
var k = 0;
// 12. Repeat, while k < len
while (k < len) {
// a. Let Pk be ! ToString(k).
var _Pk = _singletons.To.ToString(realm, new _index.NumberValue(realm, k));
// b. Let kValue be ? Get(arrayLike, Pk).
var kValue = (0, _index2.Get)(realm, arrayLike, _Pk);
var _mappedValue = void 0;
// c. If mapping is true, then
if (mapping === true) {
// i. Let mappedValue be ? Call(mapfn, T, « kValue, k »).
(0, _invariant2.default)(T !== undefined);
_mappedValue = (0, _index2.Call)(realm, mapfn, T, [kValue, new _index.NumberValue(realm, k)]);
} else {
// d. Else, let mappedValue be kValue.
_mappedValue = kValue;
}
// e. Perform ? CreateDataPropertyOrThrow(A, Pk, mappedValue).
_singletons.Create.CreateDataPropertyOrThrow(realm, A, new _index.StringValue(realm, _Pk), _mappedValue);
// f. Increase k by 1.
k = k + 1;
}
// 13. Perform ? Set(A, "length", len, true).
_singletons.Properties.Set(realm, A, "length", new _index.NumberValue(realm, len), true);
// 14. Return A.
return A;
});
// ECMA262 22.1.2.5
func.defineNativeGetter(realm.intrinsics.SymbolSpecies, function (context) {
// 1. Return the this value
return context;
});
return func;
};
var _index = require("../../values/index.js");
var _completions = require("../../completions.js");
var _index2 = require("../../methods/index.js");
var _iterator = require("../../methods/iterator.js");
var _singletons = require("../../singletons.js");
var _invariant = require("../../invariant.js");
var _invariant2 = _interopRequireDefault(_invariant);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _toArray(arr) { return Array.isArray(arr) ? arr : Array.from(arr); } /**
* 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.
*/
//# sourceMappingURL=Array.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,64 @@
"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) {
// ECMA262 24.1.2.1
var func = new _index.NativeFunctionValue(realm, "ArrayBuffer", "ArrayBuffer", 1, function (context, _ref, argCount, NewTarget) {
var _ref2 = _slicedToArray(_ref, 1),
length = _ref2[0];
// 1. If NewTarget is undefined, throw a TypeError exception.
if (!NewTarget) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError);
}
// 2. Let byteLength be ToIndex(numberLength).
var byteLength = _singletons.To.ToIndexPartial(realm, length);
// 3. Return ? AllocateArrayBuffer(NewTarget, byteLength).
return (0, _arraybuffer.AllocateArrayBuffer)(realm, NewTarget, byteLength);
});
// ECMA262 24.1.3.1
func.defineNativeMethod("isView", 1, function (context, _ref3) {
var _ref4 = _slicedToArray(_ref3, 1),
arg = _ref4[0];
// 1. If Type(arg) is not Object, return false.
if (!arg.mightBeObject()) return realm.intrinsics.false;
// 2. If arg has a [[ViewedArrayBuffer]] internal slot, return true.
arg = arg.throwIfNotConcreteObject();
if ("$ViewedArrayBuffer" in arg) return realm.intrinsics.true;
// 3. Return false.
return realm.intrinsics.false;
});
// ECMA262 24.1.3.3
func.defineNativeGetter(realm.intrinsics.SymbolSpecies, function (context) {
// 1. Return the this value
return context;
});
return func;
};
var _index = require("../../values/index.js");
var _singletons = require("../../singletons.js");
var _arraybuffer = require("../../methods/arraybuffer.js");
//# sourceMappingURL=ArrayBuffer.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../../src/intrinsics/ecma262/ArrayBuffer.js"],"names":["realm","func","context","argCount","NewTarget","length","createErrorThrowCompletion","intrinsics","TypeError","byteLength","ToIndexPartial","defineNativeMethod","arg","mightBeObject","false","throwIfNotConcreteObject","true","defineNativeGetter","SymbolSpecies"],"mappings":";;;;;;ypBAAA;;;;;;;;;kBAgBe,UAASA,KAAT,EAA4C;AACzD;AACA,MAAIC,OAAO,+BACTD,KADS,EAET,aAFS,EAGT,aAHS,EAIT,CAJS,EAKT,UAACE,OAAD,QAAoBC,QAApB,EAA8BC,SAA9B,EAA4C;AAAA;AAAA,QAAjCC,MAAiC;;AAC1C;AACA,QAAI,CAACD,SAAL,EAAgB;AACd,YAAMJ,MAAMM,0BAAN,CAAiCN,MAAMO,UAAN,CAAiBC,SAAlD,CAAN;AACD;;AAED;AACA,QAAIC,aAAa,eAAGC,cAAH,CAAkBV,KAAlB,EAAyBK,MAAzB,CAAjB;;AAEA;AACA,WAAO,sCAAoBL,KAApB,EAA2BI,SAA3B,EAAsCK,UAAtC,CAAP;AACD,GAhBQ,CAAX;;AAmBA;AACAR,OAAKU,kBAAL,CAAwB,QAAxB,EAAkC,CAAlC,EAAqC,UAACT,OAAD,SAAoB;AAAA;AAAA,QAATU,GAAS;;AACvD;AACA,QAAI,CAACA,IAAIC,aAAJ,EAAL,EAA0B,OAAOb,MAAMO,UAAN,CAAiBO,KAAxB;;AAE1B;AACAF,UAAMA,IAAIG,wBAAJ,EAAN;AACA,QAAI,wBAAwBH,GAA5B,EAAiC,OAAOZ,MAAMO,UAAN,CAAiBS,IAAxB;;AAEjC;AACA,WAAOhB,MAAMO,UAAN,CAAiBO,KAAxB;AACD,GAVD;;AAYA;AACAb,OAAKgB,kBAAL,CAAwBjB,MAAMO,UAAN,CAAiBW,aAAzC,EAAwD,mBAAW;AACjE;AACA,WAAOhB,OAAP;AACD,GAHD;;AAKA,SAAOD,IAAP;AACD,C;;AA7CD;;AACA;;AACA","file":"ArrayBuffer.js","sourcesContent":["/**\n * Copyright (c) 2017-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n/* @flow */\n\nimport type { Realm } from \"../../realm.js\";\nimport { NativeFunctionValue } from \"../../values/index.js\";\nimport { To } from \"../../singletons.js\";\nimport { AllocateArrayBuffer } from \"../../methods/arraybuffer.js\";\n\nexport default function(realm: Realm): NativeFunctionValue {\n // ECMA262 24.1.2.1\n let func = new NativeFunctionValue(\n realm,\n \"ArrayBuffer\",\n \"ArrayBuffer\",\n 1,\n (context, [length], argCount, NewTarget) => {\n // 1. If NewTarget is undefined, throw a TypeError exception.\n if (!NewTarget) {\n throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError);\n }\n\n // 2. Let byteLength be ToIndex(numberLength).\n let byteLength = To.ToIndexPartial(realm, length);\n\n // 3. Return ? AllocateArrayBuffer(NewTarget, byteLength).\n return AllocateArrayBuffer(realm, NewTarget, byteLength);\n }\n );\n\n // ECMA262 24.1.3.1\n func.defineNativeMethod(\"isView\", 1, (context, [arg]) => {\n // 1. If Type(arg) is not Object, return false.\n if (!arg.mightBeObject()) return realm.intrinsics.false;\n\n // 2. If arg has a [[ViewedArrayBuffer]] internal slot, return true.\n arg = arg.throwIfNotConcreteObject();\n if (\"$ViewedArrayBuffer\" in arg) return realm.intrinsics.true;\n\n // 3. Return false.\n return realm.intrinsics.false;\n });\n\n // ECMA262 24.1.3.3\n func.defineNativeGetter(realm.intrinsics.SymbolSpecies, context => {\n // 1. Return the this value\n return context;\n });\n\n return func;\n}\n"]}

View File

@@ -0,0 +1,153 @@
"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, obj) {
// ECMA262 24.1.4.1
obj.defineNativeGetter("byteLength", function (context) {
// 1. Let O be the this value.
var 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");
}
// 3. If O does not have an [[ArrayBufferData]] internal slot, throw a TypeError exception.
if (!("$ArrayBufferData" in O)) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError, "O does not have an [[ArrayBufferData]] internal slot");
}
// 4. If IsDetachedBuffer(O) is true, throw a TypeError exception.
if ((0, _index2.IsDetachedBuffer)(realm, O) === true) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError, "IsDetachedBuffer(O) is true");
}
// 5. Let length be O.[[ArrayBufferByteLength]].
var length = O.$ArrayBufferByteLength;
(0, _invariant2.default)(typeof length === "number");
// 6. Return length.
return new _index.NumberValue(realm, length);
});
// ECMA262 24.1.4.3
obj.defineNativeMethod("slice", 2, function (context, _ref) {
var _ref2 = _slicedToArray(_ref, 2),
start = _ref2[0],
end = _ref2[1];
// 1. Let O be the this value.
var 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");
}
// 3. If O does not have an [[ArrayBufferData]] internal slot, throw a TypeError exception.
if (!("$ArrayBufferData" in O)) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError, "O does not have an [[ArrayBufferData]] internal slot");
}
// 4. If IsDetachedBuffer(O) is true, throw a TypeError exception.
if ((0, _index2.IsDetachedBuffer)(realm, O) === true) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError, "IsDetachedBuffer(O) is true");
}
// 5. Let len be O.[[ArrayBufferByteLength]].
var len = O.$ArrayBufferByteLength;
(0, _invariant2.default)(typeof len === "number");
// 6. Let relativeStart be ? ToInteger(start).
var relativeStart = _singletons.To.ToInteger(realm, start);
// 7. If relativeStart < 0, let first be max((len + relativeStart), 0); else let first be min(relativeStart, len).
var first = relativeStart < 0 ? Math.max(len + relativeStart, 0) : Math.min(relativeStart, len);
// 8. If end is undefined, let relativeEnd be len; else let relativeEnd be ? ToInteger(end).
var relativeEnd = !end || end instanceof _index.UndefinedValue ? len : _singletons.To.ToInteger(realm, end.throwIfNotConcrete());
// 9. If relativeEnd < 0, let final be max((len + relativeEnd), 0); else let final be min(relativeEnd, len).
var final = relativeEnd < 0 ? Math.max(len + relativeEnd, 0) : Math.min(relativeEnd, len);
// 10. Let newLen be max(final-first, 0).
var newLen = Math.max(final - first, 0);
// 11. Let ctor be ? SpeciesConstructor(O, %ArrayBuffer%).
var ctor = (0, _index2.SpeciesConstructor)(realm, O, realm.intrinsics.ArrayBuffer);
// 12. Let New be ? Construct(ctor, « newLen »).
var New = (0, _index2.Construct)(realm, ctor, [new _index.NumberValue(realm, newLen)]);
// 13. If New does not have an [[ArrayBufferData]] internal slot, throw a TypeError exception.
if (!("$ArrayBufferData" in New)) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError, "new does not have an [[ArrayBufferData]] internal slot");
}
// 14. If IsDetachedBuffer(New) is true, throw a TypeError exception.
if ((0, _index2.IsDetachedBuffer)(realm, New) === true) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError, "IsDetachedBuffer(new) is true");
}
// 15. If SameValue(New, O) is true, throw a TypeError exception.
if ((0, _index2.SameValue)(realm, New, O) === true) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError, "SameValue(new, O) is true");
}
// 16. If new.[[ArrayBufferByteLength]] < newLen, throw a TypeError exception.
if (typeof New.$ArrayBufferByteLength !== "number" || New.$ArrayBufferByteLength < newLen) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError, "new.[[ArrayBufferByteLength]] < newLen");
}
// 17. NOTE: Side-effects of the above steps may have detached O.
// 18. If IsDetachedBuffer(O) is true, throw a TypeError exception.
if ((0, _index2.IsDetachedBuffer)(realm, O) === true) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError, "IsDetachedBuffer(O) is true");
}
// 19. Let fromBuf be O.[[ArrayBufferData]].
var fromBuf = O.$ArrayBufferData;
(0, _invariant2.default)(fromBuf);
// 20. Let toBuf be New.[[ArrayBufferData]].
var toBuf = New.$ArrayBufferData;
(0, _invariant2.default)(toBuf);
// 21. Perform CopyDataBlockBytes(toBuf, 0, fromBuf, first, newLen).
(0, _index2.CopyDataBlockBytes)(realm, toBuf, 0, fromBuf, first, newLen);
// 22. Return New.
return New;
});
// ECMA262 24.1.4.4
obj.defineNativeProperty(realm.intrinsics.SymbolToStringTag, new _index.StringValue(realm, "ArrayBuffer"), {
writable: false
});
};
var _index = require("../../values/index.js");
var _index2 = require("../../methods/index.js");
var _singletons = require("../../singletons.js");
var _invariant = require("../../invariant.js");
var _invariant2 = _interopRequireDefault(_invariant);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
//# sourceMappingURL=ArrayBufferPrototype.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,107 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function (realm, obj) {
// ECMA262 22.1.5.2.1
obj.defineNativeMethod("next", 0, function (context) {
// 1. Let O be the this value.
var 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, "not an object");
}
// 3. If O does not have all of the internal slots of an Array Iterator Instance (22.1.5.3), throw a TypeError exception.
if (O.$IteratedObject === undefined || O.$ArrayIteratorNextIndex === undefined || O.$ArrayIterationKind === undefined) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError, "ArrayIteratorPrototype.next isn't generic");
}
// 4. Let a be the value of the [[IteratedObject]] internal slot of O.
var a = O.$IteratedObject;
(0, _invariant2.default)(a instanceof _index.ObjectValue || a instanceof _index.UndefinedValue);
// 5. If a is undefined, return CreateIterResultObject(undefined, true).
if (a instanceof _index.UndefinedValue) {
return _singletons.Create.CreateIterResultObject(realm, realm.intrinsics.undefined, true);
}
// 6. Let index be the value of the [[ArrayIteratorNextIndex]] internal slot of O.
var index = O.$ArrayIteratorNextIndex.value;
// 7. Let itemKind be the value of the [[ArrayIterationKind]] internal slot of O.
var itemKind = O.$ArrayIterationKind;
// 8. If a has a [[TypedArrayName]] internal slot, then
var len = void 0;
if (a.$TypedArrayName) {
// a. Let len be the value of a's [[ArrayLength]] internal slot.
len = a.$ArrayLength;
(0, _invariant2.default)(typeof len === "number");
} else {
// 9. Else,
// a. Let len be ? ToLength(? Get(a, "length")).
len = _singletons.To.ToLength(realm, (0, _get.Get)(realm, a, "length"));
}
// 10. If index ≥ len, then
if (index >= len) {
// a. Set the value of the [[IteratedObject]] internal slot of O to undefined.
O.$IteratedObject = realm.intrinsics.undefined;
// b. Return CreateIterResultObject(undefined, true).
return _singletons.Create.CreateIterResultObject(realm, realm.intrinsics.undefined, true);
}
// 11. Set the value of the [[ArrayIteratorNextIndex]] internal slot of O to index+1.
O.$ArrayIteratorNextIndex = new _index.NumberValue(realm, index + 1);
// 12. If itemKind is "key", return CreateIterResultObject(index, false).
if (itemKind === "key") {
return _singletons.Create.CreateIterResultObject(realm, new _index.NumberValue(realm, index), false);
}
// 13. Let elementKey be ! ToString(index).
var elementKey = new _index.StringValue(realm, index + "");
// 14. Let elementValue be ? Get(a, elementKey).
var elementValue = (0, _get.Get)(realm, a, elementKey);
// 15. If itemKind is "value", let result be elementValue.
var result = void 0;
if (itemKind === "value") {
result = elementValue;
} else {
// 16. Else,
// a. Assert: itemKind is "key+value".
(0, _invariant2.default)(itemKind === "key+value", "expected item kind to be key+value");
// b. Let result be CreateArrayFromList(« index, elementValue »).
result = _singletons.Create.CreateArrayFromList(realm, [new _index.NumberValue(realm, index), elementValue]);
}
// 17. Return CreateIterResultObject(result, false).
return _singletons.Create.CreateIterResultObject(realm, result, false);
});
// ECMA262 22.1.5.2.2
obj.defineNativeProperty(realm.intrinsics.SymbolToStringTag, new _index.StringValue(realm, "Array Iterator"), {
writable: false
});
};
var _singletons = require("../../singletons.js");
var _index = require("../../values/index.js");
var _get = require("../../methods/get.js");
var _invariant = require("../../invariant.js");
var _invariant2 = _interopRequireDefault(_invariant);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
//# sourceMappingURL=ArrayIteratorPrototype.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,33 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function (realm) {
// ECMA262 22.1.3.30
return new _index.NativeFunctionValue(realm, "Array.prototype.toString", "toString", 0, function (context) {
// 1. Let array be ? ToObject(this value).
var array = _singletons.To.ToObjectPartial(realm, context);
// 2. Let func be ? Get(array, "join").
var func = (0, _get.Get)(realm, array, "join");
// 3. If IsCallable(func) is false, let func be the intrinsic function %ObjProto_toString%.
if (!(0, _is.IsCallable)(realm, func)) func = realm.intrinsics.ObjectProto_toString;
// 4. Return ? Call(func, array).
return (0, _call.Call)(realm, func, array);
}, false);
};
var _index = require("../../values/index.js");
var _singletons = require("../../singletons.js");
var _get = require("../../methods/get.js");
var _call = require("../../methods/call.js");
var _is = require("../../methods/is.js");
//# sourceMappingURL=ArrayProto_toString.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../../src/intrinsics/ecma262/ArrayProto_toString.js"],"names":["realm","array","ToObjectPartial","context","func","intrinsics","ObjectProto_toString"],"mappings":";;;;;;kBAkBe,UAASA,KAAT,EAA4C;AACzD;AACA,SAAO,+BACLA,KADK,EAEL,0BAFK,EAGL,UAHK,EAIL,CAJK,EAKL,mBAAW;AACT;AACA,QAAIC,QAAQ,eAAGC,eAAH,CAAmBF,KAAnB,EAA0BG,OAA1B,CAAZ;;AAEA;AACA,QAAIC,OAAO,cAAIJ,KAAJ,EAAWC,KAAX,EAAkB,MAAlB,CAAX;;AAEA;AACA,QAAI,CAAC,oBAAWD,KAAX,EAAkBI,IAAlB,CAAL,EAA8BA,OAAOJ,MAAMK,UAAN,CAAiBC,oBAAxB;;AAE9B;AACA,WAAO,gBAAKN,KAAL,EAAYI,IAAZ,EAAkBH,KAAlB,CAAP;AACD,GAjBI,EAkBL,KAlBK,CAAP;AAoBD,C;;AA5BD;;AACA;;AACA;;AACA;;AACA","file":"ArrayProto_toString.js","sourcesContent":["/**\n * Copyright (c) 2017-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n/* @flow */\n\nimport type { Realm } from \"../../realm.js\";\nimport { NativeFunctionValue } from \"../../values/index.js\";\nimport { To } from \"../../singletons.js\";\nimport { Get } from \"../../methods/get.js\";\nimport { Call } from \"../../methods/call.js\";\nimport { IsCallable } from \"../../methods/is.js\";\n\nexport default function(realm: Realm): NativeFunctionValue {\n // ECMA262 22.1.3.30\n return new NativeFunctionValue(\n realm,\n \"Array.prototype.toString\",\n \"toString\",\n 0,\n context => {\n // 1. Let array be ? ToObject(this value).\n let array = To.ToObjectPartial(realm, context);\n\n // 2. Let func be ? Get(array, \"join\").\n let func = Get(realm, array, \"join\");\n\n // 3. If IsCallable(func) is false, let func be the intrinsic function %ObjProto_toString%.\n if (!IsCallable(realm, func)) func = realm.intrinsics.ObjectProto_toString;\n\n // 4. Return ? Call(func, array).\n return Call(realm, func, array);\n },\n false\n );\n}\n"]}

View File

@@ -0,0 +1,21 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function (realm) {
// ECMA262 22.1.3.30
return new _index.NativeFunctionValue(realm, "Array.prototype.values", "values", 0, function (context) {
// 1. Let O be ? ToObject(this value).
var O = _singletons.To.ToObject(realm, context.throwIfNotConcrete());
// 2. Return CreateArrayIterator(O, "value").
return _singletons.Create.CreateArrayIterator(realm, O, "value");
});
};
var _index = require("../../values/index.js");
var _singletons = require("../../singletons.js");
//# sourceMappingURL=ArrayProto_values.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../../src/intrinsics/ecma262/ArrayProto_values.js"],"names":["realm","O","ToObject","context","throwIfNotConcrete","CreateArrayIterator"],"mappings":";;;;;;kBAee,UAASA,KAAT,EAA4C;AACzD;AACA,SAAO,+BAAwBA,KAAxB,EAA+B,wBAA/B,EAAyD,QAAzD,EAAmE,CAAnE,EAAsE,mBAAW;AACtF;AACA,QAAIC,IAAI,eAAGC,QAAH,CAAYF,KAAZ,EAAmBG,QAAQC,kBAAR,EAAnB,CAAR;;AAEA;AACA,WAAO,mBAAOC,mBAAP,CAA2BL,KAA3B,EAAkCC,CAAlC,EAAqC,OAArC,CAAP;AACD,GANM,CAAP;AAOD,C;;AAZD;;AACA","file":"ArrayProto_values.js","sourcesContent":["/**\n * Copyright (c) 2017-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n/* @flow */\n\nimport type { Realm } from \"../../realm.js\";\nimport { NativeFunctionValue } from \"../../values/index.js\";\nimport { Create, To } from \"../../singletons.js\";\n\nexport default function(realm: Realm): NativeFunctionValue {\n // ECMA262 22.1.3.30\n return new NativeFunctionValue(realm, \"Array.prototype.values\", \"values\", 0, context => {\n // 1. Let O be ? ToObject(this value).\n let O = To.ToObject(realm, context.throwIfNotConcrete());\n\n // 2. Return CreateArrayIterator(O, \"value\").\n return Create.CreateArrayIterator(realm, O, \"value\");\n });\n}\n"]}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,44 @@
"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) {
// ECMA262 19.3.1.1
var func = new _index.NativeFunctionValue(realm, "Boolean", "Boolean", 1, function (context, _ref, argCount, NewTarget) {
var _ref2 = _slicedToArray(_ref, 1),
value = _ref2[0];
// 1. Let b be ToBoolean(value).
var b = new _index.BooleanValue(realm, _singletons.To.ToBooleanPartial(realm, value));
// 2. If NewTarget is undefined, return b.
if (!NewTarget) return b;
// 3. Let O be ? OrdinaryCreateFromConstructor(NewTarget, "%BooleanPrototype%", « [[BooleanData]] »).
var O = _singletons.Create.OrdinaryCreateFromConstructor(realm, NewTarget, "BooleanPrototype", { $BooleanData: undefined });
// 4. Set the value of O's [[BooleanData]] internal slot to b.
O.$BooleanData = b;
// 5. Return O.
return O;
});
return func;
};
var _index = require("../../values/index.js");
var _singletons = require("../../singletons.js");
//# sourceMappingURL=Boolean.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../../src/intrinsics/ecma262/Boolean.js"],"names":["realm","func","context","argCount","NewTarget","value","b","ToBooleanPartial","O","OrdinaryCreateFromConstructor","$BooleanData","undefined"],"mappings":";;;;;;ypBAAA;;;;;;;;;kBAee,UAASA,KAAT,EAA4C;AACzD;AACA,MAAIC,OAAO,+BAAwBD,KAAxB,EAA+B,SAA/B,EAA0C,SAA1C,EAAqD,CAArD,EAAwD,UAACE,OAAD,QAAmBC,QAAnB,EAA6BC,SAA7B,EAA2C;AAAA;AAAA,QAAhCC,KAAgC;;AAC5G;AACA,QAAIC,IAAI,wBAAiBN,KAAjB,EAAwB,eAAGO,gBAAH,CAAoBP,KAApB,EAA2BK,KAA3B,CAAxB,CAAR;;AAEA;AACA,QAAI,CAACD,SAAL,EAAgB,OAAOE,CAAP;;AAEhB;AACA,QAAIE,IAAI,mBAAOC,6BAAP,CAAqCT,KAArC,EAA4CI,SAA5C,EAAuD,kBAAvD,EAA2E,EAAEM,cAAcC,SAAhB,EAA3E,CAAR;;AAEA;AACAH,MAAEE,YAAF,GAAiBJ,CAAjB;;AAEA;AACA,WAAOE,CAAP;AACD,GAfU,CAAX;;AAiBA,SAAOP,IAAP;AACD,C;;AAvBD;;AACA","file":"Boolean.js","sourcesContent":["/**\n * Copyright (c) 2017-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n/* @flow */\n\nimport type { Realm } from \"../../realm.js\";\nimport { NativeFunctionValue, BooleanValue } from \"../../values/index.js\";\nimport { Create, To } from \"../../singletons.js\";\n\nexport default function(realm: Realm): NativeFunctionValue {\n // ECMA262 19.3.1.1\n let func = new NativeFunctionValue(realm, \"Boolean\", \"Boolean\", 1, (context, [value], argCount, NewTarget) => {\n // 1. Let b be ToBoolean(value).\n let b = new BooleanValue(realm, To.ToBooleanPartial(realm, value));\n\n // 2. If NewTarget is undefined, return b.\n if (!NewTarget) return b;\n\n // 3. Let O be ? OrdinaryCreateFromConstructor(NewTarget, \"%BooleanPrototype%\", « [[BooleanData]] »).\n let O = Create.OrdinaryCreateFromConstructor(realm, NewTarget, \"BooleanPrototype\", { $BooleanData: undefined });\n\n // 4. Set the value of O's [[BooleanData]] internal slot to b.\n O.$BooleanData = b;\n\n // 5. Return O.\n return O;\n });\n\n return func;\n}\n"]}

View File

@@ -0,0 +1,43 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function (realm, obj) {
// ECMA262 19.3.1
obj.$BooleanData = realm.intrinsics.false;
var tsTemplateSrc = "(A).toString()";
var tsTemplate = (0, _builder2.default)(tsTemplateSrc);
// ECMA262 19.3.3.3
obj.defineNativeMethod("toString", 0, function (context) {
var target = context instanceof _index.ObjectValue ? context.$BooleanData : context;
if (target instanceof _index.AbstractValue && target.getType() === _index.BooleanValue) {
return _index.AbstractValue.createFromTemplate(realm, tsTemplate, _index.StringValue, [target], tsTemplateSrc);
}
// 1. Let b be ? thisBooleanValue(this value).
var b = _singletons.To.thisBooleanValue(realm, context);
// 2. If b is true, return "true"; else return "false".
return new _index.StringValue(realm, b.value ? "true" : "false");
});
// ECMA262 19.3.3.4
obj.defineNativeMethod("valueOf", 0, function (context) {
// 1. Return ? thisBooleanValue(this value).
return _singletons.To.thisBooleanValue(realm, context);
});
};
var _index = require("../../values/index.js");
var _singletons = require("../../singletons.js");
var _builder = require("../../utils/builder.js");
var _builder2 = _interopRequireDefault(_builder);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
//# sourceMappingURL=BooleanPrototype.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../../src/intrinsics/ecma262/BooleanPrototype.js"],"names":["realm","obj","$BooleanData","intrinsics","false","tsTemplateSrc","tsTemplate","defineNativeMethod","target","context","getType","createFromTemplate","b","thisBooleanValue","value"],"mappings":";;;;;;kBAgBe,UAASA,KAAT,EAAuBC,GAAvB,EAA+C;AAC5D;AACAA,MAAIC,YAAJ,GAAmBF,MAAMG,UAAN,CAAiBC,KAApC;;AAEA,MAAMC,gBAAgB,gBAAtB;AACA,MAAMC,aAAa,uBAAwBD,aAAxB,CAAnB;;AAEA;AACAJ,MAAIM,kBAAJ,CAAuB,UAAvB,EAAmC,CAAnC,EAAsC,mBAAW;AAC/C,QAAMC,SAASC,wCAAiCA,QAAQP,YAAzC,GAAwDO,OAAvE;AACA,QAAID,0CAAmCA,OAAOE,OAAP,0BAAvC,EAA0E;AACxE,aAAO,qBAAcC,kBAAd,CAAiCX,KAAjC,EAAwCM,UAAxC,sBAAiE,CAACE,MAAD,CAAjE,EAA2EH,aAA3E,CAAP;AACD;AACD;AACA,QAAIO,IAAI,eAAGC,gBAAH,CAAoBb,KAApB,EAA2BS,OAA3B,CAAR;;AAEA;AACA,WAAO,uBAAgBT,KAAhB,EAAuBY,EAAEE,KAAF,GAAU,MAAV,GAAmB,OAA1C,CAAP;AACD,GAVD;;AAYA;AACAb,MAAIM,kBAAJ,CAAuB,SAAvB,EAAkC,CAAlC,EAAqC,mBAAW;AAC9C;AACA,WAAO,eAAGM,gBAAH,CAAoBb,KAApB,EAA2BS,OAA3B,CAAP;AACD,GAHD;AAID,C;;AA7BD;;AACA;;AACA","file":"BooleanPrototype.js","sourcesContent":["/**\n * Copyright (c) 2017-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n/* @flow */\n\nimport type { Realm } from \"../../realm.js\";\nimport { ObjectValue, StringValue, AbstractValue, BooleanValue } from \"../../values/index.js\";\nimport { To } from \"../../singletons.js\";\nimport buildExpressionTemplate from \"../../utils/builder.js\";\n\nexport default function(realm: Realm, obj: ObjectValue): void {\n // ECMA262 19.3.1\n obj.$BooleanData = realm.intrinsics.false;\n\n const tsTemplateSrc = \"(A).toString()\";\n const tsTemplate = buildExpressionTemplate(tsTemplateSrc);\n\n // ECMA262 19.3.3.3\n obj.defineNativeMethod(\"toString\", 0, context => {\n const target = context instanceof ObjectValue ? context.$BooleanData : context;\n if (target instanceof AbstractValue && target.getType() === BooleanValue) {\n return AbstractValue.createFromTemplate(realm, tsTemplate, StringValue, [target], tsTemplateSrc);\n }\n // 1. Let b be ? thisBooleanValue(this value).\n let b = To.thisBooleanValue(realm, context);\n\n // 2. If b is true, return \"true\"; else return \"false\".\n return new StringValue(realm, b.value ? \"true\" : \"false\");\n });\n\n // ECMA262 19.3.3.4\n obj.defineNativeMethod(\"valueOf\", 0, context => {\n // 1. Return ? thisBooleanValue(this value).\n return To.thisBooleanValue(realm, context);\n });\n}\n"]}

View File

@@ -0,0 +1,111 @@
"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) {
// ECMA262 24.2.2.1
var func = new _index2.NativeFunctionValue(realm, "DataView", "DataView", 3, function (context, _ref, argCount, NewTarget) {
var _ref2 = _slicedToArray(_ref, 3),
buffer = _ref2[0],
byteOffset = _ref2[1],
byteLength = _ref2[2];
// 1. If NewTarget is undefined, throw a TypeError exception.
if (!NewTarget) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError);
}
buffer = buffer.throwIfNotConcrete();
// 2. If Type(buffer) is not Object, throw a TypeError exception.
if (!(buffer instanceof _index2.ObjectValue)) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError);
}
// 3. If buffer does not have an [[ArrayBufferData]] internal slot, throw a TypeError exception.
if (!("$ArrayBufferData" in buffer)) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError);
}
// 4. Let offset be ? ToIndex(byteOffset).
var offset = _singletons.To.ToIndexPartial(realm, byteOffset);
// 5. If IsDetachedBuffer(buffer) is true, throw a TypeError exception.
if ((0, _index.IsDetachedBuffer)(realm, buffer)) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError);
}
// 6. Let bufferByteLength be the value of buffer's [[ArrayBufferByteLength]] internal slot.
var bufferByteLength = buffer.$ArrayBufferByteLength;
(0, _invariant2.default)(typeof bufferByteLength === "number");
// 7. If offset > bufferByteLength, throw a RangeError exception.
if (offset > bufferByteLength) {
throw realm.createErrorThrowCompletion(realm.intrinsics.RangeError);
}
// 8. If byteLength is undefined, then
var viewByteLength = void 0;
if (!byteLength || byteLength instanceof _index2.UndefinedValue) {
// a. Let viewByteLength be bufferByteLength - offset.
viewByteLength = bufferByteLength - offset;
} else {
// 9. Else,
// a. Let viewByteLength be ? ToIndex(byteLength).
viewByteLength = _singletons.To.ToIndexPartial(realm, byteLength);
// b. If offset+viewByteLength > bufferByteLength, throw a RangeError exception.
if (offset + viewByteLength > bufferByteLength) {
throw realm.createErrorThrowCompletion(realm.intrinsics.RangeError);
}
}
// 10. Let O be ? OrdinaryCreateFromConstructor(NewTarget, "%DataViewPrototype%", « [[DataView]], [[ViewedArrayBuffer]], [[ByteLength]], [[ByteOffset]] »).
var O = _singletons.Create.OrdinaryCreateFromConstructor(realm, NewTarget, "DataViewPrototype", {
$DataView: undefined,
$ViewedArrayBuffer: undefined,
$ByteLength: undefined,
$ByteOffset: undefined
});
// 11. Set O's [[DataView]] internal slot to true.
O.$DataView = true;
// 12. Set O's [[ViewedArrayBuffer]] internal slot to buffer.
O.$ViewedArrayBuffer = buffer;
// 13. Set O's [[ByteLength]] internal slot to viewByteLength.
O.$ByteLength = viewByteLength;
// 14. Set O's [[ByteOffset]] internal slot to offset.
O.$ByteOffset = offset;
// 15. Return O.
return O;
});
return func;
};
var _index = require("../../methods/index.js");
var _index2 = require("../../values/index.js");
var _singletons = require("../../singletons.js");
var _invariant = require("../../invariant.js");
var _invariant2 = _interopRequireDefault(_invariant);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
//# sourceMappingURL=DataView.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,373 @@
"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, obj) {
// ECMA262 24.2.4.1
obj.defineNativeGetter("buffer", function (context) {
// 1. Let O be the this value.
var 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");
}
// 3. If O does not have a [[DataView]] internal slot, throw a TypeError exception.
if (!("$DataView" in O)) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError, "O does not have a [[DataView]] internal slot");
}
// 4. Assert: O has a [[ViewedArrayBuffer]] internal slot.
(0, _invariant2.default)(O.$ViewedArrayBuffer);
// 5. Let buffer be O.[[ViewedArrayBuffer]].
var buffer = O.$ViewedArrayBuffer;
// 6. Return buffer.
return buffer;
});
// ECMA262 24.2.4.2
obj.defineNativeGetter("byteLength", function (context) {
// 1. Let O be the this value.
var 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");
}
// 3. If O does not have a [[DataView]] internal slot, throw a TypeError exception.
if (!("$DataView" in O)) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError, "O does not have a [[DataView]] internal slot");
}
// 4. Assert: O has a [[ViewedArrayBuffer]] internal slot.
(0, _invariant2.default)(O.$ViewedArrayBuffer);
// 5. Let buffer be O.[[ViewedArrayBuffer]].
var buffer = O.$ViewedArrayBuffer;
// 6. If IsDetachedBuffer(buffer) is true, throw a TypeError exception.
if ((0, _is.IsDetachedBuffer)(realm, buffer) === true) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError, "IsDetachedBuffer(buffer) is true");
}
// 7. Let size be O.[[ByteLength]].
var size = O.$ByteLength;
(0, _invariant2.default)(typeof size === "number");
// 8. Return size.
return new _index.NumberValue(realm, size);
});
// ECMA262 24.2.4.3
obj.defineNativeGetter("byteOffset", function (context) {
// 1. Let O be the this value.
var 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");
}
// 3. If O does not have a [[DataView]] internal slot, throw a TypeError exception.
if (!("$DataView" in O)) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError, "O does not have a [[DataView]] internal slot");
}
// 4. Assert: O has a [[ViewedArrayBuffer]] internal slot.
(0, _invariant2.default)(O.$ViewedArrayBuffer);
// 5. Let buffer be O.[[ViewedArrayBuffer]].
var buffer = O.$ViewedArrayBuffer;
// 6. If IsDetachedBuffer(buffer) is true, throw a TypeError exception.
if ((0, _is.IsDetachedBuffer)(realm, buffer) === true) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError, "IsDetachedBuffer(buffer) is true");
}
// 7. Let offset be O.[[ByteOffset]].
var offset = O.$ByteOffset;
(0, _invariant2.default)(typeof offset === "number");
// 8. Return offset.
return new _index.NumberValue(realm, offset);
});
// ECMA262 24.2.4.5
obj.defineNativeMethod("getFloat32", 1, function (context, _ref) {
var _ref2 = _slicedToArray(_ref, 2),
byteOffset = _ref2[0],
littleEndian = _ref2[1];
// 1. Let v be the this value.
var v = context;
// 2. If littleEndian is not present, let littleEndian be false.
if (!littleEndian) littleEndian = realm.intrinsics.false;
// 3. Return ? GetViewValue(v, byteOffset, littleEndian, "Float32").
return (0, _arraybuffer.GetViewValue)(realm, v, byteOffset, littleEndian, "Float32");
});
// ECMA262 24.2.4.6
obj.defineNativeMethod("getFloat64", 1, function (context, _ref3) {
var _ref4 = _slicedToArray(_ref3, 2),
byteOffset = _ref4[0],
littleEndian = _ref4[1];
// 1. Let v be the this value.
var v = context;
// 2. If littleEndian is not present, let littleEndian be false.
if (!littleEndian) littleEndian = realm.intrinsics.false;
// 3. Return ? GetViewValue(v, byteOffset, littleEndian, "Float64").
return (0, _arraybuffer.GetViewValue)(realm, v, byteOffset, littleEndian, "Float64");
});
// ECMA262 24.2.4.7
obj.defineNativeMethod("getInt8", 1, function (context, _ref5) {
var _ref6 = _slicedToArray(_ref5, 1),
byteOffset = _ref6[0];
// 1. Let v be the this value.
var v = context;
// 2. Return ? GetViewValue(v, byteOffset, true, "Int8").
return (0, _arraybuffer.GetViewValue)(realm, v, byteOffset, realm.intrinsics.true, "Int8");
});
// ECMA262 24.2.4.8
obj.defineNativeMethod("getInt16", 1, function (context, _ref7) {
var _ref8 = _slicedToArray(_ref7, 2),
byteOffset = _ref8[0],
littleEndian = _ref8[1];
// 1. Let v be the this value.
var v = context;
// 2. If littleEndian is not present, let littleEndian be false.
if (!littleEndian) littleEndian = realm.intrinsics.false;
// 3. Return ? GetViewValue(v, byteOffset, littleEndian, "Int16").
return (0, _arraybuffer.GetViewValue)(realm, v, byteOffset, littleEndian, "Int16");
});
// ECMA262 24.2.4.9
obj.defineNativeMethod("getInt32", 1, function (context, _ref9) {
var _ref10 = _slicedToArray(_ref9, 2),
byteOffset = _ref10[0],
littleEndian = _ref10[1];
// 1. Let v be the this value.
var v = context;
// 2. If littleEndian is not present, let littleEndian be false.
if (!littleEndian) littleEndian = realm.intrinsics.false;
// 3. Return ? GetViewValue(v, byteOffset, littleEndian, "Int32").
return (0, _arraybuffer.GetViewValue)(realm, v, byteOffset, littleEndian, "Int32");
});
// ECMA262 24.2.4.10
obj.defineNativeMethod("getUint8", 1, function (context, _ref11) {
var _ref12 = _slicedToArray(_ref11, 1),
byteOffset = _ref12[0];
// 1. Let v be the this value.
var v = context;
// 2. Return ? GetViewValue(v, byteOffset, true, "Uint8").
return (0, _arraybuffer.GetViewValue)(realm, v, byteOffset, realm.intrinsics.true, "Uint8");
});
// ECMA262 24.2.4.11
obj.defineNativeMethod("getUint16", 1, function (context, _ref13) {
var _ref14 = _slicedToArray(_ref13, 2),
byteOffset = _ref14[0],
littleEndian = _ref14[1];
// 1. Let v be the this value.
var v = context;
// 2. If littleEndian is not present, let littleEndian be false.
if (!littleEndian) littleEndian = realm.intrinsics.false;
// 3. Return ? GetViewValue(v, byteOffset, littleEndian, "Uint16").
return (0, _arraybuffer.GetViewValue)(realm, v, byteOffset, littleEndian, "Uint16");
});
// ECMA262 24.2.4.12
obj.defineNativeMethod("getUint32", 1, function (context, _ref15) {
var _ref16 = _slicedToArray(_ref15, 2),
byteOffset = _ref16[0],
littleEndian = _ref16[1];
// 1. Let v be the this value.
var v = context;
// 2. If littleEndian is not present, let littleEndian be false.
if (!littleEndian) littleEndian = realm.intrinsics.false;
// 3. Return ? GetViewValue(v, byteOffset, littleEndian, "Uint32").
return (0, _arraybuffer.GetViewValue)(realm, v, byteOffset, littleEndian, "Uint32");
});
// ECMA262 24.2.4.13
obj.defineNativeMethod("setFloat32", 2, function (context, _ref17) {
var _ref18 = _slicedToArray(_ref17, 3),
byteOffset = _ref18[0],
value = _ref18[1],
littleEndian = _ref18[2];
// 1. Let v be the this value.
var v = context;
// 2. If littleEndian is not present, let littleEndian be false.
if (!littleEndian) littleEndian = realm.intrinsics.false;
// 3. Return ? SetViewValue(v, byteOffset, littleEndian, "Float32", value).
return (0, _arraybuffer.SetViewValue)(realm, v, byteOffset, littleEndian, "Float32", value);
});
// ECMA262 24.2.4.14
obj.defineNativeMethod("setFloat64", 2, function (context, _ref19) {
var _ref20 = _slicedToArray(_ref19, 3),
byteOffset = _ref20[0],
value = _ref20[1],
littleEndian = _ref20[2];
// 1. Let v be the this value.
var v = context;
// 2. If littleEndian is not present, let littleEndian be false.
if (!littleEndian) littleEndian = realm.intrinsics.false;
// 3. Return ? SetViewValue(v, byteOffset, littleEndian, "Float64", value).
return (0, _arraybuffer.SetViewValue)(realm, v, byteOffset, littleEndian, "Float64", value);
});
// ECMA262 24.2.4.15
obj.defineNativeMethod("setInt8", 2, function (context, _ref21) {
var _ref22 = _slicedToArray(_ref21, 2),
byteOffset = _ref22[0],
value = _ref22[1];
// 1. Let v be the this value.
var v = context;
// 2. Return ? SetViewValue(v, byteOffset, true, "Int8", value).
return (0, _arraybuffer.SetViewValue)(realm, v, byteOffset, realm.intrinsics.true, "Int8", value);
});
// ECMA262 24.2.4.16
obj.defineNativeMethod("setInt16", 2, function (context, _ref23) {
var _ref24 = _slicedToArray(_ref23, 3),
byteOffset = _ref24[0],
value = _ref24[1],
littleEndian = _ref24[2];
// 1. Let v be the this value.
var v = context;
// 2. If littleEndian is not present, let littleEndian be false.
if (!littleEndian) littleEndian = realm.intrinsics.false;
// 3. Return ? SetViewValue(v, byteOffset, littleEndian, "Int16", value).
return (0, _arraybuffer.SetViewValue)(realm, v, byteOffset, littleEndian, "Int16", value);
});
// ECMA262 24.2.4.17
obj.defineNativeMethod("setInt32", 2, function (context, _ref25) {
var _ref26 = _slicedToArray(_ref25, 3),
byteOffset = _ref26[0],
value = _ref26[1],
littleEndian = _ref26[2];
// 1. Let v be the this value.
var v = context;
// 2. If littleEndian is not present, let littleEndian be false.
if (!littleEndian) littleEndian = realm.intrinsics.false;
// 3. Return ? SetViewValue(v, byteOffset, littleEndian, "Int32", value).
return (0, _arraybuffer.SetViewValue)(realm, v, byteOffset, littleEndian, "Int32", value);
});
// ECMA262 24.2.4.18
obj.defineNativeMethod("setUint8", 2, function (context, _ref27) {
var _ref28 = _slicedToArray(_ref27, 2),
byteOffset = _ref28[0],
value = _ref28[1];
// 1. Let v be the this value.
var v = context;
// 2. Return ? SetViewValue(v, byteOffset, true, "Uint8", value).
return (0, _arraybuffer.SetViewValue)(realm, v, byteOffset, realm.intrinsics.true, "Uint8", value);
});
// ECMA262 24.2.4.19
obj.defineNativeMethod("setUint16", 2, function (context, _ref29) {
var _ref30 = _slicedToArray(_ref29, 3),
byteOffset = _ref30[0],
value = _ref30[1],
littleEndian = _ref30[2];
// 1. Let v be the this value.
var v = context;
// 2. If littleEndian is not present, let littleEndian be false.
if (!littleEndian) littleEndian = realm.intrinsics.false;
// 3. Return ? SetViewValue(v, byteOffset, littleEndian, "Uint16", value).
return (0, _arraybuffer.SetViewValue)(realm, v, byteOffset, littleEndian, "Uint16", value);
});
// ECMA262 24.2.4.20
obj.defineNativeMethod("setUint32", 2, function (context, _ref31) {
var _ref32 = _slicedToArray(_ref31, 3),
byteOffset = _ref32[0],
value = _ref32[1],
littleEndian = _ref32[2];
// 1. Let v be the this value.
var v = context;
// 2. If littleEndian is not present, let littleEndian be false.
if (!littleEndian) littleEndian = realm.intrinsics.false;
// 3. Return ? SetViewValue(v, byteOffset, littleEndian, "Uint32", value).
return (0, _arraybuffer.SetViewValue)(realm, v, byteOffset, littleEndian, "Uint32", value);
});
// ECMA26224.2.4.21
obj.defineNativeProperty(realm.intrinsics.SymbolToStringTag, new _index.StringValue(realm, "DataView"), { writable: false });
};
var _index = require("../../values/index.js");
var _is = require("../../methods/is.js");
var _arraybuffer = require("../../methods/arraybuffer.js");
var _invariant = require("../../invariant.js");
var _invariant2 = _interopRequireDefault(_invariant);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
//# sourceMappingURL=DataViewPrototype.js.map

File diff suppressed because one or more lines are too long

View 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

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,897 @@
"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, obj) {
// ECMA262 20.3.4.2
obj.defineNativeMethod("getDate", 0, function (context) {
// 1. Let t be ? thisTimeValue(this value).
var 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, function (context) {
// 1. Let t be ? thisTimeValue(this value).
var 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, function (context) {
// 1. Let t be ? thisTimeValue(this value).
var 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, function (context) {
// 1. Let t be ? thisTimeValue(this value).
var 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, function (context) {
// 1. Let t be ? thisTimeValue(this value).
var 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, function (context) {
// 1. Let t be ? thisTimeValue(this value).
var 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, function (context) {
// 1. Let t be ? thisTimeValue(this value).
var 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, function (context) {
// 1. Let t be ? thisTimeValue(this value).
var 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, function (context) {
// 1. Return ? thisTimeValue(this value).
return (0, _index2.thisTimeValue)(realm, context);
});
// ECMA262 20.3.4.11
obj.defineNativeMethod("getTimezoneOffset", 0, function (context) {
// 1. Let t be ? thisTimeValue(this value).
var 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, function (context) {
// 1. Let t be ? thisTimeValue(this value).
var 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, function (context) {
// 1. Let t be ? thisTimeValue(this value).
var 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, function (context) {
// 1. Let t be ? thisTimeValue(this value).
var 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, function (context) {
// 1. Let t be ? thisTimeValue(this value).
var 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, function (context) {
// 1. Let t be ? thisTimeValue(this value).
var 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, function (context) {
// 1. Let t be ? thisTimeValue(this value).
var 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, function (context) {
// 1. Let t be ? thisTimeValue(this value).
var 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, function (context) {
// 1. Let t be ? thisTimeValue(this value).
var t = (0, _index2.thisTimeValue)(realm, context).throwIfNotConcreteNumber().value;
(0, _invariant2.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, function (context, _ref) {
var _ref2 = _slicedToArray(_ref, 1),
date = _ref2[0];
// 1. Let t be LocalTime(? thisTimeValue(this value)).
var t = (0, _index2.LocalTime)(realm, (0, _index2.thisTimeValue)(realm, context).throwIfNotConcreteNumber().value);
(0, _invariant2.default)(context instanceof _index.ObjectValue);
// 2. Let dt be ? ToNumber(date).
var dt = _singletons.To.ToNumber(realm, date);
// 3. Let newDate be MakeDate(MakeDay(YearFromTime(t), MonthFromTime(t), dt), TimeWithinDay(t)).
var 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)).
var 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, function (context, _ref3, argCount) {
var _ref4 = _slicedToArray(_ref3, 3),
year = _ref4[0],
month = _ref4[1],
date = _ref4[2];
// 1. Let t be ? thisTimeValue(this value).
var t = (0, _index2.thisTimeValue)(realm, context).throwIfNotConcreteNumber().value;
(0, _invariant2.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).
var y = _singletons.To.ToNumber(realm, year);
// 4. If month is not specified, let m be MonthFromTime(t); otherwise, let m be ? ToNumber(month).
var 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).
var dt = argCount >= 3 ? _singletons.To.ToNumber(realm, date) : (0, _index2.DateFromTime)(realm, t);
// 6. Let newDate be MakeDate(MakeDay(y, m, dt), TimeWithinDay(t)).
var newDate = (0, _index2.MakeDate)(realm, (0, _index2.MakeDay)(realm, y, m, dt), (0, _index2.TimeWithinDay)(realm, t));
// 7. Let u be TimeClip(UTC(newDate)).
var 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, function (context, _ref5, argCount) {
var _ref6 = _slicedToArray(_ref5, 4),
hour = _ref6[0],
min = _ref6[1],
sec = _ref6[2],
ms = _ref6[3];
// 1. Let t be LocalTime(? thisTimeValue(this value)).
var t = (0, _index2.LocalTime)(realm, (0, _index2.thisTimeValue)(realm, context).throwIfNotConcreteNumber().value);
(0, _invariant2.default)(context instanceof _index.ObjectValue);
// 2. Let h be ? ToNumber(hour).
var h = _singletons.To.ToNumber(realm, hour);
// 3. If min is not specified, let m be MinFromTime(t); otherwise, let m be ? ToNumber(min).
var 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).
var 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).
var 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)).
var 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)).
var 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, function (context, _ref7) {
var _ref8 = _slicedToArray(_ref7, 1),
ms = _ref8[0];
// 1. Let t be LocalTime(? thisTimeValue(this value)).
var t = (0, _index2.LocalTime)(realm, (0, _index2.thisTimeValue)(realm, context).throwIfNotConcreteNumber().value);
(0, _invariant2.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).
var 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))).
var 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, function (context, _ref9, argCount) {
var _ref10 = _slicedToArray(_ref9, 3),
min = _ref10[0],
sec = _ref10[1],
ms = _ref10[2];
// 1. Let t be LocalTime(? thisTimeValue(this value)).
var t = (0, _index2.LocalTime)(realm, (0, _index2.thisTimeValue)(realm, context).throwIfNotConcreteNumber().value);
(0, _invariant2.default)(context instanceof _index.ObjectValue);
// 2. Let m be ? ToNumber(min).
var m = _singletons.To.ToNumber(realm, min);
// 3. If sec is not specified, let s be SecFromTime(t); otherwise, let s be ? ToNumber(sec).
var 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).
var 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)).
var 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)).
var 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, function (context, _ref11, argCount) {
var _ref12 = _slicedToArray(_ref11, 2),
month = _ref12[0],
date = _ref12[1];
// 1. Let t be LocalTime(? thisTimeValue(this value)).
var t = (0, _index2.LocalTime)(realm, (0, _index2.thisTimeValue)(realm, context).throwIfNotConcreteNumber().value);
(0, _invariant2.default)(context instanceof _index.ObjectValue);
// 2. Let m be ? ToNumber(month).
var m = _singletons.To.ToNumber(realm, month);
// 3. If date is not specified, let dt be DateFromTime(t); otherwise, let dt be ? ToNumber(date).
var 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)).
var 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)).
var 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, function (context, _ref13, argCount) {
var _ref14 = _slicedToArray(_ref13, 2),
sec = _ref14[0],
ms = _ref14[1];
// 1. Let t be LocalTime(? thisTimeValue(this value)).
var t = (0, _index2.LocalTime)(realm, (0, _index2.thisTimeValue)(realm, context).throwIfNotConcreteNumber().value);
(0, _invariant2.default)(context instanceof _index.ObjectValue);
// 2. Let s be ? ToNumber(sec).
var s = _singletons.To.ToNumber(realm, sec);
// 3. If ms is not specified, let milli be msFromTime(t); otherwise, let milli be ? ToNumber(ms).
var 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)).
var 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)).
var 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, function (context, _ref15) {
var _ref16 = _slicedToArray(_ref15, 1),
time = _ref16[0];
// 1. Perform ? thisTimeValue(this value).
(0, _index2.thisTimeValue)(realm, context);
(0, _invariant2.default)(context instanceof _index.ObjectValue);
// 2. Let t be ? ToNumber(time).
var t = _singletons.To.ToNumber(realm, time);
// 3. Let v be TimeClip(t).
var 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, function (context, _ref17) {
var _ref18 = _slicedToArray(_ref17, 1),
date = _ref18[0];
// 1. Let t be ? thisTimeValue(this value).
var t = (0, _index2.thisTimeValue)(realm, context).throwIfNotConcreteNumber().value;
(0, _invariant2.default)(context instanceof _index.ObjectValue);
// 2. Let dt be ? ToNumber(date).
var dt = _singletons.To.ToNumber(realm, date);
// 3. Let newDate be MakeDate(MakeDay(YearFromTime(t), MonthFromTime(t), dt), TimeWithinDay(t)).
var 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).
var 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, function (context, _ref19, argCount) {
var _ref20 = _slicedToArray(_ref19, 3),
year = _ref20[0],
month = _ref20[1],
date = _ref20[2];
// 1. Let t be ? thisTimeValue(this value).
var t = (0, _index2.thisTimeValue)(realm, context).throwIfNotConcreteNumber().value;
(0, _invariant2.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).
var y = _singletons.To.ToNumber(realm, year);
// 4. If month is not specified, let m be MonthFromTime(t); otherwise, let m be ? ToNumber(month).
var 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).
var dt = argCount >= 3 ? _singletons.To.ToNumber(realm, date) : (0, _index2.DateFromTime)(realm, t);
// 6. Let newDate be MakeDate(MakeDay(y, m, dt), TimeWithinDay(t)).
var newDate = (0, _index2.MakeDate)(realm, (0, _index2.MakeDay)(realm, y, m, dt), (0, _index2.TimeWithinDay)(realm, t));
// 7. Let v be TimeClip(newDate).
var 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, function (context, _ref21, argCount) {
var _ref22 = _slicedToArray(_ref21, 4),
hour = _ref22[0],
min = _ref22[1],
sec = _ref22[2],
ms = _ref22[3];
// 1. Let t be ? thisTimeValue(this value).
var t = (0, _index2.thisTimeValue)(realm, context).throwIfNotConcreteNumber().value;
(0, _invariant2.default)(context instanceof _index.ObjectValue);
// 2. Let h be ? ToNumber(hour).
var h = _singletons.To.ToNumber(realm, hour);
// 3. If min is not specified, let m be MinFromTime(t); otherwise, let m be ? ToNumber(min).
var 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).
var 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).
var 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)).
var newDate = (0, _index2.MakeDate)(realm, (0, _index2.Day)(realm, t), (0, _index2.MakeTime)(realm, h, m, s, milli));
// 7. Let v be TimeClip(newDate).
var 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, function (context, _ref23) {
var _ref24 = _slicedToArray(_ref23, 1),
ms = _ref24[0];
// 1. Let t be ? thisTimeValue(this value).
var t = (0, _index2.thisTimeValue)(realm, context).throwIfNotConcreteNumber().value;
(0, _invariant2.default)(context instanceof _index.ObjectValue);
// 2. Let milli be ? ToNumber(ms).
var milli = _singletons.To.ToNumber(realm, ms);
// 3. Let time be MakeTime(HourFromTime(t), MinFromTime(t), SecFromTime(t), milli).
var 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)).
var 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, function (context, _ref25, argCount) {
var _ref26 = _slicedToArray(_ref25, 3),
min = _ref26[0],
sec = _ref26[1],
ms = _ref26[2];
// 1. Let t be ? thisTimeValue(this value).
var t = (0, _index2.thisTimeValue)(realm, context).throwIfNotConcreteNumber().value;
(0, _invariant2.default)(context instanceof _index.ObjectValue);
// 2. Let m be ? ToNumber(min).
var m = _singletons.To.ToNumber(realm, min);
// 3. If sec is not specified, let s be SecFromTime(t).
var s = void 0;
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).
var milli = void 0;
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)).
var 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).
var 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, function (context, _ref27, argCount) {
var _ref28 = _slicedToArray(_ref27, 2),
month = _ref28[0],
date = _ref28[1];
// 1. Let t be ? thisTimeValue(this value).
var t = (0, _index2.thisTimeValue)(realm, context).throwIfNotConcreteNumber().value;
(0, _invariant2.default)(context instanceof _index.ObjectValue);
// 2. Let m be ? ToNumber(month).
var m = _singletons.To.ToNumber(realm, month);
// 3. If date is not specified, let dt be DateFromTime(t).
var dt = void 0;
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)).
var 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).
var 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, function (context, _ref29, argCount) {
var _ref30 = _slicedToArray(_ref29, 2),
sec = _ref30[0],
ms = _ref30[1];
// 1. Let t be ? thisTimeValue(this value).
var t = (0, _index2.thisTimeValue)(realm, context).throwIfNotConcreteNumber().value;
(0, _invariant2.default)(context instanceof _index.ObjectValue);
// 2. Let s be ? ToNumber(sec).
var s = _singletons.To.ToNumber(realm, sec);
// 3. If ms is not specified, let milli be msFromTime(t).
var milli = void 0;
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)).
var 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).
var 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, function (context) {
throw new _errors.FatalError("TODO #1005: implement Date.prototype.toDateString");
});
// ECMA262 20.3.4.36
obj.defineNativeMethod("toISOString", 0, function (context) {
var 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, function (context, _ref31) {
var _ref32 = _slicedToArray(_ref31, 1),
key = _ref32[0];
// 1. Let O be ? ToObject(this value).
var O = _singletons.To.ToObject(realm, context.throwIfNotConcrete());
// 2. Let tv be ? ToPrimitive(O, hint Number).
var tv = _singletons.To.ToPrimitive(realm, O, "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, function (context) {
throw new _errors.FatalError("TODO #1005: implement Date.prototype.toLocaleDateString");
});
// ECMA262 20.3.4.39
obj.defineNativeMethod("toLocaleString", 0, function (context) {
throw new _errors.FatalError("TODO #1005: implement Date.prototype.toLocaleString");
});
// ECMA262 20.3.4.40
obj.defineNativeMethod("toLocaleTimeString", 0, function (context) {
throw new _errors.FatalError("TODO #1005: implement Date.prototype.toLocaleTimeString");
});
// ECMA262 20.3.4.41
obj.defineNativeMethod("toString", 0, function (context) {
// 1. Let O be this Date object.
var O = context;
// 2. If O does not have a [[DateValue]] internal slot, then
var tv = void 0;
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, function (context) {
throw new _errors.FatalError("TODO #1005: implement Date.prototype.toTimeString");
});
// ECMA262 20.3.4.43
obj.defineNativeMethod("toUTCString", 0, function (context) {
throw new _errors.FatalError("TODO #1005: implement Date.prototype.toUTCString");
});
// ECMA262 20.3.4.44
obj.defineNativeMethod("valueOf", 0, function (context) {
// 1. Return ? thisTimeValue(this value).
return (0, _index2.thisTimeValue)(realm, context);
});
// ECMA262 20.3.4.45
obj.defineNativeMethod(realm.intrinsics.SymbolToPrimitive, 1, function (context, _ref33) {
var _ref34 = _slicedToArray(_ref33, 1),
hint = _ref34[0];
// 1. Let O be the this value.
var 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");
}
var tryFirst = void 0;
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, function (context) {
// 1. Let t be ? thisTimeValue(this value).
var 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, function (context, _ref35) {
var _ref36 = _slicedToArray(_ref35, 1),
year = _ref36[0];
// 1. Let t be ? thisTimeValue(this value).
var t = (0, _index2.thisTimeValue)(realm, context).throwIfNotConcreteNumber().value;
(0, _invariant2.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).
var 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.
var yyyy = void 0;
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)).
var 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))).
var 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).
var 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));
};
var _errors = require("../../errors.js");
var _index = require("../../values/index.js");
var _index2 = require("../../methods/index.js");
var _singletons = require("../../singletons");
var _invariant = require("../../invariant.js");
var _invariant2 = _interopRequireDefault(_invariant);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
//# sourceMappingURL=DatePrototype.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,171 @@
"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) {
return build("Error", realm, false);
};
exports.describeLocation = describeLocation;
exports.build = build;
var _index = require("../../values/index.js");
var _index2 = require("../../methods/index.js");
var _singletons = require("../../singletons.js");
var _invariant = require("../../invariant.js");
var _invariant2 = _interopRequireDefault(_invariant);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function describeLocation(realm, callerFn, env, loc) {
var locString = "";
var displayName = "";
if (callerFn) {
if (callerFn instanceof _index.NativeFunctionValue) {
locString = "native";
}
var name = callerFn.$Get("name", callerFn);
if (!name.mightBeUndefined()) displayName = _singletons.To.ToStringPartial(realm, name);else name.throwIfNotConcrete();
if (env && env.$NewTarget) displayName = "new " + displayName;
}
if (!locString) {
if (loc) {
locString = loc.start.line + ":" + (loc.start.column + 1);
if (loc.source) locString = loc.source + ":" + locString;
} else {
locString = (loc ? loc.source : undefined) || "unknown";
if (!displayName) return undefined;
}
}
if (displayName) {
return "at " + displayName + " (" + locString + ")";
} else {
return "at " + locString;
}
}
function buildStack(realm, context) {
(0, _invariant2.default)(context.$ErrorData);
var stack = context.$ErrorData.contextStack;
if (!stack) return realm.intrinsics.undefined;
var lines = [];
var header = "";
header += _singletons.To.ToStringPartial(realm, (0, _index2.Get)(realm, context, "name"));
var msg = (0, _index2.Get)(realm, context, "message");
if (!msg.mightBeUndefined()) {
msg = _singletons.To.ToStringPartial(realm, msg);
if (msg) header += ": " + msg;
} else {
msg.throwIfNotConcrete();
}
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = stack.reverse()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var executionContext = _step.value;
var caller = executionContext.caller;
var locString = describeLocation(realm, caller ? caller.function : undefined, caller ? caller.lexicalEnvironment : undefined, executionContext.loc);
if (locString !== undefined) lines.push(locString);
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
return new _index.StringValue(realm, header + "\n " + lines.join("\n "));
}
function build(name, realm) {
var inheritError = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
var func = new _index.NativeFunctionValue(realm, name, name, 1, function (context, _ref, argLength, NewTarget) {
var _ref2 = _slicedToArray(_ref, 1),
message = _ref2[0];
// 1. If NewTarget is undefined, let newTarget be the active function object, else let newTarget be NewTarget.
var newTarget = NewTarget || func;
// 2. Let O be ? OrdinaryCreateFromConstructor(newTarget, "%ErrorPrototype%", « [[ErrorData]] »).
var O = _singletons.Create.OrdinaryCreateFromConstructor(realm, newTarget, name + "Prototype", { $ErrorData: undefined });
O.$ErrorData = {
contextStack: realm.contextStack.slice(1),
locationData: undefined
};
// Build a text description of the stack.
var stackDesc = {
value: buildStack(realm, O),
enumerable: false,
configurable: true,
writable: true
};
_singletons.Properties.DefinePropertyOrThrow(realm, O, "stack", stackDesc);
// 3. If message is not undefined, then
if (!message.mightBeUndefined()) {
// a. Let msg be ? ToString(message).
var msg = message.getType() === _index.StringValue ? message : _singletons.To.ToStringValue(realm, message);
// b. Let msgDesc be the PropertyDescriptor{[[Value]]: msg, [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: true}.
var msgDesc = {
value: msg,
writable: true,
enumerable: false,
configurable: true
};
// c. Perform ! DefinePropertyOrThrow(O, "message", msgDesc).
_singletons.Properties.DefinePropertyOrThrow(realm, O, "message", msgDesc);
} else {
message.throwIfNotConcrete();
}
// 4. Return O.
return O;
});
if (inheritError) {
func.$Prototype = realm.intrinsics.Error;
}
return func;
}
//# sourceMappingURL=Error.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,82 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function (realm, obj) {
return build("Error", realm, obj);
};
exports.build = build;
var _index = require("../../values/index.js");
var _index2 = require("../../methods/index.js");
var _singletons = require("../../singletons.js");
var _builder = require("../../utils/builder.js");
var _builder2 = _interopRequireDefault(_builder);
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.
*/
var tsTemplateSrc = "(A).toString()";
var tsTemplate = (0, _builder2.default)(tsTemplateSrc);
function build(name, realm, obj) {
// ECMA262 19.5.3.2
obj.defineNativeProperty("message", realm.intrinsics.emptyString);
// ECMA262 19.5.3.3
obj.defineNativeProperty("name", new _index.StringValue(realm, name));
// ECMA262 19.5.3.4
obj.defineNativeMethod("toString", 0, function (context) {
// 1. Let O be the this value.
var 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);
}
// 3. Let name be ? Get(O, "name").
var nameValue = (0, _index2.Get)(realm, O, "name");
if (nameValue instanceof _index.AbstractValue) {
return _index.AbstractValue.createFromTemplate(realm, tsTemplate, _index.StringValue, [O], tsTemplateSrc);
}
// 4. If name is undefined, let name be "Error"; otherwise let name be ? ToString(name).
var nameString = nameValue instanceof _index.UndefinedValue ? "Error" : _singletons.To.ToStringPartial(realm, nameValue);
// 5. Let msg be ? Get(O, "message").
var msg = (0, _index2.Get)(realm, O, "message");
if (msg instanceof _index.AbstractValue) {
return _index.AbstractValue.createFromTemplate(realm, tsTemplate, _index.StringValue, [O], tsTemplateSrc);
}
// 6. If msg is undefined, let msg be the empty String; otherwise let msg be ? ToString(msg).
msg = msg instanceof _index.UndefinedValue ? "" : _singletons.To.ToStringPartial(realm, msg);
// 7. If name is the empty String, return msg.
if (nameString === "") return new _index.StringValue(realm, msg);
// 8. If msg is the empty String, return name.
if (msg === "") return new _index.StringValue(realm, nameString);
// 9. Return the result of concatenating name, the code unit 0x003A (COLON), the code unit 0x0020 (SPACE), and msg.
return new _index.StringValue(realm, nameString + ": " + msg);
});
}
//# sourceMappingURL=ErrorPrototype.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../../src/intrinsics/ecma262/ErrorPrototype.js"],"names":["realm","obj","build","tsTemplateSrc","tsTemplate","name","defineNativeProperty","intrinsics","emptyString","defineNativeMethod","O","context","throwIfNotConcrete","createErrorThrowCompletion","TypeError","nameValue","createFromTemplate","nameString","ToStringPartial","msg"],"mappings":";;;;;;kBAiBe,UAASA,KAAT,EAAuBC,GAAvB,EAA+C;AAC5D,SAAOC,MAAM,OAAN,EAAeF,KAAf,EAAsBC,GAAtB,CAAP;AACD,C;;QAKeC,K,GAAAA,K;;AAZhB;;AACA;;AACA;;AACA;;;;;;AAfA;;;;;;;;;AAqBA,IAAMC,gBAAgB,gBAAtB;AACA,IAAMC,aAAa,uBAAwBD,aAAxB,CAAnB;;AAEO,SAASD,KAAT,CAAeG,IAAf,EAA6BL,KAA7B,EAA2CC,GAA3C,EAAmE;AACxE;AACAA,MAAIK,oBAAJ,CAAyB,SAAzB,EAAoCN,MAAMO,UAAN,CAAiBC,WAArD;;AAEA;AACAP,MAAIK,oBAAJ,CAAyB,MAAzB,EAAiC,uBAAgBN,KAAhB,EAAuBK,IAAvB,CAAjC;;AAEA;AACAJ,MAAIQ,kBAAJ,CAAuB,UAAvB,EAAmC,CAAnC,EAAsC,mBAAW;AAC/C;AACA,QAAIC,IAAIC,QAAQC,kBAAR,EAAR;;AAEA;AACA,QAAI,EAAEF,+BAAF,CAAJ,EAAiC;AAC/B,YAAMV,MAAMa,0BAAN,CAAiCb,MAAMO,UAAN,CAAiBO,SAAlD,CAAN;AACD;;AAED;AACA,QAAIC,YAAY,iBAAIf,KAAJ,EAAWU,CAAX,EAAc,MAAd,CAAhB;AACA,QAAIK,yCAAJ,EAAwC;AACtC,aAAO,qBAAcC,kBAAd,CAAiChB,KAAjC,EAAwCI,UAAxC,sBAAiE,CAACM,CAAD,CAAjE,EAAsEP,aAAtE,CAAP;AACD;;AAED;AACA,QAAIc,aAAaF,6CAAsC,OAAtC,GAAgD,eAAGG,eAAH,CAAmBlB,KAAnB,EAA0Be,SAA1B,CAAjE;;AAEA;AACA,QAAII,MAAM,iBAAInB,KAAJ,EAAWU,CAAX,EAAc,SAAd,CAAV;AACA,QAAIS,mCAAJ,EAAkC;AAChC,aAAO,qBAAcH,kBAAd,CAAiChB,KAAjC,EAAwCI,UAAxC,sBAAiE,CAACM,CAAD,CAAjE,EAAsEP,aAAtE,CAAP;AACD;;AAED;AACAgB,UAAMA,uCAAgC,EAAhC,GAAqC,eAAGD,eAAH,CAAmBlB,KAAnB,EAA0BmB,GAA1B,CAA3C;;AAEA;AACA,QAAIF,eAAe,EAAnB,EAAuB,OAAO,uBAAgBjB,KAAhB,EAAuBmB,GAAvB,CAAP;;AAEvB;AACA,QAAIA,QAAQ,EAAZ,EAAgB,OAAO,uBAAgBnB,KAAhB,EAAuBiB,UAAvB,CAAP;;AAEhB;AACA,WAAO,uBAAgBjB,KAAhB,EAA0BiB,UAA1B,UAAyCE,GAAzC,CAAP;AACD,GAnCD;AAoCD","file":"ErrorPrototype.js","sourcesContent":["/**\n * Copyright (c) 2017-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n/* @flow */\n\nimport type { Realm } from \"../../realm.js\";\nimport { AbstractValue, ObjectValue, StringValue, UndefinedValue } from \"../../values/index.js\";\nimport { Get } from \"../../methods/index.js\";\nimport { To } from \"../../singletons.js\";\nimport buildExpressionTemplate from \"../../utils/builder.js\";\n\nexport default function(realm: Realm, obj: ObjectValue): void {\n return build(\"Error\", realm, obj);\n}\n\nconst tsTemplateSrc = \"(A).toString()\";\nconst tsTemplate = buildExpressionTemplate(tsTemplateSrc);\n\nexport function build(name: string, realm: Realm, obj: ObjectValue): void {\n // ECMA262 19.5.3.2\n obj.defineNativeProperty(\"message\", realm.intrinsics.emptyString);\n\n // ECMA262 19.5.3.3\n obj.defineNativeProperty(\"name\", new StringValue(realm, name));\n\n // ECMA262 19.5.3.4\n obj.defineNativeMethod(\"toString\", 0, context => {\n // 1. Let O be the this value.\n let O = context.throwIfNotConcrete();\n\n // 2. If Type(O) is not Object, throw a TypeError exception.\n if (!(O instanceof ObjectValue)) {\n throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError);\n }\n\n // 3. Let name be ? Get(O, \"name\").\n let nameValue = Get(realm, O, \"name\");\n if (nameValue instanceof AbstractValue) {\n return AbstractValue.createFromTemplate(realm, tsTemplate, StringValue, [O], tsTemplateSrc);\n }\n\n // 4. If name is undefined, let name be \"Error\"; otherwise let name be ? ToString(name).\n let nameString = nameValue instanceof UndefinedValue ? \"Error\" : To.ToStringPartial(realm, nameValue);\n\n // 5. Let msg be ? Get(O, \"message\").\n let msg = Get(realm, O, \"message\");\n if (msg instanceof AbstractValue) {\n return AbstractValue.createFromTemplate(realm, tsTemplate, StringValue, [O], tsTemplateSrc);\n }\n\n // 6. If msg is undefined, let msg be the empty String; otherwise let msg be ? ToString(msg).\n msg = msg instanceof UndefinedValue ? \"\" : To.ToStringPartial(realm, msg);\n\n // 7. If name is the empty String, return msg.\n if (nameString === \"\") return new StringValue(realm, msg);\n\n // 8. If msg is the empty String, return name.\n if (msg === \"\") return new StringValue(realm, nameString);\n\n // 9. Return the result of concatenating name, the code unit 0x003A (COLON), the code unit 0x0020 (SPACE), and msg.\n return new StringValue(realm, `${nameString}: ${msg}`);\n });\n}\n"]}

View File

@@ -0,0 +1,12 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function (realm) {
return (0, _Error.build)("EvalError", realm);
};
var _Error = require("./Error.js");
//# sourceMappingURL=EvalError.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../../src/intrinsics/ecma262/EvalError.js"],"names":["realm"],"mappings":";;;;;;kBAee,UAASA,KAAT,EAA4C;AACzD,SAAO,kBAAM,WAAN,EAAmBA,KAAnB,CAAP;AACD,C;;AAJD","file":"EvalError.js","sourcesContent":["/**\n * Copyright (c) 2017-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n/* @flow */\n\nimport type { Realm } from \"../../realm.js\";\nimport type { NativeFunctionValue } from \"../../values/index.js\";\nimport { build } from \"./Error.js\";\n\nexport default function(realm: Realm): NativeFunctionValue {\n return build(\"EvalError\", realm);\n}\n"]}

View File

@@ -0,0 +1,13 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function (realm, obj) {
obj.defineNativeProperty("name", new _index.StringValue(realm, "EvalError"));
obj.defineNativeProperty("message", realm.intrinsics.emptyString);
};
var _index = require("../../values/index.js");
//# sourceMappingURL=EvalErrorPrototype.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../../src/intrinsics/ecma262/EvalErrorPrototype.js"],"names":["realm","obj","defineNativeProperty","intrinsics","emptyString"],"mappings":";;;;;;kBAce,UAASA,KAAT,EAAuBC,GAAvB,EAA+C;AAC5DA,MAAIC,oBAAJ,CAAyB,MAAzB,EAAiC,uBAAgBF,KAAhB,EAAuB,WAAvB,CAAjC;AACAC,MAAIC,oBAAJ,CAAyB,SAAzB,EAAoCF,MAAMG,UAAN,CAAiBC,WAArD;AACD,C;;AALD","file":"EvalErrorPrototype.js","sourcesContent":["/**\n * Copyright (c) 2017-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n/* @flow */\n\nimport type { Realm } from \"../../realm.js\";\nimport { ObjectValue, StringValue } from \"../../values/index.js\";\n\nexport default function(realm: Realm, obj: ObjectValue): void {\n obj.defineNativeProperty(\"name\", new StringValue(realm, \"EvalError\"));\n obj.defineNativeProperty(\"message\", realm.intrinsics.emptyString);\n}\n"]}

View File

@@ -0,0 +1,14 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function (realm) {
return (0, _TypedArray.build)(realm, "Float32");
};
var _index = require("../../values/index.js");
var _TypedArray = require("./TypedArray.js");
//# sourceMappingURL=Float32Array.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../../src/intrinsics/ecma262/Float32Array.js"],"names":["realm"],"mappings":";;;;;;kBAee,UAASA,KAAT,EAA4C;AACzD,SAAO,uBAAMA,KAAN,EAAa,SAAb,CAAP;AACD,C;;AALD;;AACA","file":"Float32Array.js","sourcesContent":["/**\n * Copyright (c) 2017-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n/* @flow */\n\nimport type { Realm } from \"../../realm.js\";\nimport { NativeFunctionValue } from \"../../values/index.js\";\nimport { build } from \"./TypedArray.js\";\n\nexport default function(realm: Realm): NativeFunctionValue {\n return build(realm, \"Float32\");\n}\n"]}

View File

@@ -0,0 +1,12 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function (realm, obj) {
(0, _TypedArrayPrototype.build)(realm, obj, "Float32");
};
var _TypedArrayPrototype = require("./TypedArrayPrototype.js");
//# sourceMappingURL=Float32ArrayPrototype.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../../src/intrinsics/ecma262/Float32ArrayPrototype.js"],"names":["realm","obj"],"mappings":";;;;;;kBAee,UAASA,KAAT,EAAuBC,GAAvB,EAA+C;AAC5D,kCAAMD,KAAN,EAAaC,GAAb,EAAkB,SAAlB;AACD,C;;AAJD","file":"Float32ArrayPrototype.js","sourcesContent":["/**\n * Copyright (c) 2017-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n/* @flow */\n\nimport type { Realm } from \"../../realm.js\";\nimport type { ObjectValue } from \"../../values/index.js\";\nimport { build } from \"./TypedArrayPrototype.js\";\n\nexport default function(realm: Realm, obj: ObjectValue): void {\n build(realm, obj, \"Float32\");\n}\n"]}

View File

@@ -0,0 +1,14 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function (realm) {
return (0, _TypedArray.build)(realm, "Float64");
};
var _index = require("../../values/index.js");
var _TypedArray = require("./TypedArray.js");
//# sourceMappingURL=Float64Array.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../../src/intrinsics/ecma262/Float64Array.js"],"names":["realm"],"mappings":";;;;;;kBAee,UAASA,KAAT,EAA4C;AACzD,SAAO,uBAAMA,KAAN,EAAa,SAAb,CAAP;AACD,C;;AALD;;AACA","file":"Float64Array.js","sourcesContent":["/**\n * Copyright (c) 2017-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n/* @flow */\n\nimport type { Realm } from \"../../realm.js\";\nimport { NativeFunctionValue } from \"../../values/index.js\";\nimport { build } from \"./TypedArray.js\";\n\nexport default function(realm: Realm): NativeFunctionValue {\n return build(realm, \"Float64\");\n}\n"]}

View File

@@ -0,0 +1,12 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function (realm, obj) {
(0, _TypedArrayPrototype.build)(realm, obj, "Float64");
};
var _TypedArrayPrototype = require("./TypedArrayPrototype.js");
//# sourceMappingURL=Float64ArrayPrototype.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../../src/intrinsics/ecma262/Float64ArrayPrototype.js"],"names":["realm","obj"],"mappings":";;;;;;kBAee,UAASA,KAAT,EAAuBC,GAAvB,EAA+C;AAC5D,kCAAMD,KAAN,EAAaC,GAAb,EAAkB,SAAlB;AACD,C;;AAJD","file":"Float64ArrayPrototype.js","sourcesContent":["/**\n * Copyright (c) 2017-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n/* @flow */\n\nimport type { Realm } from \"../../realm.js\";\nimport type { ObjectValue } from \"../../values/index.js\";\nimport { build } from \"./TypedArrayPrototype.js\";\n\nexport default function(realm: Realm, obj: ObjectValue): void {\n build(realm, obj, \"Float64\");\n}\n"]}

View File

@@ -0,0 +1,26 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function (realm) {
// ECMA262 19.2.1
var func = new _index.NativeFunctionValue(realm, "Function", "Function", 1, function (context, args, argCount, NewTarget) {
// 1. Let C be the active function object.
var C = func;
// 2. Let args be the argumentsList that was passed to this function by [[Call]] or [[Construct]].
args = argCount > 0 ? args : [];
// 3. Return ? CreateDynamicFunction(C, NewTarget, "normal", args).
return _singletons.Create.CreateDynamicFunction(realm, C, NewTarget, "normal", args);
});
return func;
};
var _index = require("../../values/index.js");
var _singletons = require("../../singletons.js");
//# sourceMappingURL=Function.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../../src/intrinsics/ecma262/Function.js"],"names":["realm","func","context","args","argCount","NewTarget","C","CreateDynamicFunction"],"mappings":";;;;;;kBAee,UAASA,KAAT,EAA4C;AACzD;AACA,MAAIC,OAAO,+BAAwBD,KAAxB,EAA+B,UAA/B,EAA2C,UAA3C,EAAuD,CAAvD,EAA0D,UAACE,OAAD,EAAUC,IAAV,EAAgBC,QAAhB,EAA0BC,SAA1B,EAAwC;AAC3G;AACA,QAAIC,IAAIL,IAAR;;AAEA;AACAE,WAAOC,WAAW,CAAX,GAAeD,IAAf,GAAsB,EAA7B;;AAEA;AACA,WAAO,mBAAOI,qBAAP,CAA6BP,KAA7B,EAAoCM,CAApC,EAAuCD,SAAvC,EAAkD,QAAlD,EAA4DF,IAA5D,CAAP;AACD,GATU,CAAX;;AAWA,SAAOF,IAAP;AACD,C;;AAjBD;;AACA","file":"Function.js","sourcesContent":["/**\n * Copyright (c) 2017-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n/* @flow */\n\nimport type { Realm } from \"../../realm.js\";\nimport { NativeFunctionValue } from \"../../values/index.js\";\nimport { Create } from \"../../singletons.js\";\n\nexport default function(realm: Realm): NativeFunctionValue {\n // ECMA262 19.2.1\n let func = new NativeFunctionValue(realm, \"Function\", \"Function\", 1, (context, args, argCount, NewTarget) => {\n // 1. Let C be the active function object.\n let C = func;\n\n // 2. Let args be the argumentsList that was passed to this function by [[Call]] or [[Construct]].\n args = argCount > 0 ? args : [];\n\n // 3. Return ? CreateDynamicFunction(C, NewTarget, \"normal\", args).\n return Create.CreateDynamicFunction(realm, C, NewTarget, \"normal\", args);\n });\n\n return func;\n}\n"]}

View File

@@ -0,0 +1,201 @@
"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"); } }; }();
exports.default = function (realm, obj) {
// ECMA262 19.2.3
obj.$Call = function (thisArgument, argsList) {
return realm.intrinsics.undefined;
};
// ECMA262 19.2.3
obj.defineNativeProperty("length", realm.intrinsics.zero, { writable: false });
// ECMA262 19.2.3
obj.defineNativeProperty("name", realm.intrinsics.emptyString, { writable: false });
// ECMA262 19.2.3.3
obj.defineNativeMethod("call", 1, function (func, _ref) {
var _ref2 = _toArray(_ref),
thisArg = _ref2[0],
argList = _ref2.slice(1);
// 1. If IsCallable(func) is false, throw a TypeError exception.
if ((0, _is.IsCallable)(realm, func) === false) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError, "not callable");
}
// 2. Let argList be a new empty List.
// 3. If this method was called with more than one argument, then in left to right order,
// starting with the second argument, append each argument as the last element of argList.
argList;
// TODO #1008 4. Perform PrepareForTailCall().
// 5. Return ? Call(func, thisArg, argList).
return (0, _call.Call)(realm, func, thisArg, argList);
});
// ECMA262 19.2.3.1
obj.defineNativeMethod("apply", 2, function (func, _ref3) {
var _ref4 = _slicedToArray(_ref3, 2),
thisArg = _ref4[0],
argArray = _ref4[1];
// 1. If IsCallable(func) is false, throw a TypeError exception.
if ((0, _is.IsCallable)(realm, func) === false) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError, "not callable");
}
// 2. If argArray is null or undefined, then
if ((0, _has.HasSomeCompatibleType)(argArray, _index.NullValue, _index.UndefinedValue)) {
// TODO #1008 a. Perform PrepareForTailCall().
// b. Return ? Call(func, thisArg).
return (0, _call.Call)(realm, func, thisArg);
}
// 3. Let argList be ? CreateListFromArrayLike(argArray).
var argList = _singletons.Create.CreateListFromArrayLike(realm, argArray);
// TODO #1008 4. Perform PrepareForTailCall().
// 5. Return ? Call(func, thisArg, argList).
return (0, _call.Call)(realm, func, thisArg, argList);
});
// ECMA262 19.2.3.2
obj.defineNativeMethod("bind", 1, function (context, _ref5) {
var _ref6 = _toArray(_ref5),
thisArg = _ref6[0],
args = _ref6.slice(1);
// 1. Let Target be the realm value.
var Target = context;
// 2. If IsCallable(Target) is false, throw a TypeError exception.
if ((0, _is.IsCallable)(realm, Target) === false) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError);
}
(0, _invariant2.default)(Target instanceof _index.ObjectValue);
// 3. Let args be a new (possibly empty) List consisting of all of the argument values provided after thisArg in order.
args;
// 4. Let F be ? BoundFunctionCreate(Target, thisArg, args).
var F = _singletons.Functions.BoundFunctionCreate(realm, Target, thisArg, args);
// 5. Let targetHasLength be ? HasOwnProperty(Target, "length").
var targetHasLength = (0, _has.HasOwnProperty)(realm, Target, new _index.StringValue(realm, "length"));
var L = void 0;
// 6. If targetHasLength is true, then
if (targetHasLength === true) {
// a. Let targetLen be ? Get(Target, "length").
var targetLen = (0, _get.Get)(realm, Target, new _index.StringValue(realm, "length"));
// b. If Type(targetLen) is not Number, let L be 0.
if (!targetLen.mightBeNumber()) {
L = 0;
} else {
// c. Else,
targetLen = targetLen.throwIfNotConcreteNumber();
// i. Let targetLen be ToInteger(targetLen).
targetLen = _singletons.To.ToInteger(realm, targetLen);
// ii. Let L be the larger of 0 and the result of targetLen minus the number of elements of args.
L = Math.max(0, targetLen - args.length);
}
} else {
// 7. Else let L be 0.
L = 0;
}
// 8. Perform ! DefinePropertyOrThrow(F, "length", PropertyDescriptor {[[Value]]: L, [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true}).
_singletons.Properties.DefinePropertyOrThrow(realm, F, "length", {
value: new _index.NumberValue(realm, L),
writable: false,
enumerable: false,
configurable: true
});
// 9. Let targetName be ? Get(Target, "name").
var targetName = (0, _get.Get)(realm, Target, new _index.StringValue(realm, "name"));
// 10. If Type(targetName) is not String, let targetName be the empty string.
if (!(targetName instanceof _index.StringValue)) targetName = realm.intrinsics.emptyString;
// 11. Perform SetFunctionName(F, targetName, "bound").
_singletons.Functions.SetFunctionName(realm, F, targetName, "bound");
// 12. Return F.
return F;
});
// ECMA262 19.2.3.6
obj.defineNativeMethod(realm.intrinsics.SymbolHasInstance, 1, function (context, _ref7) {
var _ref8 = _slicedToArray(_ref7, 1),
V = _ref8[0];
// 1. Let F be the this value.
var F = context;
// 2. Return ? OrdinaryHasInstance(F, V).
return new _index.BooleanValue(realm, (0, _abstract.OrdinaryHasInstance)(realm, F, V));
}, { writable: false, configurable: false });
// ECMA262 19.2.3.5
obj.defineNativeMethod("toString", 0, function (context) {
context = context.throwIfNotConcrete();
if (context instanceof _index.NativeFunctionValue) {
var name = context.name;
if (name instanceof _index.AbstractValue) {
return new _index.StringValue(realm, "function () {[native code]}");
} else {
(0, _invariant2.default)(typeof name === "string");
return new _index.StringValue(realm, "function " + name + "() { [native code] }");
}
} else if (context instanceof _index.FunctionValue) {
// TODO #1009: provide function source code
return new _index.StringValue(realm, "function () { }");
} else {
// 3. Throw a TypeError exception.
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError, new _index.StringValue(realm, "Function.prototype.toString is not generic"));
}
});
};
var _singletons = require("../../singletons.js");
var _index = require("../../values/index.js");
var _call = require("../../methods/call.js");
var _get = require("../../methods/get.js");
var _is = require("../../methods/is.js");
var _has = require("../../methods/has.js");
var _abstract = require("../../methods/abstract.js");
var _invariant = require("../../invariant.js");
var _invariant2 = _interopRequireDefault(_invariant);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _toArray(arr) { return Array.isArray(arr) ? arr : Array.from(arr); } /**
* 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.
*/
//# sourceMappingURL=FunctionPrototype.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,15 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function (realm, obj) {
// ECMA262 25.3.1.5
obj.defineNativeProperty(realm.intrinsics.SymbolToStringTag, new _index.StringValue(realm, "GeneratorFunction"), {
writable: false
});
};
var _index = require("../../values/index.js");
//# sourceMappingURL=Generator.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../../src/intrinsics/ecma262/Generator.js"],"names":["realm","obj","defineNativeProperty","intrinsics","SymbolToStringTag","writable"],"mappings":";;;;;;kBAce,UAASA,KAAT,EAAuBC,GAAvB,EAA+C;AAC5D;AACAA,MAAIC,oBAAJ,CAAyBF,MAAMG,UAAN,CAAiBC,iBAA1C,EAA6D,uBAAgBJ,KAAhB,EAAuB,mBAAvB,CAA7D,EAA0G;AACxGK,cAAU;AAD8F,GAA1G;AAGD,C;;AAPD","file":"Generator.js","sourcesContent":["/**\n * Copyright (c) 2017-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n/* @flow */\n\nimport type { Realm } from \"../../realm.js\";\nimport { ObjectValue, StringValue } from \"../../values/index.js\";\n\nexport default function(realm: Realm, obj: ObjectValue): void {\n // ECMA262 25.3.1.5\n obj.defineNativeProperty(realm.intrinsics.SymbolToStringTag, new StringValue(realm, \"GeneratorFunction\"), {\n writable: false,\n });\n}\n"]}

View File

@@ -0,0 +1,26 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function (realm) {
// ECMA262 25.2.1
var func = new _index.NativeFunctionValue(realm, "GeneratorFunction", "GeneratorFunction", 1, function (context, args, argCount, NewTarget) {
// 1. Let C be the active function object.
var C = func;
// 2. Let args be the argumentsList that was passed to this function by [[Call]] or [[Construct]].
args = argCount > 0 ? args : [];
// 3. Return ? CreateDynamicFunction(C, NewTarget, "generator", args).
return _singletons.Create.CreateDynamicFunction(realm, C, NewTarget, "generator", args);
});
return func;
};
var _index = require("../../values/index.js");
var _singletons = require("../../singletons.js");
//# sourceMappingURL=GeneratorFunction.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../../src/intrinsics/ecma262/GeneratorFunction.js"],"names":["realm","func","context","args","argCount","NewTarget","C","CreateDynamicFunction"],"mappings":";;;;;;kBAee,UAASA,KAAT,EAA4C;AACzD;AACA,MAAIC,OAAO,+BACTD,KADS,EAET,mBAFS,EAGT,mBAHS,EAIT,CAJS,EAKT,UAACE,OAAD,EAAUC,IAAV,EAAgBC,QAAhB,EAA0BC,SAA1B,EAAwC;AACtC;AACA,QAAIC,IAAIL,IAAR;;AAEA;AACAE,WAAOC,WAAW,CAAX,GAAeD,IAAf,GAAsB,EAA7B;;AAEA;AACA,WAAO,mBAAOI,qBAAP,CAA6BP,KAA7B,EAAoCM,CAApC,EAAuCD,SAAvC,EAAkD,WAAlD,EAA+DF,IAA/D,CAAP;AACD,GAdQ,CAAX;;AAiBA,SAAOF,IAAP;AACD,C;;AAvBD;;AACA","file":"GeneratorFunction.js","sourcesContent":["/**\n * Copyright (c) 2017-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n/* @flow */\n\nimport type { Realm } from \"../../realm.js\";\nimport { NativeFunctionValue } from \"../../values/index.js\";\nimport { Create } from \"../../singletons.js\";\n\nexport default function(realm: Realm): NativeFunctionValue {\n // ECMA262 25.2.1\n let func = new NativeFunctionValue(\n realm,\n \"GeneratorFunction\",\n \"GeneratorFunction\",\n 1,\n (context, args, argCount, NewTarget) => {\n // 1. Let C be the active function object.\n let C = func;\n\n // 2. Let args be the argumentsList that was passed to this function by [[Call]] or [[Construct]].\n args = argCount > 0 ? args : [];\n\n // 3. Return ? CreateDynamicFunction(C, NewTarget, \"generator\", args).\n return Create.CreateDynamicFunction(realm, C, NewTarget, \"generator\", args);\n }\n );\n\n return func;\n}\n"]}

View File

@@ -0,0 +1,70 @@
"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, obj) {
// ECMA262 25.3.1.2
obj.defineNativeMethod("next", 1, function (context, _ref) {
var _ref2 = _slicedToArray(_ref, 1),
value = _ref2[0];
// 1. Let g be the this value.
var g = context;
// 2. Return ? GeneratorResume(g, value).
return (0, _generator.GeneratorResume)(realm, g, value);
});
// ECMA262 25.3.1.3
obj.defineNativeMethod("return", 1, function (context, _ref3) {
var _ref4 = _slicedToArray(_ref3, 1),
value = _ref4[0];
// 1. Let g be the this value.
var g = context;
// 2. Let C be Completion{[[Type]]: return, [[Value]]: value, [[Target]]: empty}.
var C = new _completions.ReturnCompletion(value, realm.currentLocation);
// 3. Return ? GeneratorResumeAbrupt(g, C).
return (0, _generator.GeneratorResumeAbrupt)(realm, g, C);
});
// ECMA262 25.3.1.4
obj.defineNativeMethod("throw", 1, function (context, _ref5) {
var _ref6 = _slicedToArray(_ref5, 1),
exception = _ref6[0];
// 1. Let g be the this value.
var g = context;
// 2. Let C be Completion{[[Type]]: throw, [[Value]]: exception, [[Target]]: empty}.
var C = new _completions.ReturnCompletion(exception, realm.currentLocation);
// 3. Return ? GeneratorResumeAbrupt(g, C).
return (0, _generator.GeneratorResumeAbrupt)(realm, g, C);
});
// ECMA262 25.3.1.5
obj.defineNativeProperty(realm.intrinsics.SymbolToStringTag, new _index.StringValue(realm, "Generator"), {
writable: false
});
};
var _completions = require("../../completions.js");
var _index = require("../../values/index.js");
var _generator = require("../../methods/generator.js");
//# sourceMappingURL=GeneratorPrototype.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../../src/intrinsics/ecma262/GeneratorPrototype.js"],"names":["realm","obj","defineNativeMethod","context","value","g","C","currentLocation","exception","defineNativeProperty","intrinsics","SymbolToStringTag","writable"],"mappings":";;;;;;ypBAAA;;;;;;;;;kBAgBe,UAASA,KAAT,EAAuBC,GAAvB,EAA+C;AAC5D;AACAA,MAAIC,kBAAJ,CAAuB,MAAvB,EAA+B,CAA/B,EAAkC,UAACC,OAAD,QAAsB;AAAA;AAAA,QAAXC,KAAW;;AACtD;AACA,QAAIC,IAAIF,OAAR;;AAEA;AACA,WAAO,gCAAgBH,KAAhB,EAAuBK,CAAvB,EAA0BD,KAA1B,CAAP;AACD,GAND;;AAQA;AACAH,MAAIC,kBAAJ,CAAuB,QAAvB,EAAiC,CAAjC,EAAoC,UAACC,OAAD,SAAsB;AAAA;AAAA,QAAXC,KAAW;;AACxD;AACA,QAAIC,IAAIF,OAAR;;AAEA;AACA,QAAIG,IAAI,kCAAqBF,KAArB,EAA4BJ,MAAMO,eAAlC,CAAR;;AAEA;AACA,WAAO,sCAAsBP,KAAtB,EAA6BK,CAA7B,EAAgCC,CAAhC,CAAP;AACD,GATD;;AAWA;AACAL,MAAIC,kBAAJ,CAAuB,OAAvB,EAAgC,CAAhC,EAAmC,UAACC,OAAD,SAA0B;AAAA;AAAA,QAAfK,SAAe;;AAC3D;AACA,QAAIH,IAAIF,OAAR;;AAEA;AACA,QAAIG,IAAI,kCAAqBE,SAArB,EAAgCR,MAAMO,eAAtC,CAAR;;AAEA;AACA,WAAO,sCAAsBP,KAAtB,EAA6BK,CAA7B,EAAgCC,CAAhC,CAAP;AACD,GATD;;AAWA;AACAL,MAAIQ,oBAAJ,CAAyBT,MAAMU,UAAN,CAAiBC,iBAA1C,EAA6D,uBAAgBX,KAAhB,EAAuB,WAAvB,CAA7D,EAAkG;AAChGY,cAAU;AADsF,GAAlG;AAGD,C;;AA1CD;;AACA;;AACA","file":"GeneratorPrototype.js","sourcesContent":["/**\n * Copyright (c) 2017-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n/* @flow */\n\nimport type { Realm } from \"../../realm.js\";\nimport { ReturnCompletion } from \"../../completions.js\";\nimport { ObjectValue, StringValue } from \"../../values/index.js\";\nimport { GeneratorResume, GeneratorResumeAbrupt } from \"../../methods/generator.js\";\n\nexport default function(realm: Realm, obj: ObjectValue): void {\n // ECMA262 25.3.1.2\n obj.defineNativeMethod(\"next\", 1, (context, [value]) => {\n // 1. Let g be the this value.\n let g = context;\n\n // 2. Return ? GeneratorResume(g, value).\n return GeneratorResume(realm, g, value);\n });\n\n // ECMA262 25.3.1.3\n obj.defineNativeMethod(\"return\", 1, (context, [value]) => {\n // 1. Let g be the this value.\n let g = context;\n\n // 2. Let C be Completion{[[Type]]: return, [[Value]]: value, [[Target]]: empty}.\n let C = new ReturnCompletion(value, realm.currentLocation);\n\n // 3. Return ? GeneratorResumeAbrupt(g, C).\n return GeneratorResumeAbrupt(realm, g, C);\n });\n\n // ECMA262 25.3.1.4\n obj.defineNativeMethod(\"throw\", 1, (context, [exception]) => {\n // 1. Let g be the this value.\n let g = context;\n\n // 2. Let C be Completion{[[Type]]: throw, [[Value]]: exception, [[Target]]: empty}.\n let C = new ReturnCompletion(exception, realm.currentLocation);\n\n // 3. Return ? GeneratorResumeAbrupt(g, C).\n return GeneratorResumeAbrupt(realm, g, C);\n });\n\n // ECMA262 25.3.1.5\n obj.defineNativeProperty(realm.intrinsics.SymbolToStringTag, new StringValue(realm, \"Generator\"), {\n writable: false,\n });\n}\n"]}

View File

@@ -0,0 +1,14 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function (realm) {
return (0, _TypedArray.build)(realm, "Int16");
};
var _index = require("../../values/index.js");
var _TypedArray = require("./TypedArray.js");
//# sourceMappingURL=Int16Array.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../../src/intrinsics/ecma262/Int16Array.js"],"names":["realm"],"mappings":";;;;;;kBAee,UAASA,KAAT,EAA4C;AACzD,SAAO,uBAAMA,KAAN,EAAa,OAAb,CAAP;AACD,C;;AALD;;AACA","file":"Int16Array.js","sourcesContent":["/**\n * Copyright (c) 2017-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n/* @flow */\n\nimport type { Realm } from \"../../realm.js\";\nimport { NativeFunctionValue } from \"../../values/index.js\";\nimport { build } from \"./TypedArray.js\";\n\nexport default function(realm: Realm): NativeFunctionValue {\n return build(realm, \"Int16\");\n}\n"]}

View File

@@ -0,0 +1,12 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function (realm, obj) {
(0, _TypedArrayPrototype.build)(realm, obj, "Int16");
};
var _TypedArrayPrototype = require("./TypedArrayPrototype.js");
//# sourceMappingURL=Int16ArrayPrototype.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../../src/intrinsics/ecma262/Int16ArrayPrototype.js"],"names":["realm","obj"],"mappings":";;;;;;kBAee,UAASA,KAAT,EAAuBC,GAAvB,EAA+C;AAC5D,kCAAMD,KAAN,EAAaC,GAAb,EAAkB,OAAlB;AACD,C;;AAJD","file":"Int16ArrayPrototype.js","sourcesContent":["/**\n * Copyright (c) 2017-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n/* @flow */\n\nimport type { Realm } from \"../../realm.js\";\nimport type { ObjectValue } from \"../../values/index.js\";\nimport { build } from \"./TypedArrayPrototype.js\";\n\nexport default function(realm: Realm, obj: ObjectValue): void {\n build(realm, obj, \"Int16\");\n}\n"]}

View File

@@ -0,0 +1,14 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function (realm) {
return (0, _TypedArray.build)(realm, "Int32");
};
var _index = require("../../values/index.js");
var _TypedArray = require("./TypedArray.js");
//# sourceMappingURL=Int32Array.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../../src/intrinsics/ecma262/Int32Array.js"],"names":["realm"],"mappings":";;;;;;kBAee,UAASA,KAAT,EAA4C;AACzD,SAAO,uBAAMA,KAAN,EAAa,OAAb,CAAP;AACD,C;;AALD;;AACA","file":"Int32Array.js","sourcesContent":["/**\n * Copyright (c) 2017-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n/* @flow */\n\nimport type { Realm } from \"../../realm.js\";\nimport { NativeFunctionValue } from \"../../values/index.js\";\nimport { build } from \"./TypedArray.js\";\n\nexport default function(realm: Realm): NativeFunctionValue {\n return build(realm, \"Int32\");\n}\n"]}

View File

@@ -0,0 +1,12 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function (realm, obj) {
(0, _TypedArrayPrototype.build)(realm, obj, "Int32");
};
var _TypedArrayPrototype = require("./TypedArrayPrototype.js");
//# sourceMappingURL=Int32ArrayPrototype.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../../src/intrinsics/ecma262/Int32ArrayPrototype.js"],"names":["realm","obj"],"mappings":";;;;;;kBAee,UAASA,KAAT,EAAuBC,GAAvB,EAA+C;AAC5D,kCAAMD,KAAN,EAAaC,GAAb,EAAkB,OAAlB;AACD,C;;AAJD","file":"Int32ArrayPrototype.js","sourcesContent":["/**\n * Copyright (c) 2017-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n/* @flow */\n\nimport type { Realm } from \"../../realm.js\";\nimport type { ObjectValue } from \"../../values/index.js\";\nimport { build } from \"./TypedArrayPrototype.js\";\n\nexport default function(realm: Realm, obj: ObjectValue): void {\n build(realm, obj, \"Int32\");\n}\n"]}

View File

@@ -0,0 +1,14 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function (realm) {
return (0, _TypedArray.build)(realm, "Int8");
};
var _index = require("../../values/index.js");
var _TypedArray = require("./TypedArray.js");
//# sourceMappingURL=Int8Array.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../../src/intrinsics/ecma262/Int8Array.js"],"names":["realm"],"mappings":";;;;;;kBAee,UAASA,KAAT,EAA4C;AACzD,SAAO,uBAAMA,KAAN,EAAa,MAAb,CAAP;AACD,C;;AALD;;AACA","file":"Int8Array.js","sourcesContent":["/**\n * Copyright (c) 2017-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n/* @flow */\n\nimport type { Realm } from \"../../realm.js\";\nimport { NativeFunctionValue } from \"../../values/index.js\";\nimport { build } from \"./TypedArray.js\";\n\nexport default function(realm: Realm): NativeFunctionValue {\n return build(realm, \"Int8\");\n}\n"]}

View File

@@ -0,0 +1,12 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function (realm, obj) {
(0, _TypedArrayPrototype.build)(realm, obj, "Int8");
};
var _TypedArrayPrototype = require("./TypedArrayPrototype.js");
//# sourceMappingURL=Int8ArrayPrototype.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../../src/intrinsics/ecma262/Int8ArrayPrototype.js"],"names":["realm","obj"],"mappings":";;;;;;kBAee,UAASA,KAAT,EAAuBC,GAAvB,EAA+C;AAC5D,kCAAMD,KAAN,EAAaC,GAAb,EAAkB,MAAlB;AACD,C;;AAJD","file":"Int8ArrayPrototype.js","sourcesContent":["/**\n * Copyright (c) 2017-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n/* @flow */\n\nimport type { Realm } from \"../../realm.js\";\nimport type { ObjectValue } from \"../../values/index.js\";\nimport { build } from \"./TypedArrayPrototype.js\";\n\nexport default function(realm: Realm, obj: ObjectValue): void {\n build(realm, obj, \"Int8\");\n}\n"]}

View File

@@ -0,0 +1,16 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function (realm, obj) {
// ECMA262 25.1.2.1
obj.defineNativeMethod(realm.intrinsics.SymbolIterator, 0, function (context) {
// 1. Return the this value.
return context;
});
};
var _index = require("../../values/index.js");
//# sourceMappingURL=IteratorPrototype.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../../src/intrinsics/ecma262/IteratorPrototype.js"],"names":["realm","obj","defineNativeMethod","intrinsics","SymbolIterator","context"],"mappings":";;;;;;kBAce,UAASA,KAAT,EAAuBC,GAAvB,EAA+C;AAC5D;AACAA,MAAIC,kBAAJ,CAAuBF,MAAMG,UAAN,CAAiBC,cAAxC,EAAwD,CAAxD,EAA2D,mBAAW;AACpE;AACA,WAAOC,OAAP;AACD,GAHD;AAID,C;;AARD","file":"IteratorPrototype.js","sourcesContent":["/**\n * Copyright (c) 2017-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n/* @flow */\n\nimport type { Realm } from \"../../realm.js\";\nimport { ObjectValue } from \"../../values/index.js\";\n\nexport default function(realm: Realm, obj: ObjectValue): void {\n // ECMA262 25.1.2.1\n obj.defineNativeMethod(realm.intrinsics.SymbolIterator, 0, context => {\n // 1. Return the this value.\n return context;\n });\n}\n"]}

View File

@@ -0,0 +1,685 @@
"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 obj = new _index.ObjectValue(realm, realm.intrinsics.ObjectPrototype, "JSON");
// ECMA262 24.3.3
obj.defineNativeProperty(realm.intrinsics.SymbolToStringTag, new _index.StringValue(realm, "JSON"), { writable: false });
// ECMA262 24.3.2
obj.defineNativeMethod("stringify", 3, function (context, _ref3) {
var _ref4 = _slicedToArray(_ref3, 3),
value = _ref4[0],
replacer = _ref4[1],
space = _ref4[2];
replacer = replacer.throwIfNotConcrete();
space = space.throwIfNotConcrete();
// 1. Let stack be a new empty List.
var stack = [];
// 2. Let indent be the empty String.
var indent = "";
// 3. Let PropertyList and ReplacerFunction be undefined.
var PropertyList = void 0,
ReplacerFunction = void 0;
// 4. If Type(replacer) is Object, then
if (replacer instanceof _index.ObjectValue) {
// a. If IsCallable(replacer) is true, then
if ((0, _index2.IsCallable)(realm, replacer)) {
// i. Let ReplacerFunction be replacer.
ReplacerFunction = replacer;
} else {
// b. Else,
// i. Let isArray be ? IsArray(replacer).
var isArray = (0, _index2.IsArray)(realm, replacer);
// ii. If isArray is true, then
if (isArray === true) {
// i. Let PropertyList be a new empty List.
PropertyList = [];
// ii. Let len be ? ToLength(? Get(replacer, "length")).
var len = _singletons.To.ToLength(realm, (0, _index2.Get)(realm, replacer, "length"));
// iii. Let k be 0.
var k = 0;
// iv. Repeat while k<len,
var _loop = function _loop() {
// 1. Let v be ? Get(replacer, ! ToString(k)).
var v = (0, _index2.Get)(realm, replacer, new _index.StringValue(realm, k + ""));
v = v.throwIfNotConcrete();
// 2. Let item be undefined.
var item = void 0;
// 3. If Type(v) is String, let item be v.
if (v instanceof _index.StringValue) {
item = v;
} else if (v instanceof _index.NumberValue) {
// 4. Else if Type(v) is Number, let item be ! ToString(v).
item = new _index.StringValue(realm, _singletons.To.ToString(realm, v));
} else if (v instanceof _index.ObjectValue) {
// 5. Else if Type(v) is Object, then
// a. If v has a [[StringData]] or [[NumberData]] internal slot, let item be ? ToString(v).
if (v.$StringData || v.$NumberData) {
item = new _index.StringValue(realm, _singletons.To.ToString(realm, v));
}
}
// 6. If item is not undefined and item is not currently an element of PropertyList, then
if (item !== undefined && PropertyList.find(function (x) {
return x.value === item.value;
}) === undefined) {
// a. Append item to the end of PropertyList.
PropertyList.push(item);
}
// 7. Let k be k+1.
k++;
};
while (k < len) {
_loop();
}
}
}
}
// 5. If Type(space) is Object, then
if (space instanceof _index.ObjectValue) {
// a. If space has a [[NumberData]] internal slot, then
if (space.$NumberData) {
// i. Let space be ? ToNumber(space).
space = new _index.NumberValue(realm, _singletons.To.ToNumber(realm, space));
} else if (space.$StringData) {
// b. Else if space has a [[StringData]] internal slot, then
// i. Let space be ? ToString(space).
space = new _index.StringValue(realm, _singletons.To.ToString(realm, space));
}
}
var gap = void 0;
// 6. If Type(space) is Number, then
if (space instanceof _index.NumberValue) {
// a. Let space be min(10, ToInteger(space)).
space = new _index.NumberValue(realm, Math.min(10, _singletons.To.ToInteger(realm, space)));
// b. Set gap to a String containing space occurrences of code unit 0x0020 (SPACE). This will be the empty String if space is less than 1.
gap = Array(Math.max(0, space.value)).join(" ");
} else if (space instanceof _index.StringValue) {
// 7. Else if Type(space) is String, then
// a. If the number of elements in space is 10 or less, set gap to space; otherwise set gap to a String consisting of the first 10 elements of space.
gap = space.value.length <= 10 ? space.value : space.value.substring(0, 10);
} else {
// 8. Else,
// a. Set gap to the empty String.
gap = "";
}
// 9. Let wrapper be ObjectCreate(%ObjectPrototype%).
var wrapper = _singletons.Create.ObjectCreate(realm, realm.intrinsics.ObjectPrototype);
// TODO #1012: Make result abstract if any nested element is an abstract value.
if (value instanceof _index.AbstractValue || value instanceof _index.ObjectValue && value.isPartialObject()) {
// Return abstract result. This enables cloning via JSON.parse(JSON.stringify(...)).
var clonedValue = InternalJSONClone(realm, value);
var result = _index.AbstractValue.createTemporalFromTemplate(realm, JSONStringify, _index.StringValue, [clonedValue], {
kind: "JSON.stringify(...)"
});
if (clonedValue instanceof _index.ObjectValue) {
var iName = result.intrinsicName;
(0, _invariant2.default)(iName);
(0, _invariant2.default)(realm.generator);
realm.rebuildNestedProperties(result, iName);
}
return result;
}
// 10. Let status be CreateDataProperty(wrapper, the empty String, value).
var status = _singletons.Create.CreateDataProperty(realm, wrapper, "", value);
// 11. Assert: status is true.
(0, _invariant2.default)(status, "expected to create data property");
// 12. Return ? SerializeJSONProperty(the empty String, wrapper).
var str = SerializeJSONProperty(realm, realm.intrinsics.emptyString, wrapper, {
PropertyList: PropertyList,
ReplacerFunction: ReplacerFunction,
stack: stack,
indent: indent,
gap: gap
});
if (str === undefined) {
return realm.intrinsics.undefined;
} else {
return new _index.StringValue(realm, str);
}
});
// ECMA262 24.3.1
obj.defineNativeMethod("parse", 2, function (context, _ref5) {
var _ref6 = _slicedToArray(_ref5, 2),
text = _ref6[0],
reviver = _ref6[1];
var unfiltered = void 0;
if (text instanceof _index.AbstractValue && text.kind === "JSON.stringify(...)") {
// Enable cloning via JSON.parse(JSON.stringify(...)).
var gen = realm.preludeGenerator;
(0, _invariant2.default)(gen); // text is abstract, so we are doing abstract interpretation
var args = gen.derivedIds.get(text.intrinsicName);
(0, _invariant2.default)(args && args[0] instanceof _index.Value); // since text.kind === "JSON.stringify(...)"
var inputClone = args[0]; // A temporal copy of the object that was the argument to stringify
// Clone it so that every call to parse produces a different instance from stringify's clone
var parseResult = void 0; // A clone of inputClone, because every call to parse produces a new object
if (inputClone instanceof _index.ObjectValue) {
parseResult = InternalCloneObject(realm, inputClone);
} else {
(0, _invariant2.default)(inputClone instanceof _index.AbstractObjectValue);
parseResult = InternalCloneObject(realm, inputClone.getTemplate());
}
(0, _invariant2.default)(parseResult.isPartialObject()); // Because stringify ensures it
parseResult.makeSimple(); // because the result of JSON.parse is always simple
// Force evaluation of the parse call
unfiltered = _index.AbstractValue.createTemporalFromTemplate(realm, JSONParse, _index.ObjectValue, [text], {
kind: "JSON.parse(...)"
});
unfiltered.values = new _index3.ValuesDomain(new Set([parseResult]));
(0, _invariant2.default)(unfiltered.intrinsicName);
(0, _invariant2.default)(realm.generator);
realm.rebuildNestedProperties(unfiltered, unfiltered.intrinsicName);
} else {
// 1. Let JText be ? ToString(text).
var JText = _singletons.To.ToStringPartial(realm, text);
// 2. Parse JText interpreted as UTF-16 encoded Unicode points (6.1.4) as a JSON text as specified in ECMA-404. Throw a SyntaxError exception if JText is not a valid JSON text as defined in that specification.
// 3. Let scriptText be the result of concatenating "(", JText, and ");".
// 4. Let completion be the result of parsing and evaluating scriptText as if it was the source text of an ECMAScript Script, but using the alternative definition of DoubleStringCharacter provided below. The extended PropertyDefinitionEvaluation semantics defined in B.3.1 must not be used during the evaluation.
// 5. Let unfiltered be completion.[[Value]].
try {
unfiltered = (0, _nativeToInterp2.default)(realm, JSON.parse(JText));
} catch (err) {
if (err instanceof SyntaxError) {
throw realm.createErrorThrowCompletion(realm.intrinsics.SyntaxError, err.message);
} else {
throw err;
}
}
// 6. Assert: unfiltered will be either a primitive value or an object that is defined by either an ArrayLiteral or an ObjectLiteral.
(0, _invariant2.default)((0, _index2.HasSomeCompatibleType)(unfiltered, _index.PrimitiveValue, _index.ObjectValue, _index.ArrayValue), "expected primitive, object or array");
}
// 7. If IsCallable(reviver) is true, then
if ((0, _index2.IsCallable)(realm, reviver)) {
// a. Let root be ObjectCreate(%ObjectPrototype%).
var root = _singletons.Create.ObjectCreate(realm, realm.intrinsics.ObjectPrototype);
// b. Let rootName be the empty String.
var rootName = "";
// c. Let status be CreateDataProperty(root, rootName, unfiltered).
var status = _singletons.Create.CreateDataProperty(realm, root, rootName, unfiltered);
// d. Assert: status is true.
(0, _invariant2.default)(status, "expected to create data property");
// e. Return ? InternalizeJSONProperty(root, rootName).
return (0, _json.InternalizeJSONProperty)(realm, reviver, root, rootName);
} else {
// 8. Else,
// a. Return unfiltered.
return unfiltered;
}
});
return obj;
};
var _index = require("../../values/index.js");
var _index2 = require("../../methods/index.js");
var _json = require("../../methods/json.js");
var _index3 = require("../../domains/index.js");
var _errors = require("../../errors.js");
var _singletons = require("../../singletons.js");
var _nativeToInterp = require("../../utils/native-to-interp.js");
var _nativeToInterp2 = _interopRequireDefault(_nativeToInterp);
var _invariant = require("../../invariant.js");
var _invariant2 = _interopRequireDefault(_invariant);
var _builder = require("../../utils/builder.js");
var _builder2 = _interopRequireDefault(_builder);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function SerializeJSONArray(realm, value, context) {
// 1. If stack contains value, throw a TypeError exception because the structure is cyclical.
if (context.stack.indexOf(value) >= 0) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError, "cyclical error");
}
// 2. Append value to stack.
context.stack.push(value);
// 3. Let stepback be indent.
var stepback = context.indent;
// 4. Let indent be the concatenation of indent and gap.
context.indent += context.gap;
// 5. Let partial be a new empty List.
var partial = [];
// 6. Let len be ? ToLength(? Get(value, "length")).
var len = _singletons.To.ToLength(realm, (0, _index2.Get)(realm, value, "length"));
// 7. Let index be 0.
var index = 0;
// 8. Repeat while index < len
while (index < len) {
// a. Let strP be ? SerializeJSONProperty(! ToString(index), value).
var strP = SerializeJSONProperty(realm, new _index.StringValue(realm, index + ""), value, context);
// b. If strP is undefined, then
if (strP === undefined) {
// i. Append "null" to partial.
partial.push("null");
} else {
// c. Else,
// i. Append strP to partial.
partial.push(strP);
}
// d. Increment index by 1.
index++;
}
// 9. If partial is empty, then
var final = "";
if (!partial.length) {
// a. Let final be "[]".
final = "[]";
} else {
// 10. Else,
// a. If gap is the empty String, then
if (!context.gap) {
// i. Let properties be a String formed by concatenating all the element Strings of partial with each adjacent pair of Strings separated with code unit 0x002C (COMMA). A comma is not inserted either before the first String or after the last String.
var properties = partial.join(",");
// ii. Let final be the result of concatenating "[", properties, and "]".
final = "[" + properties + "]";
} else {
// b. Else,
// i. Let separator be the result of concatenating code unit 0x002C (COMMA), code unit 0x000A (LINE FEED), and indent.
// ii. Let properties be a String formed by concatenating all the element Strings of partial with each adjacent pair of Strings separated with separator. The separator String is not inserted either before the first String or after the last String.
// iii. Let final be the result of concatenating "[", code unit 0x000A (LINE FEED), indent, properties, code unit 0x000A (LINE FEED), stepback, and "]".
}
}
// 11. Remove the last element of stack.
context.stack.pop();
// 12. Let indent be stepback.
context.indent = stepback;
// 13. Return final.
return final;
}
function QuoteJSONString(realm, value) {
return JSON.stringify(value.value);
}
function SerializeJSONObject(realm, value, context) {
// 1. If stack contains value, throw a TypeError exception because the structure is cyclical.
if (context.stack.indexOf(value) >= 0) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError, "cyclical error");
}
// 2. Append value to stack.
context.stack.push(value);
// 3. Let stepback be indent.
var stepback = context.indent;
// 4. Let indent be the concatenation of indent and gap.
context.indent += context.gap;
// 5. If PropertyList is not undefined, then
var K = void 0;
if (context.PropertyList !== undefined) {
// a. Let K be PropertyList.
K = context.PropertyList;
} else {
// 6. Else,
// a. Let K be ? EnumerableOwnProperties(value, "key").
K = (0, _index2.EnumerableOwnProperties)(realm, value, "key");
}
// 7. Let partial be a new empty List.
var partial = [];
// 8. For each element P of K,
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = K[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var P = _step.value;
(0, _invariant2.default)(P instanceof _index.StringValue);
// a. Let strP be ? SerializeJSONProperty(P, value).
var strP = SerializeJSONProperty(realm, P, value, context);
// b. If strP is not undefined, then
if (strP !== undefined) {
// i. Let member be QuoteJSONString(P).
var member = QuoteJSONString(realm, P);
// ii. Let member be the concatenation of member and the string ":".
member += ":";
// iii. If gap is not the empty String, then
if (context.gap) {
// 1. Let member be the concatenation of member and code unit 0x0020 (SPACE).
member += " ";
}
// iv. Let member be the concatenation of member and strP.
member += strP;
// v. Append member to partial.
partial.push(member);
}
}
// 9. If partial is empty, then
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
var final = "";
if (!partial.length) {
// a. Let final be "{}".
final = "{}";
} else {
// 10. Else,
// a. If gap is the empty String, then
if (!context.gap) {
// i. Let properties be a String formed by concatenating all the element Strings of partial with each adjacent pair of Strings separated with code unit 0x002C (COMMA). A comma is not inserted either before the first String or after the last String.
var properties = partial.join(",");
// ii. Let final be the result of concatenating "{", properties, and "}".
final = "{" + properties + "}";
} else {
// b. Else gap is not the empty String,
// i. Let separator be the result of concatenating code unit 0x002C (COMMA), code unit 0x000A (LINE FEED), and indent.
// ii. Let properties be a String formed by concatenating all the element Strings of partial with each adjacent pair of Strings separated with separator. The separator String is not inserted either before the first String or after the last String.
// iii. Let final be the result of concatenating "{", code unit 0x000A (LINE FEED), indent, properties, code unit 0x000A (LINE FEED), stepback, and "}".
}
}
// 11. Remove the last element of stack.
context.stack.pop();
// 12. Let indent be stepback.
context.indent = stepback;
// 13. Return final.
return final;
}
function SerializeJSONProperty(realm, key, holder, context) {
// 1. Let value be ? Get(holder, key).
var value = (0, _index2.Get)(realm, holder, key).throwIfNotConcrete();
// 2. If Type(value) is Object, then
if (value instanceof _index.ObjectValue) {
// a. Let toJSON be ? Get(value, "toJSON").
var toJSON = (0, _index2.Get)(realm, value, "toJSON");
// b. If IsCallable(toJSON) is true, then
if ((0, _index2.IsCallable)(realm, toJSON)) {
// i. Let value be ? Call(toJSON, value, « key »).
value = (0, _index2.Call)(realm, toJSON, value, [key]);
}
}
// 3. If ReplacerFunction is not undefined, then
if (context.ReplacerFunction) {
// a. Let value be ? Call(ReplacerFunction, holder, « key, value »).
value = (0, _index2.Call)(realm, context.ReplacerFunction, holder, [key, value]);
}
// 4. If Type(value) is Object, then
if (value instanceof _index.ObjectValue) {
// a. If value has a [[NumberData]] internal slot, then
if (value.$NumberData) {
// b. Let value be ? ToNumber(value).
value = new _index.NumberValue(realm, _singletons.To.ToNumber(realm, value));
} else if (value.$StringData) {
// c. Else if value has a [[StringData]] internal slot, then
// d. Let value be ? ToString(value).
value = new _index.StringValue(realm, _singletons.To.ToString(realm, value));
} else if (value.$BooleanData) {
// e. Else if value has a [[BooleanData]] internal slot, then
// f. Let value be the value of the [[BooleanData]] internal slot of value.
value = value.$BooleanData;
}
}
// 5. If value is null, return "null".
if (value instanceof _index.NullValue) return "null";
// 6. If value is true, return "true".
if (value instanceof _index.BooleanValue && value.value) return "true";
// 7. If value is false, return "false".
if (value instanceof _index.BooleanValue && !value.value) return "false";
// 8. If Type(value) is String, return QuoteJSONString(value).
if (value instanceof _index.StringValue) return QuoteJSONString(realm, value);
// 9. If Type(value) is Number, then
if (value instanceof _index.NumberValue) {
// a. If value is finite, return ! ToString(value).
if (isFinite(value.value)) {
return _singletons.To.ToString(realm, value);
} else {
// b. Else, return "null".
return "null";
}
}
// 10. If Type(value) is Object and IsCallable(value) is false, then
if (value instanceof _index.ObjectValue && !(0, _index2.IsCallable)(realm, value)) {
// a. Let isArray be ? IsArray(value).
var isArray = (0, _index2.IsArray)(realm, value);
// b. If isArray is true, return ? SerializeJSONArray(value).
if (isArray) {
return SerializeJSONArray(realm, value, context);
} else {
// c. Else, return ? SerializeJSONObject(value).
return SerializeJSONObject(realm, value, context);
}
}
// 1. Return undefined.
return undefined;
}
function InternalCloneObject(realm, val) {
var clone = _singletons.Create.ObjectCreate(realm, realm.intrinsics.ObjectPrototype);
var _iteratorNormalCompletion2 = true;
var _didIteratorError2 = false;
var _iteratorError2 = undefined;
try {
for (var _iterator2 = val.properties[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
var _ref = _step2.value;
var _ref2 = _slicedToArray(_ref, 2);
var key = _ref2[0];
var binding = _ref2[1];
if (binding === undefined || binding.descriptor === undefined) continue; // deleted
(0, _invariant2.default)(binding.descriptor !== undefined);
var value = binding.descriptor.value;
_singletons.Properties.ThrowIfMightHaveBeenDeleted(value);
if (value === undefined) {
_index.AbstractValue.reportIntrospectionError(val, key); // cannot handle accessors
throw new _errors.FatalError();
}
(0, _invariant2.default)(value instanceof _index.Value);
_singletons.Create.CreateDataProperty(realm, clone, key, InternalJSONClone(realm, value));
}
} catch (err) {
_didIteratorError2 = true;
_iteratorError2 = err;
} finally {
try {
if (!_iteratorNormalCompletion2 && _iterator2.return) {
_iterator2.return();
}
} finally {
if (_didIteratorError2) {
throw _iteratorError2;
}
}
}
if (val.isPartialObject()) clone.makePartial();
if (val.isSimpleObject()) clone.makeSimple();
clone.isTemplate = true; // because this object doesn't exist ahead of time, and the visitor would otherwise declare it in the common scope
return clone;
}
var JSONStringifyStr = "global.JSON.stringify(A)";
var JSONStringify = (0, _builder2.default)(JSONStringifyStr);
var JSONParseStr = "global.JSON.parse(A)";
var JSONParse = (0, _builder2.default)(JSONParseStr);
function InternalJSONClone(realm, val) {
if (val instanceof _index.AbstractValue) {
if (val instanceof _index.AbstractObjectValue) {
var strVal = _index.AbstractValue.createFromTemplate(realm, JSONStringify, _index.StringValue, [val], JSONStringifyStr);
var obVal = _index.AbstractValue.createFromTemplate(realm, JSONParse, _index.ObjectValue, [strVal], JSONParseStr);
obVal.values = new _index3.ValuesDomain(new Set([InternalCloneObject(realm, val.getTemplate())]));
return obVal;
}
// TODO #1010: NaN and Infinity must be mapped to null.
return val;
}
if (val instanceof _index.NumberValue && !isFinite(val.value) || val instanceof _index.UndefinedValue || val instanceof _index.NullValue) {
return realm.intrinsics.null;
}
if (val instanceof _index.PrimitiveValue) {
return val;
}
if (val instanceof _index.ObjectValue) {
var clonedObj = void 0;
var isArray = (0, _index2.IsArray)(realm, val);
if (isArray === true) {
clonedObj = _singletons.Create.ObjectCreate(realm, realm.intrinsics.ArrayPrototype);
var I = 0;
var len = _singletons.To.ToLength(realm, (0, _index2.Get)(realm, val, "length"));
while (I < len) {
var P = _singletons.To.ToString(realm, new _index.NumberValue(realm, I));
var newElement = (0, _index2.Get)(realm, val, P);
if (!(newElement instanceof _index.UndefinedValue)) {
// TODO #1011: An abstract value that ultimately yields undefined should still be skipped
_singletons.Create.CreateDataProperty(realm, clonedObj, P, InternalJSONClone(realm, newElement));
}
I += 1;
}
} else {
clonedObj = _singletons.Create.ObjectCreate(realm, realm.intrinsics.ObjectPrototype);
var valIsPartial = false;
if (val.isPartialObject()) {
valIsPartial = true;
val.makeNotPartial();
}
var keys = (0, _index2.EnumerableOwnProperties)(realm, val, "key");
if (valIsPartial) val.makePartial();
var _iteratorNormalCompletion3 = true;
var _didIteratorError3 = false;
var _iteratorError3 = undefined;
try {
for (var _iterator3 = keys[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
var _P = _step3.value;
(0, _invariant2.default)(_P instanceof _index.StringValue);
var _newElement = (0, _index2.Get)(realm, val, _P);
if (!(_newElement instanceof _index.UndefinedValue)) {
// TODO #1011: An abstract value that ultimately yields undefined should still be skipped
_singletons.Create.CreateDataProperty(realm, clonedObj, _P, InternalJSONClone(realm, _newElement));
}
}
} catch (err) {
_didIteratorError3 = true;
_iteratorError3 = err;
} finally {
try {
if (!_iteratorNormalCompletion3 && _iterator3.return) {
_iterator3.return();
}
} finally {
if (_didIteratorError3) {
throw _iteratorError3;
}
}
}
}
if (val.isPartialObject()) clonedObj.makePartial();
clonedObj.makeSimple(); // The result of a JSON clone is always simple
return clonedObj;
}
(0, _invariant2.default)(false);
}
//# sourceMappingURL=JSON.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,145 @@
"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 func = new _index.NativeFunctionValue(realm, "Map", "Map", 0, function (context, _ref, argCount, NewTarget) {
var _ref2 = _slicedToArray(_ref, 1),
iterable = _ref2[0];
// 1. If NewTarget is undefined, throw a TypeError exception.
if (!NewTarget) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError);
}
// 2. Let map be ? OrdinaryCreateFromConstructor(NewTarget, "%MapPrototype%", « [[MapData]] »).
var map = _singletons.Create.OrdinaryCreateFromConstructor(realm, NewTarget, "MapPrototype", {
$MapData: undefined
});
// 3. Set map's [[MapData]] internal slot to a new empty List.
map.$MapData = [];
// 4. If iterable is not present, let iterable be undefined.
if (iterable && realm.isCompatibleWith(realm.MOBILE_JSC_VERSION)) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError, "the map constructor doesn't take arguments");
}
if (!iterable) iterable = realm.intrinsics.undefined;
// 5. If iterable is either undefined or null, let iter be undefined.
var iter = void 0,
adder = void 0;
if ((0, _index2.HasSomeCompatibleType)(iterable, _index.NullValue, _index.UndefinedValue)) {
adder = realm.intrinsics.undefined;
iter = realm.intrinsics.undefined;
} else {
// 6. Else,
// a. Let adder be ? Get(map, "set").
adder = (0, _index2.Get)(realm, map, "set");
// b. If IsCallable(adder) is false, throw a TypeError exception.
if (!(0, _index2.IsCallable)(realm, adder)) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError);
}
// c. Let iter be ? GetIterator(iterable).
iter = (0, _index2.GetIterator)(realm, iterable);
}
// 7. If iter is undefined, return map.
if (iter instanceof _index.UndefinedValue) return map;
// 8. Repeat
while (true) {
// a. Let next be ? IteratorStep(iter).
var next = (0, _index2.IteratorStep)(realm, iter);
// b. If next is false, return map.
if (!next) return map;
// c. Let nextItem be ? IteratorValue(next).
var nextItem = (0, _index2.IteratorValue)(realm, next);
// d. If Type(nextItem) is not Object, then
if (nextItem.mightNotBeObject()) {
if (nextItem.mightBeObject()) nextItem.throwIfNotConcrete();
// i. Let error be Completion{[[Type]]: throw, [[Value]]: a newly created TypeError object, [[Target]]: empty}.
var error = realm.createErrorThrowCompletion(realm.intrinsics.TypeError);
// ii. Return ? IteratorClose(iter, error).
throw (0, _index2.IteratorClose)(realm, iter, error);
}
(0, _invariant2.default)(nextItem instanceof _index.ObjectValue || nextItem instanceof _index.AbstractObjectValue);
// e. Let k be Get(nextItem, "0").
var k = void 0;
try {
k = (0, _index2.Get)(realm, nextItem, "0");
} catch (kCompletion) {
if (kCompletion instanceof _completions.AbruptCompletion) {
// f. If k is an abrupt completion, return ? IteratorClose(iter, k).
throw (0, _index2.IteratorClose)(realm, iter, kCompletion);
} else throw kCompletion;
}
// g. Let v be Get(nextItem, "1").
var v = void 0;
try {
v = (0, _index2.Get)(realm, nextItem, "1");
} catch (vCompletion) {
if (vCompletion instanceof _completions.AbruptCompletion) {
// h. If v is an abrupt completion, return ? IteratorClose(iter, v).
throw (0, _index2.IteratorClose)(realm, iter, vCompletion);
} else throw vCompletion;
}
// i. Let status be Call(adder, map, « k.[[Value]], v.[[Value]] »).
var status = void 0;
try {
status = (0, _index2.Call)(realm, adder, map, [k, v]);
} catch (statusCompletion) {
if (statusCompletion instanceof _completions.AbruptCompletion) {
// j. If status is an abrupt completion, return ? IteratorClose(iter, status).
throw (0, _index2.IteratorClose)(realm, iter, statusCompletion);
} else throw statusCompletion;
}
status;
}
(0, _invariant2.default)(false);
});
// ECMA262 23.1.2.2
func.defineNativeGetter(realm.intrinsics.SymbolSpecies, function (context) {
// 1. Return the this value
return context;
});
return func;
};
var _index = require("../../values/index.js");
var _completions = require("../../completions.js");
var _index2 = require("../../methods/index.js");
var _singletons = require("../../singletons.js");
var _invariant = require("../../invariant.js");
var _invariant2 = _interopRequireDefault(_invariant);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
//# sourceMappingURL=Map.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,98 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function (realm, obj) {
// ECMA262 23.1.5.2.1
obj.defineNativeMethod("next", 0, function (context) {
// 1. Let O be the this value.
var 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, "not an object");
}
// 3. If O does not have all of the internal slots of a Set Iterator Instance (23.2.5.3), throw a TypeError exception.
if (O.$Map === undefined || O.$MapNextIndex === undefined || O.$MapIterationKind === undefined) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError, "MapIteratorPrototype.next isn't generic");
}
// 4. Let m be O.[[Map]].
var m = O.$Map;
// 5. Let index be O.[[MapNextIndex]].
var index = O.$MapNextIndex.value;
// 6. Let itemKind be O.[[MapIterationKind]].
var itemKind = O.$MapIterationKind;
// 7. If m is undefined, return CreateIterResultObject(undefined, true).
if (!m || m instanceof _index.UndefinedValue) return _singletons.Create.CreateIterResultObject(realm, realm.intrinsics.undefined, true);
(0, _invariant2.default)(m instanceof _index.ObjectValue);
// 8. Assert: m has a [[MapData]] internal slot.
(0, _invariant2.default)(m.$MapData, "m has a [[MapData]] internal slot");
// 9. Let entries be the List that is m.[[MapData]].
var entries = m.$MapData;
(0, _invariant2.default)(entries);
// 10. Repeat while index is less than the total number of elements of entries. The number of elements must be redetermined each time this method is evaluated.
while (index < entries.length) {
// a. Let e be the Record {[[Key]], [[Value]]} that is the value of entries[index].
var e = entries[index];
// b. Set index to index+1.
index = index + 1;
// c. Set O.[[MapNextIndex]] to index.
O.$MapNextIndex = new _index.NumberValue(realm, index);
// d. If e.[[Key]] is not empty, then
if (e.$Key !== undefined) {
(0, _invariant2.default)(e.$Value !== undefined);
var result = void 0;
// i. If itemKind is "key", let result be e.[[Key]].
if (itemKind === "key") result = e.$Key;else if (itemKind === "value")
// ii. Else if itemKind is "value", let result be e.[[Value]].
result = e.$Value;else {
// iii. Else,
// 1. Assert: itemKind is "key+value".
(0, _invariant2.default)(itemKind === "key+value");
// 2. Let result be CreateArrayFromList(« e.[[Key]], e.[[Value]] »).
result = _singletons.Create.CreateArrayFromList(realm, [e.$Key, e.$Value]);
}
// iv. Return CreateIterResultObject(result, false).
return _singletons.Create.CreateIterResultObject(realm, result, false);
}
}
// 11. Set O.[[Map]] to undefined.
O.$Map = realm.intrinsics.undefined;
// 12. Return CreateIterResultObject(undefined, true).
return _singletons.Create.CreateIterResultObject(realm, realm.intrinsics.undefined, true);
});
// ECMA262 23.1.5.2.2
obj.defineNativeProperty(realm.intrinsics.SymbolToStringTag, new _index.StringValue(realm, "Map Iterator"), {
writable: false
});
};
var _index = require("../../values/index.js");
var _singletons = require("../../singletons.js");
var _invariant = require("../../invariant.js");
var _invariant2 = _interopRequireDefault(_invariant);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
//# sourceMappingURL=MapIteratorPrototype.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,493 @@
"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, obj) {
// ECMA262 23.1.3.1
obj.defineNativeMethod("clear", 0, function (context) {
// 1. Let M be the this value.
var M = context.throwIfNotConcrete();
// 2. If Type(M) is not Object, throw a TypeError exception.
if (!(M instanceof _index.ObjectValue)) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError);
}
// 3. If M does not have a [[MapData]] internal slot, throw a TypeError exception.
if (!M.$MapData) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError);
}
// 4. Let entries be the List that is the value of M's [[MapData]] internal slot.
realm.recordModifiedProperty(M.$MapData_binding);
var entries = M.$MapData;
(0, _invariant2.default)(entries !== undefined);
// 5. Repeat for each Record {[[Key]], [[Value]]} p that is an element of entries,
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = entries[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var p = _step.value;
// a. Set p.[[Key]] to empty.
p.$Key = undefined;
// b. Set p.[[Value]] to empty.
p.$Value = undefined;
}
// 6. Return undefined.
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
return realm.intrinsics.undefined;
});
// ECMA262 23.1.3.3
obj.defineNativeMethod("delete", 1, function (context, _ref) {
var _ref2 = _slicedToArray(_ref, 1),
key = _ref2[0];
// 1. Let M be the this value.
var M = context.throwIfNotConcrete();
// 2. If Type(M) is not Object, throw a TypeError exception.
if (!(M instanceof _index.ObjectValue)) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError);
}
// 3. If M does not have a [[MapData]] internal slot, throw a TypeError exception.
if (!M.$MapData) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError);
}
// 4. Let entries be the List that is the value of M's [[MapData]] internal slot.
realm.recordModifiedProperty(M.$MapData_binding);
var entries = M.$MapData;
(0, _invariant2.default)(entries !== undefined);
// 5. Repeat for each Record {[[Key]], [[Value]]} p that is an element of entries,
var _iteratorNormalCompletion2 = true;
var _didIteratorError2 = false;
var _iteratorError2 = undefined;
try {
for (var _iterator2 = entries[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
var p = _step2.value;
// a. If p.[[Key]] is not empty and SameValueZero(p.[[Key]], key) is true, then
if (p.$Key !== undefined && (0, _index2.SameValueZeroPartial)(realm, p.$Key, key)) {
// i. Set p.[[Key]] to empty.
p.$Key = undefined;
// ii. Set p.[[Value]] to empty.
p.$Value = undefined;
// iii. Return true.
return realm.intrinsics.true;
}
}
// 6. Return false.
} catch (err) {
_didIteratorError2 = true;
_iteratorError2 = err;
} finally {
try {
if (!_iteratorNormalCompletion2 && _iterator2.return) {
_iterator2.return();
}
} finally {
if (_didIteratorError2) {
throw _iteratorError2;
}
}
}
return realm.intrinsics.false;
});
// ECMA262 23.1.3.4
obj.defineNativeMethod("entries", 0, function (context) {
// 1. Let M be the this value.
var M = context;
// 2. Return ? CreateMapIterator(M, "key+value").
return (0, _index2.CreateMapIterator)(realm, M, "key+value");
});
// ECMA262 23.1.3.5
obj.defineNativeMethod("forEach", 1, function (context, _ref3) {
var _ref4 = _slicedToArray(_ref3, 2),
callbackfn = _ref4[0],
thisArg = _ref4[1];
// 1. Let M be the this value.
var M = context.throwIfNotConcrete();
// 2. If Type(M) is not Object, throw a TypeError exception.
if (!(M instanceof _index.ObjectValue)) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError);
}
// 3. If M does not have a [[MapData]] internal slot, throw a TypeError exception.
if (!M.$MapData) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError);
}
// 4. If IsCallable(callbackfn) is false, throw a TypeError exception.
if (!(0, _index2.IsCallable)(realm, callbackfn)) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError);
}
// 5. If thisArg was supplied, let T be thisArg; else let T be undefined.
var T = thisArg || realm.intrinsics.undefined;
// 6. Let entries be the List that is the value of M's [[MapData]] internal slot.
var entries = M.$MapData;
(0, _invariant2.default)(entries);
// 7. Repeat for each Record {[[Key]], [[Value]]} e that is an element of entries, in original key insertion order
var _iteratorNormalCompletion3 = true;
var _didIteratorError3 = false;
var _iteratorError3 = undefined;
try {
for (var _iterator3 = entries[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
var e = _step3.value;
// a. If e.[[Key]] is not empty, then
if (e.$Key !== undefined) {
// i. Perform ? Call(callbackfn, T, « e.[[Value]], e.[[Key]], M »).
(0, _invariant2.default)(e.$Value !== undefined);
(0, _index2.Call)(realm, callbackfn, T, [e.$Value, e.$Key, M]);
}
}
// 8. Return undefined.
} catch (err) {
_didIteratorError3 = true;
_iteratorError3 = err;
} finally {
try {
if (!_iteratorNormalCompletion3 && _iterator3.return) {
_iterator3.return();
}
} finally {
if (_didIteratorError3) {
throw _iteratorError3;
}
}
}
return realm.intrinsics.undefined;
});
// ECMA262 23.1.3.6
obj.defineNativeMethod("get", 1, function (context, _ref5) {
var _ref6 = _slicedToArray(_ref5, 1),
key = _ref6[0];
// 1. Let M be the this value.
var M = context.throwIfNotConcrete();
// 2. If Type(M) is not Object, throw a TypeError exception.
if (!(M instanceof _index.ObjectValue)) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError);
}
// 3. If M does not have a [[MapData]] internal slot, throw a TypeError exception.
if (!M.$MapData) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError);
}
// 4. Let entries be the List that is the value of M's [[MapData]] internal slot.
var entries = M.$MapData;
(0, _invariant2.default)(entries !== undefined);
// 5. Repeat for each Record {[[Key]], [[Value]]} p that is an element of entries,
var _iteratorNormalCompletion4 = true;
var _didIteratorError4 = false;
var _iteratorError4 = undefined;
try {
for (var _iterator4 = entries[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
var p = _step4.value;
// a. If p.[[Key]] is not empty and SameValueZero(p.[[Key]], key) is true, return p.[[Value]].
if (p.$Key !== undefined && (0, _index2.SameValueZeroPartial)(realm, p.$Key, key)) {
(0, _invariant2.default)(p.$Value !== undefined);
return p.$Value;
}
}
// 6. Return undefined.
} catch (err) {
_didIteratorError4 = true;
_iteratorError4 = err;
} finally {
try {
if (!_iteratorNormalCompletion4 && _iterator4.return) {
_iterator4.return();
}
} finally {
if (_didIteratorError4) {
throw _iteratorError4;
}
}
}
return realm.intrinsics.undefined;
});
// ECMA262 23.1.3.7
obj.defineNativeMethod("has", 1, function (context, _ref7) {
var _ref8 = _slicedToArray(_ref7, 1),
key = _ref8[0];
// 1. Let M be the this value.
var M = context.throwIfNotConcrete();
// 2. If Type(M) is not Object, throw a TypeError exception.
if (!(M instanceof _index.ObjectValue)) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError);
}
// 3. If M does not have a [[MapData]] internal slot, throw a TypeError exception.
if (!M.$MapData) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError);
}
// 4. Let entries be the List that is the value of M's [[MapData]] internal slot.
var entries = M.$MapData;
(0, _invariant2.default)(entries !== undefined);
// 5. Repeat for each Record {[[Key]], [[Value]]} p that is an element of entries,
var _iteratorNormalCompletion5 = true;
var _didIteratorError5 = false;
var _iteratorError5 = undefined;
try {
for (var _iterator5 = entries[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {
var p = _step5.value;
// a. If p.[[Key]] is not empty and SameValueZero(p.[[Key]], key) is true, return true.
if (p.$Key !== undefined && (0, _index2.SameValueZeroPartial)(realm, p.$Key, key)) {
return realm.intrinsics.true;
}
}
// 6. Return false.
} catch (err) {
_didIteratorError5 = true;
_iteratorError5 = err;
} finally {
try {
if (!_iteratorNormalCompletion5 && _iterator5.return) {
_iterator5.return();
}
} finally {
if (_didIteratorError5) {
throw _iteratorError5;
}
}
}
return realm.intrinsics.false;
});
// ECMA262 23.1.3.8
obj.defineNativeMethod("keys", 0, function (context) {
// 1. Let M be the this value.
var M = context;
// 2. Return ? CreateMapIterator(M, "key").
return (0, _index2.CreateMapIterator)(realm, M, "key");
});
// ECMA262 23.1.3.9
obj.defineNativeMethod("set", 2, function (context, _ref9) {
var _ref10 = _slicedToArray(_ref9, 2),
key = _ref10[0],
value = _ref10[1];
// 1. Let M be the this value.
var M = context.throwIfNotConcrete();
// 2. If Type(M) is not Object, throw a TypeError exception.
if (!(M instanceof _index.ObjectValue)) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError);
}
// 3. If M does not have a [[MapData]] internal slot, throw a TypeError exception.
if (!M.$MapData) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError);
}
// 4. Let entries be the List that is the value of M's [[MapData]] internal slot.
realm.recordModifiedProperty(M.$MapData_binding);
var entries = M.$MapData;
(0, _invariant2.default)(entries !== undefined);
// 5. Repeat for each Record {[[Key]], [[Value]]} p that is an element of entries,
var _iteratorNormalCompletion6 = true;
var _didIteratorError6 = false;
var _iteratorError6 = undefined;
try {
for (var _iterator6 = entries[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {
var _p = _step6.value;
// a. If p.[[Key]] is not empty and SameValueZero(p.[[Key]], key) is true, then
if (_p.$Key !== undefined && (0, _index2.SameValueZeroPartial)(realm, _p.$Key, key)) {
// i. Set p.[[Value]] to value.
_p.$Value = value;
// ii. Return M.
return M;
}
}
// 6. If key is -0, let key be +0.
} catch (err) {
_didIteratorError6 = true;
_iteratorError6 = err;
} finally {
try {
if (!_iteratorNormalCompletion6 && _iterator6.return) {
_iterator6.return();
}
} finally {
if (_didIteratorError6) {
throw _iteratorError6;
}
}
}
key = key.throwIfNotConcrete();
if (key instanceof _index.NumberValue && Object.is(key.value, -0)) key = realm.intrinsics.zero;
// 7. Let p be the Record {[[Key]]: key, [[Value]]: value}.
var p = { $Key: key, $Value: value };
// 8. Append p as the last element of entries.
entries.push(p);
// 9. Return M.
return M;
});
// ECMA262 23.1.3.10
obj.$DefineOwnProperty("size", {
configurable: true,
get: new _index.NativeFunctionValue(realm, undefined, "get size", 0, function (context) {
// 1. Let M be the this value.
var M = context.throwIfNotConcrete();
// 2. If Type(M) is not Object, throw a TypeError exception.
if (!(M instanceof _index.ObjectValue)) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError);
}
// 3. If M does not have a [[MapData]] internal slot, throw a TypeError exception.
if (!M.$MapData) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError);
}
// 4. Let entries be the List that is the value of M's [[MapData]] internal slot.
var entries = M.$MapData;
(0, _invariant2.default)(entries !== undefined);
// 5. Let count be 0.
var count = 0;
// 6. For each Record {[[Key]], [[Value]]} p that is an element of entries
var _iteratorNormalCompletion7 = true;
var _didIteratorError7 = false;
var _iteratorError7 = undefined;
try {
for (var _iterator7 = entries[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) {
var p = _step7.value;
// a. If p.[[Key]] is not empty, set count to count+1.
if (p.$Key !== undefined) count++;
}
// 7. Return count.
} catch (err) {
_didIteratorError7 = true;
_iteratorError7 = err;
} finally {
try {
if (!_iteratorNormalCompletion7 && _iterator7.return) {
_iterator7.return();
}
} finally {
if (_didIteratorError7) {
throw _iteratorError7;
}
}
}
return new _index.NumberValue(realm, count);
})
});
// ECMA262 23.1.3.11
obj.defineNativeMethod("values", 0, function (context) {
// 1. Let M be the this value.
var M = context;
// 2. Return ? CreateMapIterator(M, "value").
return (0, _index2.CreateMapIterator)(realm, M, "value");
});
// ECMA262 23.1.3.12
var entriesPropertyDescriptor = obj.$GetOwnProperty("entries");
(0, _invariant2.default)(entriesPropertyDescriptor);
_singletons.Properties.ThrowIfMightHaveBeenDeleted(entriesPropertyDescriptor.value);
obj.defineNativeProperty(realm.intrinsics.SymbolIterator, undefined, entriesPropertyDescriptor);
// ECMA262 23.1.3.13
obj.defineNativeProperty(realm.intrinsics.SymbolToStringTag, new _index.StringValue(realm, "Map"), { writable: false });
};
var _index = require("../../values/index.js");
var _index2 = require("../../methods/index.js");
var _singletons = require("../../singletons.js");
var _invariant = require("../../invariant.js");
var _invariant2 = _interopRequireDefault(_invariant);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
//# sourceMappingURL=MapPrototype.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,252 @@
"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 obj = new _index.ObjectValue(realm, realm.intrinsics.ObjectPrototype, "Math");
// ECMA262 20.2.1.9
obj.defineNativeProperty(realm.intrinsics.SymbolToStringTag, new _index.StringValue(realm, "Math"), { writable: false });
// ECMA262 20.2.1.1
obj.defineNativeConstant("E", new _index.NumberValue(realm, 2.7182818284590452354));
// ECMA262 20.2.1.2
obj.defineNativeConstant("LN10", new _index.NumberValue(realm, 2.302585092994046));
// ECMA262 20.2.1.3
obj.defineNativeConstant("LN2", new _index.NumberValue(realm, 0.6931471805599453));
// ECMA262 20.2.1.4
obj.defineNativeConstant("LOG10E", new _index.NumberValue(realm, 0.4342944819032518));
// ECMA262 20.2.1.5
obj.defineNativeConstant("LOG2E", new _index.NumberValue(realm, 1.4426950408889634));
// ECMA262 20.2.1.6
obj.defineNativeConstant("PI", new _index.NumberValue(realm, 3.1415926535897932));
// ECMA262 20.2.1.7
obj.defineNativeConstant("SQRT1_2", new _index.NumberValue(realm, 0.7071067811865476));
// ECMA262 20.2.1.8
obj.defineNativeConstant("SQRT2", new _index.NumberValue(realm, 1.4142135623730951));
var functions = [
// ECMA262 20.2.2.1
["abs", 1],
// ECMA262 20.2.2.2
["acos", 1],
// ECMA262 20.2.2.3
["acosh", 1],
// ECMA262 20.2.2.4
["asin", 1],
// ECMA262 20.2.2.5
["asinh", 1],
// ECMA262 20.2.2.6
["atan", 1],
// ECMA262 20.2.2.7
["atanh", 1],
// ECMA262 20.2.2.8
["atan2", 2],
// ECMA262 20.2.2.9
["cbrt", 1],
// ECMA262 20.2.2.10
["ceil", 1],
// ECMA262 20.2.2.12
["cos", 1],
// ECMA262 20.2.2.13
["cosh", 1],
// ECMA262 20.2.2.14
["exp", 1],
// ECMA262 20.2.2.15
["expm1", 1],
// ECMA262 20.2.2.16
["floor", 1],
// ECMA262 20.2.2.17
["fround", 1],
// ECMA262 20.2.2.18
["hypot", 2],
// ECMA262 20.2.2.20
["log", 1],
// ECMA262 20.2.2.21
["log1p", 1],
// ECMA262 20.2.2.22
["log10", 1],
// ECMA262 20.2.2.23
["log2", 1],
// ECMA262 20.2.2.24 ( _value1_, _value2_, ..._values_ )
["max", 2],
// ECMA262 20.2.2.25
["min", 2],
// ECMA262 20.2.2.26
["pow", 2],
// ECMA262 20.2.2.28
["round", 1],
// ECMA262 20.2.2.30
["sin", 1],
// ECMA262 20.2.2.31
["sinh", 1],
// ECMA262 20.2.2.32
["sqrt", 1],
// ECMA262 20.2.2.33
["tan", 1],
// ECMA262 20.2.2.34
["tanh", 1],
// ECMA262 20.2.2.35
["trunc", 1]];
// ECMA262 20.2.2.11
if (!realm.isCompatibleWith(realm.MOBILE_JSC_VERSION)) functions.push(["clz32", 1]);
// ECMA262 20.2.2.29 (_x_)
if (!realm.isCompatibleWith(realm.MOBILE_JSC_VERSION)) functions.push(["sign", 1]);
var _loop = function _loop(name, length) {
obj.defineNativeMethod(name, length, function (context, args, originalLength) {
(0, _invariant2.default)(originalLength >= 0);
args.length = originalLength;
if (originalLength <= 26 && args.some(function (arg) {
return arg instanceof _index.AbstractValue;
}) && args.every(function (arg) {
return _singletons.To.IsToNumberPure(realm, arg);
})) {
var r = buildMathTemplates.get(name);
if (r === undefined) {
var params = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z".substring(0, originalLength * 2 - 1);
var _templateSource = "Math." + name + "(" + params + ")";
var _template = (0, _builder2.default)(_templateSource);
buildMathTemplates.set(name, r = { template: _template, templateSource: _templateSource });
}
return _index.AbstractValue.createFromTemplate(realm, r.template, _index.NumberValue, args, r.templateSource);
}
return new _index.NumberValue(realm, Math[name].apply(null, args.map(function (arg, i) {
return _singletons.To.ToNumber(realm, arg.throwIfNotConcrete());
})));
});
};
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = functions[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var _ref = _step.value;
var _ref2 = _slicedToArray(_ref, 2);
var name = _ref2[0];
var length = _ref2[1];
_loop(name, length);
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
var imulTemplateSrc = "global.Math.imul(A, B)";
var imulTemplate = (0, _builder2.default)(imulTemplateSrc);
// ECMA262 20.2.2.19
obj.defineNativeMethod("imul", 2, function (context, _ref3) {
var _ref4 = _slicedToArray(_ref3, 2),
x = _ref4[0],
y = _ref4[1];
if ((x instanceof _index.AbstractValue || y instanceof _index.AbstractValue) && _singletons.To.IsToNumberPure(realm, x) && _singletons.To.IsToNumberPure(realm, y)) {
return _index.AbstractValue.createFromTemplate(realm, imulTemplate, _index.NumberValue, [x, y], imulTemplateSrc);
}
return new _index.NumberValue(realm, Math.imul(_singletons.To.ToUint32(realm, x.throwIfNotConcrete()), _singletons.To.ToUint32(realm, y.throwIfNotConcrete())));
});
var mathRandomTemplateSrc = "global.Math.random()";
var mathRandomTemplate = (0, _builder2.default)(mathRandomTemplateSrc);
// ECMA262 20.2.2.27
obj.defineNativeMethod("random", 0, function (context) {
if (realm.mathRandomGenerator !== undefined) {
return new _index.NumberValue(realm, realm.mathRandomGenerator());
} else if (realm.useAbstractInterpretation) {
return _index.AbstractValue.createTemporalFromTemplate(realm, mathRandomTemplate, _index.NumberValue, [], {
isPure: true,
skipInvariant: true
});
} else {
return new _index.NumberValue(realm, Math.random());
}
});
return obj;
};
var _index = require("../../values/index.js");
var _singletons = require("../../singletons.js");
var _invariant = require("../../invariant.js");
var _invariant2 = _interopRequireDefault(_invariant);
var _builder = require("../../utils/builder.js");
var _builder2 = _interopRequireDefault(_builder);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var buildMathTemplates = new Map();
//# sourceMappingURL=Math.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,160 @@
"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) {
// ECMA262 20.1.1
var func = new _index.NativeFunctionValue(realm, "Number", "Number", 1, function (context, _ref, argCount, NewTarget) {
var _ref2 = _slicedToArray(_ref, 1),
value = _ref2[0];
var n = void 0;
// 1. If no arguments were passed to this function invocation, let n be +0.
if (argCount === 0) {
n = realm.intrinsics.zero;
} else {
// 2. Else, let n be ? ToNumber(value).
n = new _index.NumberValue(realm, _singletons.To.ToNumber(realm, value));
}
// 3. If NewTarget is undefined, return n.
if (!NewTarget) return n;
// 4. Let O be ? OrdinaryCreateFromConstructor(NewTarget, "%NumberPrototype%", « [[NumberData]] »).
var O = _singletons.Create.OrdinaryCreateFromConstructor(realm, NewTarget, "NumberPrototype", { $NumberData: undefined });
// 5. Set the value of O's [[NumberData]] internal slot to n.
O.$NumberData = n;
// 6. Return O.
return O;
});
// ECMA262 20.1.2.1
func.defineNativeConstant("EPSILON", new _index.NumberValue(realm, 2.220446049250313e-16));
// ECMA262 20.1.2.2
if (!realm.isCompatibleWith(realm.MOBILE_JSC_VERSION)) func.defineNativeMethod("isFinite", 1, function (context, _ref3) {
var _ref4 = _slicedToArray(_ref3, 1),
number = _ref4[0];
// 1. If Type(number) is not Number, return false.
if (!number.mightBeNumber()) return realm.intrinsics.false;
// 2. If number is NaN, +∞, or -∞, return false.
number = number.throwIfNotConcreteNumber();
if (isNaN(number.value) || number.value === +Infinity || number.value === -Infinity) return realm.intrinsics.false;
// 3. Otherwise, return true.
return realm.intrinsics.true;
});
// ECMA262 20.1.2.3
if (!realm.isCompatibleWith(realm.MOBILE_JSC_VERSION)) func.defineNativeMethod("isInteger", 1, function (context, _ref5) {
var _ref6 = _slicedToArray(_ref5, 1),
number = _ref6[0];
// 1. If Type(number) is not Number, return false.
if (!number.mightBeNumber()) return realm.intrinsics.false;
// 2. If number is NaN, +∞, or -∞, return false.
number = number.throwIfNotConcreteNumber();
if (isNaN(number.value) || number.value === +Infinity || number.value === -Infinity) return realm.intrinsics.false;
// 3. Let integer be ToInteger(number).
var integer = _singletons.To.ToInteger(realm, number);
// 4. If integer is not equal to number, return false.
if (integer !== number.value) return realm.intrinsics.false;
// 5. Otherwise, return true.
return realm.intrinsics.true;
});
// ECMA262 20.1.2.4
if (!realm.isCompatibleWith(realm.MOBILE_JSC_VERSION)) func.defineNativeMethod("isNaN", 1, function (context, _ref7) {
var _ref8 = _slicedToArray(_ref7, 1),
number = _ref8[0];
// 1. If Type(number) is not Number, return false.
if (!number.mightBeNumber()) return realm.intrinsics.false;
// 2. If number is NaN, return true.
number = number.throwIfNotConcreteNumber();
if (isNaN(number.value)) return realm.intrinsics.true;
// 3. Otherwise, return false.
return realm.intrinsics.false;
});
// ECMA262 20.1.2.5
if (!realm.isCompatibleWith(realm.MOBILE_JSC_VERSION)) func.defineNativeMethod("isSafeInteger", 1, function (context, _ref9) {
var _ref10 = _slicedToArray(_ref9, 1),
number = _ref10[0];
// 1. If Type(number) is not Number, return false.
if (!number.mightBeNumber()) return realm.intrinsics.false;
// 2. If number is NaN, +∞, or -∞, return false.
number = number.throwIfNotConcreteNumber();
if (isNaN(number.value) || number.value === +Infinity || number.value === -Infinity) return realm.intrinsics.false;
// 3. Let integer be ToInteger(number).
var integer = _singletons.To.ToInteger(realm, number);
// 4. If integer is not equal to number, return false.
if (integer !== number.value) return realm.intrinsics.false;
// 5. If abs(integer) ≤ 2^53-1, return true.
if (Math.abs(integer) <= Math.pow(2, 53) - 1) return realm.intrinsics.true;
// 6. Otherwise, return false.
return realm.intrinsics.false;
});
// ECMA262 20.1.2.6
func.defineNativeConstant("MAX_SAFE_INTEGER", new _index.NumberValue(realm, 9007199254740991));
// ECMA262 20.1.2.7
func.defineNativeConstant("MAX_VALUE", new _index.NumberValue(realm, 1.7976931348623157e308));
// ECMA262 20.1.2.8
func.defineNativeConstant("MIN_SAFE_INTEGER", new _index.NumberValue(realm, -9007199254740991));
// ECMA262 20.1.2.9
func.defineNativeConstant("MIN_VALUE", new _index.NumberValue(realm, 5e-324));
// ECMA262 20.1.2.10
func.defineNativeConstant("NaN", realm.intrinsics.NaN);
// ECMA262 20.1.2.11
func.defineNativeConstant("NEGATIVE_INFINITY", realm.intrinsics.negativeInfinity);
// ECMA262 20.1.2.12
func.defineNativeProperty("parseFloat", realm.intrinsics.parseFloat);
// ECMA262 20.1.2.13
func.defineNativeProperty("parseInt", realm.intrinsics.parseInt);
// ECMA262 20.1.2.14
func.defineNativeConstant("POSITIVE_INFINITY", realm.intrinsics.Infinity);
return func;
};
var _index = require("../../values/index.js");
var _singletons = require("../../singletons.js");
//# sourceMappingURL=Number.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,208 @@
"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, obj) {
// ECMA262 20.1.3
obj.$NumberData = realm.intrinsics.zero;
// ECMA262 20.1.3.2
obj.defineNativeMethod("toExponential", 1, function (context, _ref) {
var _ref2 = _slicedToArray(_ref, 1),
fractionDigits = _ref2[0];
// 1. Let x be ? thisNumberValue(this value).
var x = _singletons.To.thisNumberValue(realm, context).value;
// 2. Let f be ? ToInteger(fractionDigits).
fractionDigits = fractionDigits.throwIfNotConcrete();
var f = _singletons.To.ToInteger(realm, fractionDigits);
// 3. Assert: f is 0, when fractionDigits is undefined.
(0, _invariant2.default)(f === 0 || !(fractionDigits instanceof _index.UndefinedValue));
// 4. If x is NaN, return the String "NaN".
if (isNaN(x)) return new _index.StringValue(realm, "NaN");
// 5. Let s be the empty String.
var s = "";
// 6. If x < 0, then
if (x < 0) {
// 6a. Let s be "-".
s = "-";
// 6b. Let x be -x.
x = -x;
}
// 7. If x = +∞, then
if (x === +Infinity) {
// 7a. Return the concatenation of the Strings s and "Infinity".
return new _index.StringValue(realm, s + "Infinity");
}
// 8. If f < 0 or f > 20, throw a RangeError exception. However, an implementation is permitted to extend the behaviour of toExponential for values of f less than 0 or greater than 20. In this case toExponential would not necessarily throw RangeError for such values.
if (f < 0 || f > 20) {
throw realm.createErrorThrowCompletion(realm.intrinsics.RangeError, "f < 0 || f > 20");
}
var positiveResultString = x.toExponential(fractionDigits instanceof _index.UndefinedValue ? undefined : f);
return new _index.StringValue(realm, s + positiveResultString);
});
// ECMA262 20.1.3.3
obj.defineNativeMethod("toFixed", 1, function (context, _ref3) {
var _ref4 = _slicedToArray(_ref3, 1),
fractionDigits = _ref4[0];
// 1. Let f be ToInteger(fractionDigits). (If fractionDigits is undefined, this step produces the value 0).
var f = _singletons.To.ToInteger(realm, fractionDigits);
// 2. If f < 0 or f > 20, throw a RangeError exception.
if (f < 0 || f > 20) {
throw realm.createErrorThrowCompletion(realm.intrinsics.RangeError, "f < 0 || f > 20");
}
// 3. Let x be this Number value.
var x = _singletons.To.thisNumberValue(realm, context).value;
// 4. If x is NaN, return the String "NaN".
if (isNaN(x)) return new _index.StringValue(realm, "NaN");
return new _index.StringValue(realm, x.toFixed(f));
});
var toLocaleStringSrc = "(A).toLocaleString()";
var toLocaleString = (0, _builder2.default)(toLocaleStringSrc);
// ECMA262 20.1.3.4
obj.defineNativeMethod("toLocaleString", 0, function (context) {
var x = _singletons.To.thisNumberValue(realm, context);
if (realm.useAbstractInterpretation) {
// The locale is environment-dependent and may also be time-dependent
// so do this at runtime and at this point in time
return _index.AbstractValue.createTemporalFromTemplate(realm, toLocaleString, _index.StringValue, [x]);
} else {
return new _index.StringValue(realm, x.toLocaleString());
}
});
// ECMA262 20.1.3.5
obj.defineNativeMethod("toPrecision", 1, function (context, _ref5) {
var _ref6 = _slicedToArray(_ref5, 1),
precision = _ref6[0];
// 1. Let x be ? thisNumberValue(this value).
// 2. If precision is undefined, return ! ToString(x).
var num = _singletons.To.thisNumberValue(realm, context);
if (precision instanceof _index.UndefinedValue) {
return new _index.StringValue(realm, _singletons.To.ToString(realm, num));
}
// 3. Let p be ? ToInteger(precision).
var p = _singletons.To.ToInteger(realm, precision.throwIfNotConcrete());
// 4. If x is NaN, return the String "NaN".
var x = num.value;
if (isNaN(x)) {
return new _index.StringValue(realm, "NaN");
}
// 5. Let s be the empty String.
var s = "";
// 6. If x < 0, then
if (x < 0) {
// a. Let s be code unit 0x002D (HYPHEN-MINUS).
s = "-";
// b. Let x be -x.
x = -x;
}
// 7. If x = +∞, then
if (x === +Infinity) {
// a. Return the String that is the concatenation of s and "Infinity".
return new _index.StringValue(realm, s + "Infinity");
}
// 8. If p < 1 or p > 21, throw a RangeError exception.
// However, an implementation is permitted to extend the behaviour of
// toPrecision for values of p less than 1 or greater than 21.
// In this case toPrecision would not necessarily throw RangeError for such
// values.
if (p < 1 || p > 21) {
// for simplicity, throw the error
throw realm.createErrorThrowCompletion(realm.intrinsics.RangeError, "p should be in between 1 and 21 inclusive");
}
return new _index.StringValue(realm, s + x.toPrecision(p));
});
var tsTemplateSrc = "(A).toString()";
var tsTemplate = (0, _builder2.default)(tsTemplateSrc);
// ECMA262 20.1.3.6
obj.defineNativeMethod("toString", 1, function (context, _ref7) {
var _ref8 = _slicedToArray(_ref7, 1),
radix = _ref8[0];
if (radix instanceof _index.UndefinedValue) {
var target = context instanceof _index.ObjectValue ? context.$NumberData : context;
if (target instanceof _index.AbstractValue && target.getType() === _index.NumberValue) {
return _index.AbstractValue.createFromTemplate(realm, tsTemplate, _index.StringValue, [target], tsTemplateSrc);
}
}
// 1. Let x be ? thisNumberValue(this value).
var x = _singletons.To.thisNumberValue(realm, context);
// 2. If radix is not present, let radixNumber be 10.
// 3. Else if radix is undefined, let radixNumber be 10.
var radixNumber = void 0;
if (!radix || radix instanceof _index.UndefinedValue) {
radixNumber = 10;
} else {
// 4. Else let radixNumber be ? ToInteger(radix).
radixNumber = _singletons.To.ToInteger(realm, radix.throwIfNotConcrete());
}
// 5. If radixNumber < 2 or radixNumber > 36, throw a RangeError exception.
if (radixNumber < 2 || radixNumber > 36) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError);
}
// 6. If radixNumber = 10, return ! ToString(x).
if (radixNumber === 10) return new _index.StringValue(realm, _singletons.To.ToString(realm, x));
// 7. Return the String representation of this Number value using the radix specified by radixNumber.
// Letters a-z are used for digits with values 10 through 35. The precise algorithm is
// implementation-dependent, however the algorithm should be a generalization of that specified in
// 7.1.12.1.
return new _index.StringValue(realm, x.value.toString(radixNumber));
});
// ECMA262 20.1.3.7
obj.defineNativeMethod("valueOf", 0, function (context) {
// 1. Return ? thisNumberValue(this value).
return _singletons.To.thisNumberValue(realm, context);
});
};
var _index = require("../../values/index.js");
var _singletons = require("../../singletons.js");
var _invariant = require("../../invariant.js");
var _invariant2 = _interopRequireDefault(_invariant);
var _builder = require("../../utils/builder.js");
var _builder2 = _interopRequireDefault(_builder);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
//# sourceMappingURL=NumberPrototype.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,525 @@
"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) {
// ECMA262 19.1.1.1
var func = new _index.NativeFunctionValue(realm, "Object", "Object", 1, function (context, _ref, argCount, NewTarget) {
var _ref2 = _slicedToArray(_ref, 1),
value = _ref2[0];
// 1. If NewTarget is neither undefined nor the active function, then
if (NewTarget && NewTarget !== func) {
// a. Return ? OrdinaryCreateFromConstructor(NewTarget, "%ObjectPrototype%").
return _singletons.Create.OrdinaryCreateFromConstructor(realm, NewTarget, "ObjectPrototype");
}
// 2. If value is null, undefined or not supplied, return ObjectCreate(%ObjectPrototype%).
if ((0, _index2.HasSomeCompatibleType)(value, _index.NullValue, _index.UndefinedValue)) {
return _singletons.Create.ObjectCreate(realm, realm.intrinsics.ObjectPrototype);
}
// 3. Return ToObject(value).
return _singletons.To.ToObjectPartial(realm, value);
});
// ECMA262 19.1.2.1
func.defineNativeMethod("assign", 2, function (context, _ref3) {
var _ref4 = _toArray(_ref3),
target = _ref4[0],
sources = _ref4.slice(1);
// 1. Let to be ? ToObject(target).
var to = _singletons.To.ToObjectPartial(realm, target);
var to_must_be_partial = false;
// 2. If only one argument was passed, return to.
if (!sources.length) return to;
// 3. Let sources be the List of argument values starting with the second argument.
sources;
// 4. For each element nextSource of sources, in ascending index order,
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = sources[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var nextSource = _step.value;
var keys = void 0,
frm = void 0;
// a. If nextSource is undefined or null, let keys be a new empty List.
if ((0, _index2.HasSomeCompatibleType)(nextSource, _index.NullValue, _index.UndefinedValue)) {
continue;
} else {
// b. Else,
// i. Let from be ToObject(nextSource).
frm = _singletons.To.ToObjectPartial(realm, nextSource);
var frm_was_partial = frm.isPartialObject();
if (frm_was_partial) {
to_must_be_partial = true;
frm.makeNotPartial();
}
// ii. Let keys be ? from.[[OwnPropertyKeys]]().
keys = frm.$OwnPropertyKeys();
if (frm_was_partial) frm.makePartial();
}
if (to_must_be_partial) {
// Only OK if to is an empty object because nextSource might have
// properties at runtime that will overwrite current properties in to.
// For now, just throw if this happens.
var to_keys = to.$OwnPropertyKeys();
if (to_keys.length !== 0) {
_index.AbstractValue.reportIntrospectionError(nextSource);
throw new _errors.FatalError();
}
}
(0, _invariant2.default)(frm, "from required");
(0, _invariant2.default)(keys, "keys required");
// c. Repeat for each element nextKey of keys in List order,
var _iteratorNormalCompletion2 = true;
var _didIteratorError2 = false;
var _iteratorError2 = undefined;
try {
for (var _iterator2 = keys[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
var nextKey = _step2.value;
// i. Let desc be ? from.[[GetOwnProperty]](nextKey).
var desc = frm.$GetOwnProperty(nextKey);
// ii. If desc is not undefined and desc.[[Enumerable]] is true, then
if (desc && desc.enumerable) {
_singletons.Properties.ThrowIfMightHaveBeenDeleted(desc.value);
// 1. Let propValue be ? Get(from, nextKey).
var propValue = (0, _index2.Get)(realm, frm, nextKey);
// 2. Perform ? Set(to, nextKey, propValue, true).
_singletons.Properties.Set(realm, to, nextKey, propValue, true);
}
}
} catch (err) {
_didIteratorError2 = true;
_iteratorError2 = err;
} finally {
try {
if (!_iteratorNormalCompletion2 && _iterator2.return) {
_iterator2.return();
}
} finally {
if (_didIteratorError2) {
throw _iteratorError2;
}
}
}
}
// 5. Return to.
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
if (to_must_be_partial) to.makePartial();
return to;
});
// ECMA262 19.1.2.2
func.defineNativeMethod("create", 2, function (context, _ref5) {
var _ref6 = _slicedToArray(_ref5, 2),
O = _ref6[0],
Properties = _ref6[1];
// 1. If Type(O) is neither Object nor Null, throw a TypeError exception.
if (!(0, _index2.HasSomeCompatibleType)(O, _index.ObjectValue, _index.NullValue)) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError);
}
// 2. Let obj be ObjectCreate(O).
var obj = _singletons.Create.ObjectCreate(realm, O.throwIfNotConcrete());
// 3. If Properties is not undefined, then
if (!Properties.mightBeUndefined()) {
// a. Return ? ObjectDefineProperties(obj, Properties).
return _singletons.Properties.ObjectDefineProperties(realm, obj, Properties);
}
Properties.throwIfNotConcrete();
// 4. Return obj.
return obj;
});
// ECMA262 19.1.2.3
func.defineNativeMethod("defineProperties", 2, function (context, _ref7) {
var _ref8 = _slicedToArray(_ref7, 2),
O = _ref8[0],
Properties = _ref8[1];
// 1. Return ? ObjectDefineProperties(O, Properties).
return _singletons.Properties.ObjectDefineProperties(realm, O, Properties);
});
// ECMA262 19.1.2.4
func.defineNativeMethod("defineProperty", 3, function (context, _ref9) {
var _ref10 = _slicedToArray(_ref9, 3),
O = _ref10[0],
P = _ref10[1],
Attributes = _ref10[2];
// 1. If Type(O) is not Object, throw a TypeError exception.
if (!O.mightBeObject()) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError);
}
O = O.throwIfNotObject();
// 2. Let key be ? ToPropertyKey(P).
var key = _singletons.To.ToPropertyKey(realm, P.throwIfNotConcrete());
// 3. Let desc be ? ToPropertyDescriptor(Attributes).
var desc = _singletons.To.ToPropertyDescriptor(realm, Attributes);
// 4. Perform ? DefinePropertyOrThrow(O, key, desc).
_singletons.Properties.DefinePropertyOrThrow(realm, O, key, desc);
// 4. Return O.
return O;
});
// ECMA262 19.1.2.5
func.defineNativeMethod("freeze", 1, function (context, _ref11) {
var _ref12 = _slicedToArray(_ref11, 1),
O = _ref12[0];
// 1. If Type(O) is not Object, return O.
if (!O.mightBeObject()) return O;
// 2. Let status be ? SetIntegrityLevel(O, "frozen").
O = O.throwIfNotConcreteObject();
var status = (0, _index2.SetIntegrityLevel)(realm, O, "frozen");
// 3. If status is false, throw a TypeError exception.
if (status === false) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError);
}
// 4. Return O.
return O;
});
// ECMA262 19.1.2.6
func.defineNativeMethod("getOwnPropertyDescriptor", 2, function (context, _ref13) {
var _ref14 = _slicedToArray(_ref13, 2),
O = _ref14[0],
P = _ref14[1];
// 1. Let obj be ? ToObject(O).
var obj = _singletons.To.ToObjectPartial(realm, O);
// 2. Let key be ? ToPropertyKey(P).
var key = _singletons.To.ToPropertyKey(realm, P.throwIfNotConcrete());
// 3. Let desc be ? obj.[[GetOwnProperty]](key).
var desc = obj.$GetOwnProperty(key);
// 4. Return FromPropertyDescriptor(desc).
return _singletons.Properties.FromPropertyDescriptor(realm, desc);
});
// ECMA262 19.1.2.7
func.defineNativeMethod("getOwnPropertyNames", 1, function (context, _ref15) {
var _ref16 = _slicedToArray(_ref15, 1),
O = _ref16[0];
// 1. Return ? GetOwnPropertyKeys(O, String).
return (0, _index2.GetOwnPropertyKeys)(realm, O, _index.StringValue);
});
// ECMA262 19.1.2.8
func.defineNativeMethod("getOwnPropertyDescriptors", 1, function (context, _ref17) {
var _ref18 = _slicedToArray(_ref17, 1),
O = _ref18[0];
// 1. Let obj be ? ToObject(O).
var obj = _singletons.To.ToObject(realm, O.throwIfNotConcrete());
// 2. Let ownKeys be ? obj.[[OwnPropertyKeys]]().
var ownKeys = obj.$OwnPropertyKeys();
// 3. Let descriptors be ! ObjectCreate(%ObjectPrototype%).
var descriptors = _singletons.Create.ObjectCreate(realm, realm.intrinsics.ObjectPrototype);
// 4. Repeat, for each element key of ownKeys in List order,
var _iteratorNormalCompletion3 = true;
var _didIteratorError3 = false;
var _iteratorError3 = undefined;
try {
for (var _iterator3 = ownKeys[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
var key = _step3.value;
// a. Let desc be ? obj.[[GetOwnProperty]](key).
var desc = obj.$GetOwnProperty(key);
if (desc !== undefined) _singletons.Properties.ThrowIfMightHaveBeenDeleted(desc.value);
// b. Let descriptor be ! FromPropertyDescriptor(desc).
var descriptor = _singletons.Properties.FromPropertyDescriptor(realm, desc);
// c. If descriptor is not undefined, perform ! CreateDataProperty(descriptors, key, descriptor).
if (!(descriptor instanceof _index.UndefinedValue)) _singletons.Create.CreateDataProperty(realm, descriptors, key, descriptor);
}
// 5. Return descriptors.
} catch (err) {
_didIteratorError3 = true;
_iteratorError3 = err;
} finally {
try {
if (!_iteratorNormalCompletion3 && _iterator3.return) {
_iterator3.return();
}
} finally {
if (_didIteratorError3) {
throw _iteratorError3;
}
}
}
return descriptors;
});
// ECMA262 19.1.2.9
func.defineNativeMethod("getOwnPropertySymbols", 1, function (context, _ref19) {
var _ref20 = _slicedToArray(_ref19, 1),
O = _ref20[0];
// Return ? GetOwnPropertyKeys(O, Symbol).
return (0, _index2.GetOwnPropertyKeys)(realm, O, _index.SymbolValue);
});
// ECMA262 19.1.2.10
func.defineNativeMethod("getPrototypeOf", 1, function (context, _ref21) {
var _ref22 = _slicedToArray(_ref21, 1),
O = _ref22[0];
// 1. Let obj be ? ToObject(O).
var obj = _singletons.To.ToObject(realm, O.throwIfNotConcrete());
// 2. Return ? obj.[[GetPrototypeOf]]().
return obj.$GetPrototypeOf();
});
// ECMA262 19.1.2.11
func.defineNativeMethod("is", 2, function (context, _ref23) {
var _ref24 = _slicedToArray(_ref23, 2),
value1 = _ref24[0],
value2 = _ref24[1];
// 1. Return SameValue(value1, value2).
return new _index.BooleanValue(realm, (0, _index2.SameValuePartial)(realm, value1, value2));
});
// ECMA262 19.1.2.12
func.defineNativeMethod("isExtensible", 1, function (context, _ref25) {
var _ref26 = _slicedToArray(_ref25, 1),
O = _ref26[0];
// 1. If Type(O) is not Object, return false.
if (!O.mightBeObject()) return realm.intrinsics.false;
O = O.throwIfNotObject();
// 2. Return ? IsExtensible(O).
return new _index.BooleanValue(realm, (0, _index2.IsExtensible)(realm, O));
});
// ECMA262 19.1.2.13
func.defineNativeMethod("isFrozen", 1, function (context, _ref27) {
var _ref28 = _slicedToArray(_ref27, 1),
O = _ref28[0];
// 1. If Type(O) is not Object, return true.
if (!O.mightBeObject()) return realm.intrinsics.true;
// 2. Return ? TestIntegrityLevel(O, "frozen").
O = O.throwIfNotConcreteObject();
return new _index.BooleanValue(realm, (0, _index2.TestIntegrityLevel)(realm, O, "frozen"));
});
// ECMA262 19.1.2.14
func.defineNativeMethod("isSealed", 1, function (context, _ref29) {
var _ref30 = _slicedToArray(_ref29, 1),
O = _ref30[0];
// 1. If Type(O) is not Object, return true.
if (!O.mightBeObject()) return realm.intrinsics.true;
// 2. Return ? TestIntegrityLevel(O, "sealed").
O = O.throwIfNotConcreteObject();
return new _index.BooleanValue(realm, (0, _index2.TestIntegrityLevel)(realm, O, "sealed"));
});
// ECMA262 19.1.2.15
func.defineNativeMethod("keys", 1, function (context, _ref31) {
var _ref32 = _slicedToArray(_ref31, 1),
O = _ref32[0];
// 1. Let obj be ? ToObject(O).
var obj = _singletons.To.ToObject(realm, O.throwIfNotConcrete());
// 2. Let nameList be ? EnumerableOwnProperties(obj, "key").
var nameList = (0, _index2.EnumerableOwnProperties)(realm, obj, "key");
// 3. Return CreateArrayFromList(nameList).
return _singletons.Create.CreateArrayFromList(realm, nameList);
});
// ECMA262 9.1.2.16
func.defineNativeMethod("values", 1, function (context, _ref33) {
var _ref34 = _slicedToArray(_ref33, 1),
O = _ref34[0];
// 1. Let obj be ? ToObject(O).
var obj = _singletons.To.ToObject(realm, O.throwIfNotConcrete());
// 2. Let nameList be ? EnumerableOwnProperties(obj, "value").
var nameList = (0, _index2.EnumerableOwnProperties)(realm, obj, "value");
// 3. Return CreateArrayFromList(nameList).
return _singletons.Create.CreateArrayFromList(realm, nameList);
});
// ECMA262 19.1.2.17
func.defineNativeMethod("entries", 1, function (context, _ref35) {
var _ref36 = _slicedToArray(_ref35, 1),
O = _ref36[0];
// 1. Let obj be ? ToObject(O).
var obj = _singletons.To.ToObject(realm, O.throwIfNotConcrete());
// 2. Let nameList be ? EnumerableOwnProperties(obj, "key+value").
var nameList = (0, _index2.EnumerableOwnProperties)(realm, obj, "key+value");
// 3. Return CreateArrayFromList(nameList).
return _singletons.Create.CreateArrayFromList(realm, nameList);
});
// ECMA262 19.1.2.18
func.defineNativeMethod("preventExtensions", 1, function (context, _ref37) {
var _ref38 = _slicedToArray(_ref37, 1),
O = _ref38[0];
// 1. If Type(O) is not Object, return O.
if (!O.mightBeObject()) return O;
// 2. Let status be ? O.[[PreventExtensions]]().
O = O.throwIfNotConcreteObject();
var status = O.$PreventExtensions();
// 3. If status is false, throw a TypeError exception.
if (status === false) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError);
}
// 4. Return O.
return O;
});
// ECMA262 19.1.2.19
func.defineNativeMethod("seal", 1, function (context, _ref39) {
var _ref40 = _slicedToArray(_ref39, 1),
O = _ref40[0];
// 1. If Type(O) is not Object, return O.
if (!O.mightBeObject()) return O;
// 2. Let status be ? SetIntegrityLevel(O, "sealed").
O = O.throwIfNotConcreteObject();
var status = (0, _index2.SetIntegrityLevel)(realm, O, "sealed");
// 3. If status is false, throw a TypeError exception.
if (status === false) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError);
}
// 4. Return O.
return O;
});
// ECMA262 19.1.2.20
if (!realm.isCompatibleWith(realm.MOBILE_JSC_VERSION)) func.defineNativeMethod("setPrototypeOf", 2, function (context, _ref41) {
var _ref42 = _slicedToArray(_ref41, 2),
O = _ref42[0],
proto = _ref42[1];
// 1. Let O be ? RequireObjectCoercible(O).
O = (0, _index2.RequireObjectCoercible)(realm, O);
// 2. If Type(proto) is neither Object nor Null, throw a TypeError exception.
if (!(0, _index2.HasSomeCompatibleType)(proto, _index.ObjectValue, _index.NullValue)) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError);
}
// 3. If Type(O) is not Object, return O.
O = O.throwIfNotConcrete();
if (!(O instanceof _index.ObjectValue)) return O;
// 4. Let status be ? O.[[SetPrototypeOf]](proto).
var status = O.$SetPrototypeOf(proto);
// 5. If status is false, throw a TypeError exception.
if (status === false) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError);
}
// 6. Return O.
return O;
});
return func;
};
var _errors = require("../../errors.js");
var _realm = require("../../realm.js");
var _index = require("../../values/index.js");
var _index2 = require("../../methods/index.js");
var _singletons = require("../../singletons.js");
var _invariant = require("../../invariant.js");
var _invariant2 = _interopRequireDefault(_invariant);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _toArray(arr) { return Array.isArray(arr) ? arr : Array.from(arr); }
//# sourceMappingURL=Object.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,63 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function (realm) {
// ECMA262 22.1.3.30
return new _index.NativeFunctionValue(realm, "Object.prototype.toString", "toString", 0, function (context) {
// 1. If the this value is undefined, return "[object Undefined]".
if (context instanceof _index.UndefinedValue) return new _index.StringValue(realm, "[object Undefined]");
// 2. If the this value is null, return "[object Null]".
if (context instanceof _index.NullValue) return new _index.StringValue(realm, "[object Null]");
// 3. Let O be ToObject(this value).
var O = _singletons.To.ToObjectPartial(realm, context);
var builtinTag = void 0;
// 4. Let isArray be ? IsArray(O).
var isArray = (0, _is.IsArray)(realm, O);
// 5. If isArray is true, let builtinTag be "Array".
if (isArray) builtinTag = "Array";else if (O.$StringData)
// 6. Else, if O is an exotic String object, let builtinTag be "String".
builtinTag = "String";else if (O.$ParameterMap)
// 7. Else, if O has an [[ParameterMap]] internal slot, let builtinTag be "Arguments".
builtinTag = "Arguments";else if (O.$Call)
// 8. Else, if O has a [[Call]] internal method, let builtinTag be "Function".
builtinTag = "Function";else if (O.$ErrorData)
// 9. Else, if O has an [[ErrorData]] internal slot, let builtinTag be "Error".
builtinTag = "Error";else if (O.$BooleanData)
// 10. Else, if O has a [[BooleanData]] internal slot, let builtinTag be "Boolean".
builtinTag = "Boolean";else if (O.$NumberData)
// 11. Else, if O has a [[NumberData]] internal slot, let builtinTag be "Number".
builtinTag = "Number";else if (O.$DateValue)
// 12. Else, if O has a [[DateValue]] internal slot, let builtinTag be "Date".
builtinTag = "Date";else if (O.$RegExpMatcher)
// 13. Else, if O has a [[RegExpMatcher]] internal slot, let builtinTag be "RegExp".
builtinTag = "RegExp";else
// 14. Else, let builtinTag be "Object".
builtinTag = "Object";
// 15. Let tag be ? Get(O, @@toStringTag).
var tag = (0, _get.Get)(realm, O, realm.intrinsics.SymbolToStringTag);
// 16. If Type(tag) is not String, let tag be builtinTag.
tag = tag instanceof _index.StringValue ? tag.value : builtinTag;
// 17. Return the String that is the result of concatenating "[object ", tag, and "]".
return new _index.StringValue(realm, "[object " + tag + "]");
}, false);
};
var _index = require("../../values/index.js");
var _is = require("../../methods/is.js");
var _get = require("../../methods/get.js");
var _singletons = require("../../singletons.js");
//# sourceMappingURL=ObjectProto_toString.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../../src/intrinsics/ecma262/ObjectProto_toString.js"],"names":["realm","context","O","ToObjectPartial","builtinTag","isArray","$StringData","$ParameterMap","$Call","$ErrorData","$BooleanData","$NumberData","$DateValue","$RegExpMatcher","tag","intrinsics","SymbolToStringTag","value"],"mappings":";;;;;;kBAiBe,UAASA,KAAT,EAA4C;AACzD;AACA,SAAO,+BACLA,KADK,EAEL,2BAFK,EAGL,UAHK,EAIL,CAJK,EAKL,mBAAW;AACT;AACA,QAAIC,wCAAJ,EAAuC,OAAO,uBAAgBD,KAAhB,EAAuB,oBAAvB,CAAP;;AAEvC;AACA,QAAIC,mCAAJ,EAAkC,OAAO,uBAAgBD,KAAhB,EAAuB,eAAvB,CAAP;;AAElC;AACA,QAAIE,IAAI,eAAGC,eAAH,CAAmBH,KAAnB,EAA0BC,OAA1B,CAAR;;AAEA,QAAIG,mBAAJ;;AAEA;AACA,QAAIC,UAAU,iBAAQL,KAAR,EAAeE,CAAf,CAAd;;AAEA;AACA,QAAIG,OAAJ,EAAaD,aAAa,OAAb,CAAb,KACK,IAAIF,EAAEI,WAAN;AACH;AACAF,mBAAa,QAAb,CAFG,KAGA,IAAIF,EAAEK,aAAN;AACH;AACAH,mBAAa,WAAb,CAFG,KAGA,IAAIF,EAAEM,KAAN;AACH;AACAJ,mBAAa,UAAb,CAFG,KAGA,IAAIF,EAAEO,UAAN;AACH;AACAL,mBAAa,OAAb,CAFG,KAGA,IAAIF,EAAEQ,YAAN;AACH;AACAN,mBAAa,SAAb,CAFG,KAGA,IAAIF,EAAES,WAAN;AACH;AACAP,mBAAa,QAAb,CAFG,KAGA,IAAIF,EAAEU,UAAN;AACH;AACAR,mBAAa,MAAb,CAFG,KAGA,IAAIF,EAAEW,cAAN;AACH;AACAT,mBAAa,QAAb,CAFG;AAIH;AACAA,mBAAa,QAAb;;AAEF;AACA,QAAIU,MAAM,cAAId,KAAJ,EAAWE,CAAX,EAAcF,MAAMe,UAAN,CAAiBC,iBAA/B,CAAV;;AAEA;AACAF,UAAMA,oCAA6BA,IAAIG,KAAjC,GAAyCb,UAA/C;;AAEA;AACA,WAAO,uBAAgBJ,KAAhB,eAAkCc,GAAlC,OAAP;AACD,GA1DI,EA2DL,KA3DK,CAAP;AA6DD,C;;AApED;;AACA;;AACA;;AACA","file":"ObjectProto_toString.js","sourcesContent":["/**\n * Copyright (c) 2017-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n/* @flow */\n\nimport type { Realm } from \"../../realm.js\";\nimport { NativeFunctionValue, UndefinedValue, StringValue, NullValue } from \"../../values/index.js\";\nimport { IsArray } from \"../../methods/is.js\";\nimport { Get } from \"../../methods/get.js\";\nimport { To } from \"../../singletons.js\";\n\nexport default function(realm: Realm): NativeFunctionValue {\n // ECMA262 22.1.3.30\n return new NativeFunctionValue(\n realm,\n \"Object.prototype.toString\",\n \"toString\",\n 0,\n context => {\n // 1. If the this value is undefined, return \"[object Undefined]\".\n if (context instanceof UndefinedValue) return new StringValue(realm, \"[object Undefined]\");\n\n // 2. If the this value is null, return \"[object Null]\".\n if (context instanceof NullValue) return new StringValue(realm, \"[object Null]\");\n\n // 3. Let O be ToObject(this value).\n let O = To.ToObjectPartial(realm, context);\n\n let builtinTag;\n\n // 4. Let isArray be ? IsArray(O).\n let isArray = IsArray(realm, O);\n\n // 5. If isArray is true, let builtinTag be \"Array\".\n if (isArray) builtinTag = \"Array\";\n else if (O.$StringData)\n // 6. Else, if O is an exotic String object, let builtinTag be \"String\".\n builtinTag = \"String\";\n else if (O.$ParameterMap)\n // 7. Else, if O has an [[ParameterMap]] internal slot, let builtinTag be \"Arguments\".\n builtinTag = \"Arguments\";\n else if (O.$Call)\n // 8. Else, if O has a [[Call]] internal method, let builtinTag be \"Function\".\n builtinTag = \"Function\";\n else if (O.$ErrorData)\n // 9. Else, if O has an [[ErrorData]] internal slot, let builtinTag be \"Error\".\n builtinTag = \"Error\";\n else if (O.$BooleanData)\n // 10. Else, if O has a [[BooleanData]] internal slot, let builtinTag be \"Boolean\".\n builtinTag = \"Boolean\";\n else if (O.$NumberData)\n // 11. Else, if O has a [[NumberData]] internal slot, let builtinTag be \"Number\".\n builtinTag = \"Number\";\n else if (O.$DateValue)\n // 12. Else, if O has a [[DateValue]] internal slot, let builtinTag be \"Date\".\n builtinTag = \"Date\";\n else if (O.$RegExpMatcher)\n // 13. Else, if O has a [[RegExpMatcher]] internal slot, let builtinTag be \"RegExp\".\n builtinTag = \"RegExp\";\n else\n // 14. Else, let builtinTag be \"Object\".\n builtinTag = \"Object\";\n\n // 15. Let tag be ? Get(O, @@toStringTag).\n let tag = Get(realm, O, realm.intrinsics.SymbolToStringTag);\n\n // 16. If Type(tag) is not String, let tag be builtinTag.\n tag = tag instanceof StringValue ? tag.value : builtinTag;\n\n // 17. Return the String that is the result of concatenating \"[object \", tag, and \"]\".\n return new StringValue(realm, `[object ${tag}]`);\n },\n false\n );\n}\n"]}

View File

@@ -0,0 +1,153 @@
"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, obj) {
// ECMA262 19.1.3.2
obj.defineNativeMethod("hasOwnProperty", 1, function (context, _ref) {
var _ref2 = _slicedToArray(_ref, 1),
V = _ref2[0];
// 1. Let P be ? ToPropertyKey(V).
var P = _singletons.To.ToPropertyKey(realm, V.throwIfNotConcrete());
// 2. Let O be ? ToObject(this value).
var O = _singletons.To.ToObjectPartial(realm, context);
// 3. Return ? HasOwnProperty(O, P).
return new _index.BooleanValue(realm, (0, _has.HasOwnProperty)(realm, O, P));
});
// ECMA262 19.1.3.3
obj.defineNativeMethod("isPrototypeOf", 1, function (context, _ref3) {
var _ref4 = _slicedToArray(_ref3, 1),
V = _ref4[0];
// 1. If Type(V) is not Object, return false.
if (!V.mightBeObject()) return realm.intrinsics.false;
V = V.throwIfNotConcreteObject();
// 2. Let O be ? ToObject(this value).
var O = _singletons.To.ToObjectPartial(realm, context);
// 3. Repeat
while (true) {
// a. Let V be ? V.[[GetPrototypeOf]]().
V = V.$GetPrototypeOf();
// b. If V is null, return false.
if (V instanceof _index.NullValue) return realm.intrinsics.false;
// c. If SameValue(O, V) is true, return true.
if ((0, _abstract.SameValuePartial)(realm, O, V) === true) return realm.intrinsics.true;
}
(0, _invariant2.default)(false);
});
// ECMA262 19.1.3.4
obj.defineNativeMethod("propertyIsEnumerable", 1, function (context, _ref5) {
var _ref6 = _slicedToArray(_ref5, 1),
V = _ref6[0];
// 1. Let P be ? ToPropertyKey(V).
var P = _singletons.To.ToPropertyKey(realm, V.throwIfNotConcrete());
// 2. Let O be ? ToObject(this value).
var O = _singletons.To.ToObjectPartial(realm, context);
// 3. Let desc be ? O.[[GetOwnProperty]](P).
var desc = O.$GetOwnProperty(P);
// 4. If desc is undefined, return false.
if (!desc) return realm.intrinsics.false;
_singletons.Properties.ThrowIfMightHaveBeenDeleted(desc.value);
// 5. Return the value of desc.[[Enumerable]].
return desc.enumerable === undefined ? realm.intrinsics.undefined : new _index.BooleanValue(realm, desc.enumerable);
});
// ECMA262 19.1.3.5
obj.defineNativeMethod("toLocaleString", 0, function (context) {
// 1. Let O be the this value.
var O = context;
// 2. Return ? Invoke(O, "toString").
return (0, _call.Invoke)(realm, O, "toString");
});
// ECMA262 19.1.3.6
obj.defineNativeProperty("toString", realm.intrinsics.ObjectProto_toString);
// ECMA262 19.1.3.7
obj.defineNativeMethod("valueOf", 0, function (context) {
// 1. Return ? ToObject(this value).
return _singletons.To.ToObjectPartial(realm, context);
});
obj.$DefineOwnProperty("__proto__", {
// B.2.2.1.1
get: new _index.NativeFunctionValue(realm, undefined, "get __proto__", 0, function (context) {
// 1. Let O be ? ToObject(this value).
var O = _singletons.To.ToObject(realm, context.throwIfNotConcrete());
// 2. Return ? O.[[GetPrototypeOf]]().
return O.$GetPrototypeOf();
}),
// B.2.2.1.2
set: new _index.NativeFunctionValue(realm, undefined, "set __proto__", 1, function (context, _ref7) {
var _ref8 = _slicedToArray(_ref7, 1),
proto = _ref8[0];
// 1. Let O be ? RequireObjectCoercible(this value).
var O = (0, _abstract.RequireObjectCoercible)(realm, context);
// 2. If Type(proto) is neither Object nor Null, return undefined.
if (!(0, _has.HasSomeCompatibleType)(proto, _index.ObjectValue, _index.NullValue)) return realm.intrinsics.undefined;
// 3. If Type(O) is not Object, return undefined.
if (!O.mightBeObject()) return realm.intrinsics.undefined;
O = O.throwIfNotConcreteObject();
// 4. Let status be ? O.[[SetPrototypeOf]](proto).
var status = O.$SetPrototypeOf(proto.throwIfNotConcrete());
// 5. If status is false, throw a TypeError exception.
if (!status) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError, "couldn't set proto");
}
// 6. Return undefined.
return realm.intrinsics.undefined;
})
});
};
var _index = require("../../values/index.js");
var _abstract = require("../../methods/abstract.js");
var _has = require("../../methods/has.js");
var _call = require("../../methods/call.js");
var _singletons = require("../../singletons.js");
var _invariant = require("../../invariant.js");
var _invariant2 = _interopRequireDefault(_invariant);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
//# sourceMappingURL=ObjectPrototype.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,283 @@
"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) {
// ECMA262 25.4.3.1
var func = new _index.NativeFunctionValue(realm, "Promise", "Promise", 1, function (context, _ref, argCount, NewTarget) {
var _ref2 = _slicedToArray(_ref, 1),
executor = _ref2[0];
// 1. If NewTarget is undefined, throw a TypeError exception.
if (!NewTarget) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError);
}
// 2. If IsCallable(executor) is false, throw a TypeError exception.
if (!(0, _index2.IsCallable)(realm, executor)) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError);
}
// 3. Let promise be ? OrdinaryCreateFromConstructor(NewTarget, "%PromisePrototype%", « [[PromiseState]], [[PromiseResult]], [[PromiseFulfillReactions]], [[PromiseRejectReactions]], [[PromiseIsHandled]] »).
var promise = _singletons.Create.OrdinaryCreateFromConstructor(realm, NewTarget, "PromisePrototype", {
$PromiseState: undefined,
$PromiseResult: undefined,
$PromiseFulfillReactions: undefined,
$PromiseRejectReactions: undefined,
$PromiseIsHandled: undefined
});
// 4. Set promise's [[PromiseState]] internal slot to "pending".
promise.$PromiseState = "pending";
// 5. Set promise's [[PromiseFulfillReactions]] internal slot to a new empty List.
promise.$PromiseFulfillReactions = [];
// 6. Set promise's [[PromiseRejectReactions]] internal slot to a new empty List.
promise.$PromiseRejectReactions = [];
// 7. Set promise's [[PromiseIsHandled]] internal slot to false.
promise.$PromiseIsHandled = false;
// 8. Let resolvingFunctions be CreateResolvingFunctions(promise).
var resolvingFunctions = (0, _promise.CreateResolvingFunctions)(realm, promise);
// 9. Let completion be Call(executor, undefined, « resolvingFunctions.[[Resolve]], resolvingFunctions.[[Reject]] »).
var completion = void 0;
try {
completion = (0, _index2.Call)(realm, executor, realm.intrinsics.undefined, [resolvingFunctions.resolve, resolvingFunctions.reject]);
} catch (err) {
if (err instanceof _completions.AbruptCompletion) {
completion = err;
} else {
throw err;
}
}
// 10. If completion is an abrupt completion, then
if (completion instanceof _completions.AbruptCompletion) {
// a. Perform ? Call(resolvingFunctions.[[Reject]], undefined, « completion.[[Value]] »).
(0, _index2.Call)(realm, resolvingFunctions.reject, realm.intrinsics.undefined, [completion.value]);
}
// 11. Return promise.
return promise;
});
// ECMA262 25.4.4.1
func.defineNativeMethod("all", 1, function (context, _ref3) {
var _ref4 = _slicedToArray(_ref3, 1),
iterable = _ref4[0];
// 1. Let C be the this value.
var C = context.throwIfNotConcrete();
// 2. If Type(C) is not Object, throw a TypeError exception.
if (!(C instanceof _index.ObjectValue)) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError);
}
// 3. Let promiseCapability be ? NewPromiseCapability(C).
var promiseCapability = (0, _promise.NewPromiseCapability)(realm, C);
// 4. Let iterator be GetIterator(iterable).
var iterator = void 0;
try {
iterator = (0, _index2.GetIterator)(realm, iterable);
} catch (e) {
if (e instanceof _completions.AbruptCompletion) {
// 5. IfAbruptRejectPromise(iterator, promiseCapability).
(0, _index2.Call)(realm, promiseCapability.reject, realm.intrinsics.undefined, [e.value]);
return promiseCapability.promise;
} else throw e;
}
// 6. Let iteratorRecord be Record {[[Iterator]]: iterator, [[Done]]: false}.
var iteratorRecord = { $Iterator: iterator, $Done: false };
// 7. Let result be PerformPromiseAll(iteratorRecord, C, promiseCapability).
var result = void 0;
try {
(0, _invariant2.default)(C instanceof _index.FunctionValue);
result = (0, _promise.PerformPromiseAll)(realm, iteratorRecord, C, promiseCapability);
} catch (e) {
// 8. If result is an abrupt completion, then
if (e instanceof _completions.AbruptCompletion) {
// a. If iteratorRecord.[[Done]] is false, let result be IteratorClose(iterator, result).
if (iteratorRecord.$Done === false) {
try {
result = (0, _iterator.IteratorClose)(realm, iterator, e).value;
} catch (resultCompletion) {
if (resultCompletion instanceof _completions.AbruptCompletion) {
result = resultCompletion.value;
} else throw resultCompletion;
}
} else {
result = e.value;
}
// b. IfAbruptRejectPromise(result, promiseCapability).
(0, _index2.Call)(realm, promiseCapability.reject, realm.intrinsics.undefined, [result]);
return promiseCapability.promise;
} else throw e;
}
// 9. Return Completion(result).
return result;
});
// ECMA262 25.4.4.3
func.defineNativeMethod("race", 1, function (context, _ref5) {
var _ref6 = _slicedToArray(_ref5, 1),
iterable = _ref6[0];
// 1. Let C be the this value.
var C = context.throwIfNotConcrete();
// 2. If Type(C) is not Object, throw a TypeError exception.
if (!(C instanceof _index.ObjectValue)) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError);
}
// 3. Let promiseCapability be ? NewPromiseCapability(C).
var promiseCapability = (0, _promise.NewPromiseCapability)(realm, C);
// 4. Let iterator be GetIterator(iterable).
var iterator = void 0;
try {
iterator = (0, _index2.GetIterator)(realm, iterable);
} catch (e) {
if (e instanceof _completions.AbruptCompletion) {
// 5. IfAbruptRejectPromise(iterator, promiseCapability).
(0, _index2.Call)(realm, promiseCapability.reject, realm.intrinsics.undefined, [e.value]);
return promiseCapability.promise;
} else throw e;
}
// 6. Let iteratorRecord be Record {[[Iterator]]: iterator, [[Done]]: false}.
var iteratorRecord = { $Iterator: iterator, $Done: false };
// 7. Let result be PerformPromiseRace(iteratorRecord, promiseCapability, C).
var result = void 0;
try {
result = (0, _promise.PerformPromiseRace)(realm, iteratorRecord, promiseCapability, C);
} catch (e) {
// 8. If result is an abrupt completion, then
if (e instanceof _completions.AbruptCompletion) {
// a. If iteratorRecord.[[Done]] is false, let result be IteratorClose(iterator, result).
if (iteratorRecord.$Done === false) {
try {
result = (0, _iterator.IteratorClose)(realm, iterator, e).value;
} catch (resultCompletion) {
if (resultCompletion instanceof _completions.AbruptCompletion) {
result = resultCompletion.value;
} else throw resultCompletion;
}
} else {
result = e.value;
}
// b. IfAbruptRejectPromise(result, promiseCapability).
(0, _index2.Call)(realm, promiseCapability.reject, realm.intrinsics.undefined, [result]);
return promiseCapability.promise;
} else throw e;
}
// 9. Return Completion(result).
return result;
});
// ECMA262 25.4.4.4
func.defineNativeMethod("reject", 1, function (context, _ref7) {
var _ref8 = _slicedToArray(_ref7, 1),
r = _ref8[0];
// 1. Let C be the this value.
var C = context.throwIfNotConcrete();
// 2. If Type(C) is not Object, throw a TypeError exception.
if (!(C instanceof _index.ObjectValue)) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError);
}
// 3. Let promiseCapability be ? NewPromiseCapability(C).
var promiseCapability = (0, _promise.NewPromiseCapability)(realm, C);
// 4. Perform ? Call(promiseCapability.[[Reject]], undefined, « r »).
(0, _index2.Call)(realm, promiseCapability.reject, realm.intrinsics.undefined, [r]);
// 5. Return promiseCapability.[[Promise]].
return promiseCapability.promise;
});
// ECMA262 25.4.4.5
func.defineNativeMethod("resolve", 1, function (context, _ref9) {
var _ref10 = _slicedToArray(_ref9, 1),
x = _ref10[0];
// 1. Let C be the this value.
var C = context.throwIfNotConcrete();
// 2. If Type(C) is not Object, throw a TypeError exception.
if (!(C instanceof _index.ObjectValue)) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError);
}
// 3. If IsPromise(x) is true, then
if ((0, _index2.IsPromise)(realm, x)) {
(0, _invariant2.default)(x instanceof _index.ObjectValue);
// a. Let xConstructor be ? Get(x, "constructor").
var xConstructor = (0, _index2.Get)(realm, x, "constructor");
// b. If SameValue(xConstructor, C) is true, return x.
if ((0, _index2.SameValuePartial)(realm, xConstructor, C)) return x;
}
// 4. Let promiseCapability be ? NewPromiseCapability(C).
var promiseCapability = (0, _promise.NewPromiseCapability)(realm, C);
// 5. Perform ? Call(promiseCapability.[[Resolve]], undefined, « x »).
(0, _index2.Call)(realm, promiseCapability.resolve, realm.intrinsics.undefined, [x]);
// 6. Return promiseCapability.[[Promise]].
return promiseCapability.promise;
});
// ECMA262 25.4.4.6
func.defineNativeGetter(realm.intrinsics.SymbolSpecies, function (context) {
// 1. Return the this value
return context;
});
return func;
};
var _index = require("../../values/index.js");
var _completions = require("../../completions.js");
var _promise = require("../../methods/promise.js");
var _index2 = require("../../methods/index.js");
var _iterator = require("../../methods/iterator.js");
var _singletons = require("../../singletons.js");
var _invariant = require("../../invariant.js");
var _invariant2 = _interopRequireDefault(_invariant);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
//# sourceMappingURL=Promise.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,69 @@
"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, obj) {
// ECMA262 25.4.5.1
obj.defineNativeMethod("catch", 1, function (context, _ref) {
var _ref2 = _slicedToArray(_ref, 1),
onRejected = _ref2[0];
// 1. Let promise be the this value.
var promise = context;
// 2. Return ? Invoke(promise, "then", « undefined, onRejected »).
return (0, _index2.Invoke)(realm, promise, "then", [realm.intrinsics.undefined, onRejected]);
});
// ECMA262 25.4.5.3
obj.defineNativeMethod("then", 2, function (context, _ref3) {
var _ref4 = _slicedToArray(_ref3, 2),
onFulfilled = _ref4[0],
onRejected = _ref4[1];
// 1. Let promise be the this value.
var promise = context;
// 2. If IsPromise(promise) is false, throw a TypeError exception.
if (!(0, _index2.IsPromise)(realm, promise)) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError);
}
(0, _invariant2.default)(promise instanceof _index.ObjectValue);
// 3. Let C be ? SpeciesConstructor(promise, %Promise%).
var C = (0, _index2.SpeciesConstructor)(realm, promise, realm.intrinsics.Promise);
// 4. Let resultCapability be ? NewPromiseCapability(C).
var resultCapability = (0, _promise.NewPromiseCapability)(realm, C);
// 5. Return PerformPromiseThen(promise, onFulfilled, onRejected, resultCapability).
return (0, _promise.PerformPromiseThen)(realm, promise, onFulfilled, onRejected, resultCapability);
});
// ECMA262 25.4.5.4 Promise.prototype [ @@toStringTag ]
obj.defineNativeProperty(realm.intrinsics.SymbolToStringTag, new _index.StringValue(realm, "Promise"), { writable: false });
};
var _index = require("../../values/index.js");
var _index2 = require("../../methods/index.js");
var _promise = require("../../methods/promise.js");
var _invariant = require("../../invariant.js");
var _invariant2 = _interopRequireDefault(_invariant);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
//# sourceMappingURL=PromisePrototype.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../../src/intrinsics/ecma262/PromisePrototype.js"],"names":["realm","obj","defineNativeMethod","context","onRejected","promise","intrinsics","undefined","onFulfilled","createErrorThrowCompletion","TypeError","C","Promise","resultCapability","defineNativeProperty","SymbolToStringTag","writable"],"mappings":";;;;;;ypBAAA;;;;;;;;;kBAiBe,UAASA,KAAT,EAAuBC,GAAvB,EAA+C;AAC5D;AACAA,MAAIC,kBAAJ,CAAuB,OAAvB,EAAgC,CAAhC,EAAmC,UAACC,OAAD,QAA2B;AAAA;AAAA,QAAhBC,UAAgB;;AAC5D;AACA,QAAIC,UAAUF,OAAd;;AAEA;AACA,WAAO,oBAAOH,KAAP,EAAcK,OAAd,EAAuB,MAAvB,EAA+B,CAACL,MAAMM,UAAN,CAAiBC,SAAlB,EAA6BH,UAA7B,CAA/B,CAAP;AACD,GAND;;AAQA;AACAH,MAAIC,kBAAJ,CAAuB,MAAvB,EAA+B,CAA/B,EAAkC,UAACC,OAAD,SAAwC;AAAA;AAAA,QAA7BK,WAA6B;AAAA,QAAhBJ,UAAgB;;AACxE;AACA,QAAIC,UAAUF,OAAd;;AAEA;AACA,QAAI,CAAC,uBAAUH,KAAV,EAAiBK,OAAjB,CAAL,EAAgC;AAC9B,YAAML,MAAMS,0BAAN,CAAiCT,MAAMM,UAAN,CAAiBI,SAAlD,CAAN;AACD;AACD,6BAAUL,qCAAV;;AAEA;AACA,QAAIM,IAAI,gCAAmBX,KAAnB,EAA0BK,OAA1B,EAAmCL,MAAMM,UAAN,CAAiBM,OAApD,CAAR;;AAEA;AACA,QAAIC,mBAAmB,mCAAqBb,KAArB,EAA4BW,CAA5B,CAAvB;;AAEA;AACA,WAAO,iCAAmBX,KAAnB,EAA0BK,OAA1B,EAAmCG,WAAnC,EAAgDJ,UAAhD,EAA4DS,gBAA5D,CAAP;AACD,GAlBD;;AAoBA;AACAZ,MAAIa,oBAAJ,CAAyBd,MAAMM,UAAN,CAAiBS,iBAA1C,EAA6D,uBAAgBf,KAAhB,EAAuB,SAAvB,CAA7D,EAAgG,EAAEgB,UAAU,KAAZ,EAAhG;AACD,C;;AAtCD;;AACA;;AACA;;AACA","file":"PromisePrototype.js","sourcesContent":["/**\n * Copyright (c) 2017-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n/* @flow */\n\nimport type { Realm } from \"../../realm.js\";\nimport { StringValue, ObjectValue } from \"../../values/index.js\";\nimport { IsPromise, Invoke, SpeciesConstructor } from \"../../methods/index.js\";\nimport { NewPromiseCapability, PerformPromiseThen } from \"../../methods/promise.js\";\nimport invariant from \"../../invariant.js\";\n\nexport default function(realm: Realm, obj: ObjectValue): void {\n // ECMA262 25.4.5.1\n obj.defineNativeMethod(\"catch\", 1, (context, [onRejected]) => {\n // 1. Let promise be the this value.\n let promise = context;\n\n // 2. Return ? Invoke(promise, \"then\", « undefined, onRejected »).\n return Invoke(realm, promise, \"then\", [realm.intrinsics.undefined, onRejected]);\n });\n\n // ECMA262 25.4.5.3\n obj.defineNativeMethod(\"then\", 2, (context, [onFulfilled, onRejected]) => {\n // 1. Let promise be the this value.\n let promise = context;\n\n // 2. If IsPromise(promise) is false, throw a TypeError exception.\n if (!IsPromise(realm, promise)) {\n throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError);\n }\n invariant(promise instanceof ObjectValue);\n\n // 3. Let C be ? SpeciesConstructor(promise, %Promise%).\n let C = SpeciesConstructor(realm, promise, realm.intrinsics.Promise);\n\n // 4. Let resultCapability be ? NewPromiseCapability(C).\n let resultCapability = NewPromiseCapability(realm, C);\n\n // 5. Return PerformPromiseThen(promise, onFulfilled, onRejected, resultCapability).\n return PerformPromiseThen(realm, promise, onFulfilled, onRejected, resultCapability);\n });\n\n // ECMA262 25.4.5.4 Promise.prototype [ @@toStringTag ]\n obj.defineNativeProperty(realm.intrinsics.SymbolToStringTag, new StringValue(realm, \"Promise\"), { writable: false });\n}\n"]}

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