From 9f96d28ca8ebe09d2920cd9835cbdb0713eb651c Mon Sep 17 00:00:00 2001 From: Jaroslav Tulach Date: Tue, 10 Sep 2024 10:19:27 +0200 Subject: [PATCH 1/3] Logging details when to_display_name invocations fails --- .../org/enso/interpreter/test/AtomConstructorTest.java | 8 +++++--- .../org/enso/interpreter/test/instrument/ReplTest.scala | 4 +--- .../enso/interpreter/runtime/error/PanicException.java | 8 +++++++- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/AtomConstructorTest.java b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/AtomConstructorTest.java index cf37f5c03cee..6555db35b914 100644 --- a/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/AtomConstructorTest.java +++ b/engine/runtime-integration-tests/src/test/java/org/enso/interpreter/test/AtomConstructorTest.java @@ -1,5 +1,7 @@ package org.enso.interpreter.test; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsString; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @@ -146,19 +148,19 @@ private static void assertLessArguments(String msg, Function fac var zero = factory.apply(new Object[0]); fail("Expecting exception: " + zero); } catch (PanicException e) { - assertEquals(msg + " no arguments", "Arity_Error.Error", e.getMessage()); + assertThat(msg + " no arguments", e.getMessage(), containsString("Arity_Error")); } try { var one = factory.apply(new Object[] {"a"}); fail("Expecting exception: " + one); } catch (PanicException e) { - assertEquals(msg + " one argument", "Arity_Error.Error", e.getMessage()); + assertThat(msg + " one argument", e.getMessage(), containsString("Arity_Error")); } try { var two = factory.apply(new Object[] {"a", "b"}); fail("Expecting exception: " + two); } catch (PanicException e) { - assertEquals(msg + " two arguments", "Arity_Error.Error", e.getMessage()); + assertThat(msg + " two arguments", e.getMessage(), containsString("Arity_Error")); } return null; }); diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/ReplTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/ReplTest.scala index 8a1a67f602a5..7ef880a3fbbd 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/ReplTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/ReplTest.scala @@ -295,9 +295,7 @@ class ReplTest executor.exit() } eval(code) - val errorMsg = - "Compile_Error.Error" - evalResult.left.value.getMessage shouldEqual errorMsg + evalResult.left.value.getMessage should include ("Compile_Error") } "handle errors gracefully (pretty print)" in { diff --git a/engine/runtime/src/main/java/org/enso/interpreter/runtime/error/PanicException.java b/engine/runtime/src/main/java/org/enso/interpreter/runtime/error/PanicException.java index 39f80e13bc27..c413cc7975df 100644 --- a/engine/runtime/src/main/java/org/enso/interpreter/runtime/error/PanicException.java +++ b/engine/runtime/src/main/java/org/enso/interpreter/runtime/error/PanicException.java @@ -13,6 +13,7 @@ import com.oracle.truffle.api.library.ExportMessage; import com.oracle.truffle.api.nodes.Node; import com.oracle.truffle.api.source.SourceSection; +import java.util.logging.Level; import org.enso.interpreter.node.BaseNode.TailStatus; import org.enso.interpreter.node.callable.IndirectInvokeMethodNode; import org.enso.interpreter.node.callable.InvokeCallableNode.ArgumentsExecutionMode; @@ -81,9 +82,13 @@ public String getMessage() { private String computeMessage() { String msg; InteropLibrary library = InteropLibrary.getUncached(); + Object info = null; try { - msg = library.asString(library.getExceptionMessage(this)); + info = library.getExceptionMessage(this); + msg = library.asString(info); } catch (AssertionError | UnsupportedMessageException e) { + var ctx = EnsoContext.get(null); + ctx.getLogger().log(Level.WARNING, "Cannot convert " + info + " to string", e); msg = TypeToDisplayTextNode.getUncached().execute(payload); } cacheMessage = msg; @@ -153,6 +158,7 @@ static Object handleExceptionMessage( try { return Text.create(strings.asString(text)); } catch (UnsupportedMessageException e) { + ctx.getLogger().log(Level.WARNING, "Cannot convert " + text + " to string", e); return Text.create(typeToDisplayTextNode.execute(payload)); } } From 8b284c263227c406f28e630136316d1426e78387 Mon Sep 17 00:00:00 2001 From: Jaroslav Tulach Date: Tue, 10 Sep 2024 14:13:07 +0200 Subject: [PATCH 2/3] scalafmtAll --- .../scala/org/enso/interpreter/test/instrument/ReplTest.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/ReplTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/ReplTest.scala index 7ef880a3fbbd..623803609b35 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/ReplTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/interpreter/test/instrument/ReplTest.scala @@ -295,7 +295,7 @@ class ReplTest executor.exit() } eval(code) - evalResult.left.value.getMessage should include ("Compile_Error") + evalResult.left.value.getMessage should include("Compile_Error") } "handle errors gracefully (pretty print)" in { From 8c53c0fdf83c85a01536717301b47ea43ff5b430 Mon Sep 17 00:00:00 2001 From: Jaroslav Tulach Date: Tue, 10 Sep 2024 17:52:22 +0200 Subject: [PATCH 3/3] Concatenation must be outside of PE mode --- .../java/org/enso/interpreter/runtime/error/PanicException.java | 1 + 1 file changed, 1 insertion(+) diff --git a/engine/runtime/src/main/java/org/enso/interpreter/runtime/error/PanicException.java b/engine/runtime/src/main/java/org/enso/interpreter/runtime/error/PanicException.java index c413cc7975df..26eab9d67ee2 100644 --- a/engine/runtime/src/main/java/org/enso/interpreter/runtime/error/PanicException.java +++ b/engine/runtime/src/main/java/org/enso/interpreter/runtime/error/PanicException.java @@ -158,6 +158,7 @@ static Object handleExceptionMessage( try { return Text.create(strings.asString(text)); } catch (UnsupportedMessageException e) { + CompilerDirectives.transferToInterpreter(); ctx.getLogger().log(Level.WARNING, "Cannot convert " + text + " to string", e); return Text.create(typeToDisplayTextNode.execute(payload)); }