Skip to content

Commit c2c6b7d

Browse files
committed
[GR-14391] Include the top of the stack StackTraceElement in the SystemStackError message
PullRequest: truffleruby/697
2 parents a1a295f + bea8337 commit c2c6b7d

File tree

3 files changed

+12
-2
lines changed

3 files changed

+12
-2
lines changed

src/main/java/org/truffleruby/core/exception/CoreExceptions.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,12 @@ public DynamicObject runtimeError(String fullMessage, Node currentNode, Throwabl
236236
@TruffleBoundary
237237
public DynamicObject systemStackErrorStackLevelTooDeep(Node currentNode, StackOverflowError javaThrowable) {
238238
DynamicObject exceptionClass = context.getCoreLibrary().getSystemStackErrorClass();
239-
return ExceptionOperations.createRubyException(context, exceptionClass, coreStrings().STACK_LEVEL_TOO_DEEP.createInstance(), currentNode, javaThrowable);
239+
StackTraceElement[] stackTrace = javaThrowable.getStackTrace();
240+
String topOfTheStack = stackTrace.length > 0 ? BacktraceFormatter.formatJava(stackTrace[0]) : "<empty Java stacktrace>";
241+
final String message = coreStrings().STACK_LEVEL_TOO_DEEP + "\n\tfrom " + topOfTheStack;
242+
return ExceptionOperations.createRubyException(context, exceptionClass,
243+
StringOperations.createString(context, StringOperations.encodeRope(message, UTF8Encoding.INSTANCE)),
244+
currentNode, javaThrowable);
240245
}
241246

242247
// NoMemoryError

src/main/java/org/truffleruby/language/backtrace/BacktraceFormatter.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,11 @@ private String formatLineInternal(Activation[] activations, int n, DynamicObject
244244
return builder.toString();
245245
}
246246

247+
public static String formatJava(StackTraceElement stackTraceElement) {
248+
return stackTraceElement.getFileName() + ":" + stackTraceElement.getLineNumber() +
249+
":in `" + stackTraceElement.getClassName() + "." + stackTraceElement.getMethodName() + "'";
250+
}
251+
247252
private String formatForeign(Node callNode, String methodName) {
248253
final StringBuilder builder = new StringBuilder();
249254
final SourceSection sourceSection = callNode == null ? null : callNode.getEncapsulatingSourceSection();

tool/jt.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1895,7 +1895,7 @@ def build_graalvm(*options)
18951895
*options]
18961896

18971897
mx(*mx_args, 'build', java_home: java_home)
1898-
build_dir = mx(*mx_args, 'graalvm-home', capture: true).lines.last.chomp
1898+
build_dir = mx(*mx_args, 'graalvm-home', java_home: java_home, capture: true).lines.last.chomp
18991899

19001900
dest = "#{TRUFFLERUBY_DIR}/mxbuild/graalvm"
19011901
FileUtils.rm_rf dest

0 commit comments

Comments
 (0)