summaryrefslogtreecommitdiff
path: root/core/02_error.js
diff options
context:
space:
mode:
Diffstat (limited to 'core/02_error.js')
-rw-r--r--core/02_error.js104
1 files changed, 51 insertions, 53 deletions
diff --git a/core/02_error.js b/core/02_error.js
index c6b808169..a7d5d0ee2 100644
--- a/core/02_error.js
+++ b/core/02_error.js
@@ -71,7 +71,7 @@
}
// Keep in sync with `cli/fmt_errors.rs`.
- function formatLocation(callSite, formatFileNameFn) {
+ function formatLocation(callSite) {
if (callSite.isNative()) {
return "native";
}
@@ -81,7 +81,7 @@
const fileName = callSite.getFileName();
if (fileName) {
- result += formatFileNameFn(fileName);
+ result += core.opSync("op_format_file_name", fileName);
} else {
if (callSite.isEval()) {
const evalOrigin = callSite.getEvalOrigin();
@@ -107,7 +107,7 @@
}
// Keep in sync with `cli/fmt_errors.rs`.
- function formatCallSite(callSite, formatFileNameFn) {
+ function formatCallSite(callSite) {
let result = "";
const functionName = callSite.getFunctionName();
@@ -160,11 +160,11 @@
} else if (functionName) {
result += functionName;
} else {
- result += formatLocation(callSite, formatFileNameFn);
+ result += formatLocation(callSite);
return result;
}
- result += ` (${formatLocation(callSite, formatFileNameFn)})`;
+ result += ` (${formatLocation(callSite)})`;
return result;
}
@@ -189,57 +189,55 @@
};
}
- /** Returns a function that can be used as `Error.prepareStackTrace`. */
- function createPrepareStackTrace(formatFileNameFn) {
- return function prepareStackTrace(
- error,
- callSites,
- ) {
- const mappedCallSites = ArrayPrototypeMap(callSites, (callSite) => {
- const fileName = callSite.getFileName();
- const lineNumber = callSite.getLineNumber();
- const columnNumber = callSite.getColumnNumber();
- if (fileName && lineNumber != null && columnNumber != null) {
- return patchCallSite(
- callSite,
- core.applySourceMap({
- fileName,
- lineNumber,
- columnNumber,
- }),
- );
- }
- return callSite;
- });
- ObjectDefineProperties(error, {
- __callSiteEvals: { value: [], configurable: true },
- });
- const formattedCallSites = [];
- for (const callSite of mappedCallSites) {
- ArrayPrototypePush(error.__callSiteEvals, evaluateCallSite(callSite));
- ArrayPrototypePush(
- formattedCallSites,
- formatCallSite(callSite, formatFileNameFn),
+ /** A function that can be used as `Error.prepareStackTrace`. */
+ function prepareStackTrace(
+ error,
+ callSites,
+ ) {
+ const mappedCallSites = ArrayPrototypeMap(callSites, (callSite) => {
+ const fileName = callSite.getFileName();
+ const lineNumber = callSite.getLineNumber();
+ const columnNumber = callSite.getColumnNumber();
+ if (fileName && lineNumber != null && columnNumber != null) {
+ return patchCallSite(
+ callSite,
+ core.applySourceMap({
+ fileName,
+ lineNumber,
+ columnNumber,
+ }),
);
}
- const message = error.message !== undefined ? error.message : "";
- const name = error.name !== undefined ? error.name : "Error";
- let messageLine;
- if (name != "" && message != "") {
- messageLine = `${name}: ${message}`;
- } else if ((name || message) != "") {
- messageLine = name || message;
- } else {
- messageLine = "";
- }
- return messageLine +
- ArrayPrototypeJoin(
- ArrayPrototypeMap(formattedCallSites, (s) => `\n at ${s}`),
- "",
- );
- };
+ return callSite;
+ });
+ ObjectDefineProperties(error, {
+ __callSiteEvals: { value: [], configurable: true },
+ });
+ const formattedCallSites = [];
+ for (const callSite of mappedCallSites) {
+ ArrayPrototypePush(error.__callSiteEvals, evaluateCallSite(callSite));
+ ArrayPrototypePush(
+ formattedCallSites,
+ formatCallSite(callSite),
+ );
+ }
+ const message = error.message !== undefined ? error.message : "";
+ const name = error.name !== undefined ? error.name : "Error";
+ let messageLine;
+ if (name != "" && message != "") {
+ messageLine = `${name}: ${message}`;
+ } else if ((name || message) != "") {
+ messageLine = name || message;
+ } else {
+ messageLine = "";
+ }
+ return messageLine +
+ ArrayPrototypeJoin(
+ ArrayPrototypeMap(formattedCallSites, (s) => `\n at ${s}`),
+ "",
+ );
}
- ObjectAssign(globalThis.__bootstrap.core, { createPrepareStackTrace });
+ ObjectAssign(globalThis.__bootstrap.core, { prepareStackTrace });
ObjectFreeze(globalThis.__bootstrap.core);
})(this);