From 1ea57a7746e715c121e6e9730e0503bf2c765bd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20Bene=C5=A1?= Date: Wed, 15 Jan 2025 14:49:25 +0100 Subject: [PATCH 1/2] Use .toString instead of .getMessage (that could be null) --- effekt/shared/src/main/scala/effekt/Compiler.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/effekt/shared/src/main/scala/effekt/Compiler.scala b/effekt/shared/src/main/scala/effekt/Compiler.scala index a583f6554..e7480d445 100644 --- a/effekt/shared/src/main/scala/effekt/Compiler.scala +++ b/effekt/shared/src/main/scala/effekt/Compiler.scala @@ -133,7 +133,7 @@ trait Compiler[Executable] { } None case e => - C.info("Effekt Compiler Crash: " + e.getMessage) + C.info("Effekt Compiler Crash: " + e.toString) e.getStackTrace.foreach { line => C.info(" at " + line) } From a22a0f02f05781c5f643d58e85a7444ecdc00b82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20Bene=C5=A1?= Date: Wed, 15 Jan 2025 14:50:55 +0100 Subject: [PATCH 2/2] Print the stack trace properly --- effekt/shared/src/main/scala/effekt/Compiler.scala | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/effekt/shared/src/main/scala/effekt/Compiler.scala b/effekt/shared/src/main/scala/effekt/Compiler.scala index e7480d445..c7b356e86 100644 --- a/effekt/shared/src/main/scala/effekt/Compiler.scala +++ b/effekt/shared/src/main/scala/effekt/Compiler.scala @@ -115,6 +115,11 @@ trait Compiler[Executable] { * - Server / Driver to typecheck and report type errors in VSCode */ def runFrontend(source: Source)(using C: Context): Option[Module] = + def getStackTrace(e: Throwable): String = + val stringWriter = new java.io.StringWriter() + e.printStackTrace(new java.io.PrintWriter(stringWriter)) + stringWriter.toString + try { val res = Frontend(source).map { res => val mod = res.mod @@ -128,15 +133,11 @@ trait Compiler[Executable] { None case e @ CompilerPanic(msg) => C.report(msg) - e.getStackTrace.foreach { line => - C.info(" at " + line) - } + C.info(getStackTrace(e)) None case e => C.info("Effekt Compiler Crash: " + e.toString) - e.getStackTrace.foreach { line => - C.info(" at " + line) - } + C.info(getStackTrace(e)) None }