Skip to content

Commit d961bd2

Browse files
committed
[GR-18163] Host interop fixes
PullRequest: truffleruby/4064
2 parents 36ef931 + 6322bec commit d961bd2

File tree

2 files changed

+28
-37
lines changed

2 files changed

+28
-37
lines changed

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

Lines changed: 22 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -302,8 +302,7 @@ public RubyException frozenError(Object object, Node currentNode) {
302302
@TruffleBoundary
303303
public RubyException frozenError(String message, Node currentNode, Object receiver) {
304304
RubyClass exceptionClass = context.getCoreLibrary().frozenErrorClass;
305-
RubyString errorMessage = StringOperations
306-
.createUTF8String(context, language, message);
305+
RubyString errorMessage = StringOperations.createUTF8String(context, language, message);
307306
final Backtrace backtrace = context.getCallStack().getBacktrace(currentNode);
308307
final Object cause = ThreadGetExceptionNode.getLastException(language);
309308
showExceptionIfDebug(exceptionClass, errorMessage, backtrace);
@@ -329,25 +328,22 @@ public RubyException runtimeErrorCoverageNotEnabled(Node currentNode) {
329328
@TruffleBoundary
330329
public RubyException runtimeError(String message, Node currentNode) {
331330
RubyClass exceptionClass = context.getCoreLibrary().runtimeErrorClass;
332-
RubyString errorMessage = StringOperations
333-
.createUTF8String(context, language, message);
331+
RubyString errorMessage = StringOperations.createUTF8String(context, language, message);
334332
return ExceptionOperations.createRubyException(context, exceptionClass, errorMessage, currentNode, null);
335333
}
336334

337335
@TruffleBoundary
338336
public RubyException runtimeError(String message, Node currentNode, Throwable javaThrowable) {
339337
RubyClass exceptionClass = context.getCoreLibrary().runtimeErrorClass;
340-
RubyString errorMessage = StringOperations
341-
.createUTF8String(context, language, message);
338+
RubyString errorMessage = StringOperations.createUTF8String(context, language, message);
342339
return ExceptionOperations
343340
.createRubyException(context, exceptionClass, errorMessage, currentNode, javaThrowable);
344341
}
345342

346343
@TruffleBoundary
347344
public RubyException runtimeError(String message, Backtrace backtrace) {
348345
RubyClass exceptionClass = context.getCoreLibrary().runtimeErrorClass;
349-
RubyString errorMessage = StringOperations
350-
.createUTF8String(context, language, message);
346+
RubyString errorMessage = StringOperations.createUTF8String(context, language, message);
351347
return ExceptionOperations.createRubyException(context, exceptionClass, errorMessage, backtrace);
352348
}
353349

@@ -362,8 +358,7 @@ public RubyException systemStackErrorStackLevelTooDeep(Node currentNode, StackOv
362358
: "<empty Java stacktrace>";
363359
final String message = coreStrings().STACK_LEVEL_TOO_DEEP + "\n\tfrom " + topOfTheStack;
364360
final Backtrace backtrace = context.getCallStack().getBacktrace(currentNode, 0, javaThrowable);
365-
final RubyString messageString = StringOperations
366-
.createUTF8String(context, language, message);
361+
final RubyString messageString = StringOperations.createUTF8String(context, language, message);
367362
return ExceptionOperations.createSystemStackError(context, messageString, backtrace, showExceptionIfDebug);
368363
}
369364

@@ -452,8 +447,7 @@ public RubyException mathDomainError(String method, Node currentNode) {
452447
@TruffleBoundary
453448
public RubyException indexError(String message, Node currentNode) {
454449
RubyClass exceptionClass = context.getCoreLibrary().indexErrorClass;
455-
RubyString errorMessage = StringOperations
456-
.createUTF8String(context, language, message);
450+
RubyString errorMessage = StringOperations.createUTF8String(context, language, message);
457451
return ExceptionOperations.createRubyException(context, exceptionClass, errorMessage, currentNode, null);
458452
}
459453

@@ -497,8 +491,7 @@ public RubyException indexErrorInvalidBufferOffsetException(InvalidBufferOffsetE
497491
@TruffleBoundary
498492
public RubyException keyError(String message, Node currentNode) {
499493
RubyClass exceptionClass = context.getCoreLibrary().keyErrorClass;
500-
RubyString errorMessage = StringOperations
501-
.createUTF8String(context, language, message);
494+
RubyString errorMessage = StringOperations.createUTF8String(context, language, message);
502495
return ExceptionOperations.createRubyException(context, exceptionClass, errorMessage, currentNode, null);
503496
}
504497

@@ -512,8 +505,7 @@ public RubyException keyError(UnknownKeyException exception, Node currentNode) {
512505
@TruffleBoundary
513506
public RubyException stopIteration(String message, Node currentNode) {
514507
RubyClass exceptionClass = context.getCoreLibrary().stopIterationClass;
515-
RubyString errorMessage = StringOperations
516-
.createUTF8String(context, language, message);
508+
RubyString errorMessage = StringOperations.createUTF8String(context, language, message);
517509
return ExceptionOperations.createRubyException(context, exceptionClass, errorMessage, currentNode, null);
518510
}
519511

@@ -522,8 +514,7 @@ public RubyException stopIteration(String message, Node currentNode) {
522514
@TruffleBoundary
523515
public RubyException localJumpError(String message, Node currentNode) {
524516
RubyClass exceptionClass = context.getCoreLibrary().localJumpErrorClass;
525-
RubyString errorMessage = StringOperations
526-
.createUTF8String(context, language, message);
517+
RubyString errorMessage = StringOperations.createUTF8String(context, language, message);
527518
return ExceptionOperations.createRubyException(context, exceptionClass, errorMessage, currentNode, null);
528519
}
529520

@@ -690,17 +681,20 @@ public RubyException typeErrorExpectedProcOrMethodOrUnboundMethod(Object object,
690681
@TruffleBoundary
691682
public RubyException typeError(String message, Node currentNode, Throwable javaThrowable) {
692683
RubyClass exceptionClass = context.getCoreLibrary().typeErrorClass;
693-
RubyString errorMessage = StringOperations
694-
.createUTF8String(context, language, message);
684+
RubyString errorMessage = StringOperations.createUTF8String(context, language, message);
695685
return ExceptionOperations
696686
.createRubyException(context, exceptionClass, errorMessage, currentNode, javaThrowable);
697687
}
698688

699689
@TruffleBoundary
700690
public RubyException typeErrorUnsupportedTypeException(UnsupportedTypeException exception, Node currentNode) {
701-
RubyArray rubyArray = createArray(context, language, exception.getSuppliedValues());
702-
String formattedValues = RubyGuards.getJavaString(DispatchNode.getUncached().call(rubyArray, "inspect"));
703-
return typeError("unsupported type " + formattedValues, currentNode);
691+
String message = exception.getMessage();
692+
if (message == null) {
693+
RubyArray rubyArray = createArray(context, language, exception.getSuppliedValues());
694+
String formattedValues = RubyGuards.getJavaString(DispatchNode.getUncached().call(rubyArray, "inspect"));
695+
message = "unsupported type " + formattedValues;
696+
}
697+
return typeError(message, currentNode);
704698
}
705699

706700
// NameError
@@ -826,16 +820,15 @@ public RubyNameError nameErrorImportNotFound(String name, Node currentNode) {
826820
public RubyNameError nameErrorUnknownIdentifierException(
827821
UnknownIdentifierException exception, Object receiver, Node currentNode) {
828822
return nameError(
829-
"Unknown identifier: " + exception.getUnknownIdentifier(),
823+
exception.getMessage(),
830824
receiver,
831825
exception.getUnknownIdentifier(),
832826
currentNode);
833827
}
834828

835829
@TruffleBoundary
836830
public RubyNameError nameError(String message, Object receiver, String name, Node currentNode) {
837-
final RubyString messageString = StringOperations
838-
.createUTF8String(context, language, message);
831+
final RubyString messageString = StringOperations.createUTF8String(context, language, message);
839832
final RubyClass exceptionClass = context.getCoreLibrary().nameErrorClass;
840833
final Backtrace backtrace = context.getCallStack().getBacktrace(currentNode);
841834
final Object cause = ThreadGetExceptionNode.getLastException(language);
@@ -944,9 +937,10 @@ public RubyNoMethodError noSuperMethodOutsideMethodError(Node currentNode) {
944937
Nil.INSTANCE);
945938
}
946939

940+
@TruffleBoundary
947941
public RubyNoMethodError noMethodErrorUnknownIdentifier(Object receiver, String name, Object[] args,
948942
UnknownIdentifierException exception, Node currentNode) {
949-
return noMethodError(ExceptionOperations.getMessage(exception), receiver, name, args, currentNode);
943+
return noMethodError(exception.getMessage(), receiver, name, args, currentNode);
950944
}
951945

952946
// LoadError
@@ -1235,8 +1229,7 @@ public RubyException securityError(String message, Node currentNode) {
12351229
@TruffleBoundary
12361230
public RubyException ffiNullPointerError(String message, Node currentNode) {
12371231
RubyClass exceptionClass = context.getCoreLibrary().truffleFFINullPointerErrorClass;
1238-
RubyString errorMessage = StringOperations
1239-
.createUTF8String(context, language, message);
1232+
RubyString errorMessage = StringOperations.createUTF8String(context, language, message);
12401233
return ExceptionOperations.createRubyException(context, exceptionClass, errorMessage, currentNode, null);
12411234
}
12421235

src/main/java/org/truffleruby/language/methods/TranslateExceptionNode.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -114,12 +114,12 @@ protected boolean needsSpecialTranslation(Throwable e) {
114114
private static RaiseException doTranslateSpecial(Node node, Throwable e) {
115115
if (e instanceof TruffleString.IllegalByteArrayLengthException) {
116116
return new RaiseException(getContext(node), coreExceptions(node).argumentError(e.getMessage(), node));
117-
} else if (e instanceof UnsupportedSpecializationException) {
117+
} else if (e instanceof UnsupportedSpecializationException unsupported) {
118118
return new RaiseException(getContext(node),
119-
translateUnsupportedSpecialization(node, getContext(node), (UnsupportedSpecializationException) e));
120-
} else if (e instanceof StackOverflowError) {
119+
translateUnsupportedSpecialization(unsupported.getNode(), getContext(node), unsupported));
120+
} else if (e instanceof StackOverflowError stackOverflowError) {
121121
return new RaiseException(getContext(node),
122-
translateStackOverflow(node, getContext(node), (StackOverflowError) e));
122+
translateStackOverflow(node, getContext(node), stackOverflowError));
123123
} else {
124124
return new RaiseException(getContext(node),
125125
translateOutOfMemory(node, getContext(node), (OutOfMemoryError) e));
@@ -175,16 +175,14 @@ public static StringBuilder argumentsToString(StringBuilder builder, Object[] ar
175175

176176
if (value == null) {
177177
builder.append("null");
178-
} else if (value instanceof RubyDynamicObject) {
179-
final RubyDynamicObject dynamicObject = (RubyDynamicObject) value;
178+
} else if (value instanceof RubyDynamicObject dynamicObject) {
180179

181180
builder.append(dynamicObject.getLogicalClass().fields.getName());
182181
builder.append("(");
183182
builder.append(value.getClass().getName());
184183
builder.append(")");
185184

186-
if (value instanceof RubyArray) {
187-
final RubyArray array = (RubyArray) value;
185+
if (value instanceof RubyArray array) {
188186
builder.append("[");
189187

190188
if (array.getStore() == null) {

0 commit comments

Comments
 (0)