first commit
This commit is contained in:
171
build/node_modules/prepack/lib/intrinsics/ecma262/Error.js
generated
vendored
Normal file
171
build/node_modules/prepack/lib/intrinsics/ecma262/Error.js
generated
vendored
Normal 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
|
||||
Reference in New Issue
Block a user