From 47aaab318ec86038c9395ae7b335bc70577732bb Mon Sep 17 00:00:00 2001 From: Lars Melchior Date: Fri, 25 Oct 2019 18:28:49 +0200 Subject: [PATCH 1/3] support custom errors with SourceMapTraceback --- src/lualib/SourceMapTraceBack.ts | 6 ++++-- src/lualib/declarations/global.d.ts | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/lualib/SourceMapTraceBack.ts b/src/lualib/SourceMapTraceBack.ts index 374f52b10..8df57174c 100644 --- a/src/lualib/SourceMapTraceBack.ts +++ b/src/lualib/SourceMapTraceBack.ts @@ -7,7 +7,10 @@ function __TS__SourceMapTraceBack(this: void, fileName: string, sourceMap: { [li if (globalThis.__TS__originalTraceback === undefined) { globalThis.__TS__originalTraceback = debug.traceback; debug.traceback = (thread, message, level) => { - const trace = globalThis.__TS__originalTraceback(thread, message, level); + let trace = globalThis.__TS__originalTraceback(thread, message, level); + if (typeof trace !== "string") { + trace = globalThis.__TS__originalTraceback(trace.toString(), 3); + } const [result] = string.gsub(trace, "(%S+).lua:(%d+)", (file, line) => { const fileSourceMap = globalThis.__TS__sourcemap[file + ".lua"]; if (fileSourceMap && fileSourceMap[line]) { @@ -15,7 +18,6 @@ function __TS__SourceMapTraceBack(this: void, fileName: string, sourceMap: { [li } return `${file}.lua:${line}`; }); - return result; }; } diff --git a/src/lualib/declarations/global.d.ts b/src/lualib/declarations/global.d.ts index 4a86d2542..bb1264213 100644 --- a/src/lualib/declarations/global.d.ts +++ b/src/lualib/declarations/global.d.ts @@ -2,7 +2,7 @@ declare var __TS__sourcemap: Record | undefined; declare var __TS__originalTraceback: - | ((this: void, thread?: any, message?: string, level?: number) => string) + | ((this: void, threadOrMessage?: any, messageOrLevel?: string | number, level?: number) => any) | undefined; // Override next declaration so we can omit extra return values From 48fc3a717f559e48456af5277bab4ed7c85b806c Mon Sep 17 00:00:00 2001 From: Lars Melchior Date: Fri, 25 Oct 2019 19:23:18 +0200 Subject: [PATCH 2/3] pass-through non-string tracebacks --- src/lualib/SourceMapTraceBack.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lualib/SourceMapTraceBack.ts b/src/lualib/SourceMapTraceBack.ts index 8df57174c..8a93be54f 100644 --- a/src/lualib/SourceMapTraceBack.ts +++ b/src/lualib/SourceMapTraceBack.ts @@ -7,9 +7,9 @@ function __TS__SourceMapTraceBack(this: void, fileName: string, sourceMap: { [li if (globalThis.__TS__originalTraceback === undefined) { globalThis.__TS__originalTraceback = debug.traceback; debug.traceback = (thread, message, level) => { - let trace = globalThis.__TS__originalTraceback(thread, message, level); + const trace = globalThis.__TS__originalTraceback(thread, message, level); if (typeof trace !== "string") { - trace = globalThis.__TS__originalTraceback(trace.toString(), 3); + return trace; } const [result] = string.gsub(trace, "(%S+).lua:(%d+)", (file, line) => { const fileSourceMap = globalThis.__TS__sourcemap[file + ".lua"]; From 761c45589be9fc43ff9eb82bf3358e47f8f92fe2 Mon Sep 17 00:00:00 2001 From: Lars Melchior Date: Fri, 25 Oct 2019 19:53:04 +0200 Subject: [PATCH 3/3] minimize changes --- src/lualib/SourceMapTraceBack.ts | 3 +++ src/lualib/declarations/global.d.ts | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/lualib/SourceMapTraceBack.ts b/src/lualib/SourceMapTraceBack.ts index 8a93be54f..edad12c45 100644 --- a/src/lualib/SourceMapTraceBack.ts +++ b/src/lualib/SourceMapTraceBack.ts @@ -8,9 +8,11 @@ function __TS__SourceMapTraceBack(this: void, fileName: string, sourceMap: { [li globalThis.__TS__originalTraceback = debug.traceback; debug.traceback = (thread, message, level) => { const trace = globalThis.__TS__originalTraceback(thread, message, level); + if (typeof trace !== "string") { return trace; } + const [result] = string.gsub(trace, "(%S+).lua:(%d+)", (file, line) => { const fileSourceMap = globalThis.__TS__sourcemap[file + ".lua"]; if (fileSourceMap && fileSourceMap[line]) { @@ -18,6 +20,7 @@ function __TS__SourceMapTraceBack(this: void, fileName: string, sourceMap: { [li } return `${file}.lua:${line}`; }); + return result; }; } diff --git a/src/lualib/declarations/global.d.ts b/src/lualib/declarations/global.d.ts index bb1264213..4a86d2542 100644 --- a/src/lualib/declarations/global.d.ts +++ b/src/lualib/declarations/global.d.ts @@ -2,7 +2,7 @@ declare var __TS__sourcemap: Record | undefined; declare var __TS__originalTraceback: - | ((this: void, threadOrMessage?: any, messageOrLevel?: string | number, level?: number) => any) + | ((this: void, thread?: any, message?: string, level?: number) => string) | undefined; // Override next declaration so we can omit extra return values