|
19 | 19 | import org.truffleruby.Layouts;
|
20 | 20 | import org.truffleruby.language.RubyGuards;
|
21 | 21 | import org.truffleruby.language.RubyNode;
|
| 22 | +import org.truffleruby.language.backtrace.Backtrace; |
22 | 23 | import org.truffleruby.language.backtrace.BacktraceFormatter;
|
23 | 24 | import org.truffleruby.language.backtrace.BacktraceFormatter.FormattingFlags;
|
24 | 25 | import org.truffleruby.language.control.JavaException;
|
@@ -285,13 +286,19 @@ private DynamicObject translateThrowable(Throwable throwable) {
|
285 | 286 | // Java exception, print it formatted like a Ruby exception
|
286 | 287 | final String message = t.getMessage();
|
287 | 288 | builder.append(message != null ? message : "<no message>");
|
288 |
| - |
289 | 289 | builder.append(" (").append(t.getClass().getSimpleName()).append(")\n");
|
290 | 290 |
|
291 |
| - // Print the first 10 lines of backtrace |
292 |
| - final StackTraceElement[] stackTrace = t.getStackTrace(); |
293 |
| - for (int i = 0; i < Math.min(stackTrace.length, 10); i++) { |
294 |
| - stackTraceElementToRuby(builder, stackTrace[i]); |
| 291 | + if (t instanceof TruffleException) { |
| 292 | + final Backtrace backtrace = new Backtrace((TruffleException) t); |
| 293 | + final BacktraceFormatter formatter = new BacktraceFormatter(getContext(), EnumSet.noneOf(FormattingFlags.class)); |
| 294 | + final String formattedBacktrace = formatter.formatBacktrace(null, backtrace); |
| 295 | + builder.append(formattedBacktrace).append('\n'); |
| 296 | + } else { |
| 297 | + // Print the first 10 lines of backtrace |
| 298 | + final StackTraceElement[] stackTrace = t.getStackTrace(); |
| 299 | + for (int i = 0; i < Math.min(stackTrace.length, 10); i++) { |
| 300 | + stackTraceElementToRuby(builder, stackTrace[i]); |
| 301 | + } |
295 | 302 | }
|
296 | 303 | }
|
297 | 304 |
|
|
0 commit comments