Skip to content

Commit d550d77

Browse files
committed
put getting the message of a JavaException behind a TruffleBoundary more conveniently
1 parent 766e915 commit d550d77

File tree

11 files changed

+45
-34
lines changed

11 files changed

+45
-34
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/BuiltinFunctions.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1604,7 +1604,7 @@ String input(@SuppressWarnings("unused") PNone prompt) {
16041604
buf.rewind();
16051605
return buf.toString();
16061606
} catch (IOException e) {
1607-
throw raise(PythonBuiltinClassType.EOFError, e.getMessage());
1607+
throw raise(PythonBuiltinClassType.EOFError, e);
16081608
}
16091609
}
16101610

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/CodecsModuleBuiltins.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,7 @@ private PBytes encodeString(String self, String encoding, String errors) {
315315
} catch (IllegalArgumentException e) {
316316
throw raise(LookupError, "unknown encoding: %s", encoding);
317317
} catch (CharacterCodingException e) {
318-
throw raise(UnicodeEncodeError, "%s", e.getMessage());
318+
throw raise(UnicodeEncodeError, e);
319319
}
320320
}
321321

@@ -375,7 +375,7 @@ private Object[] encodeString(String self, String errors) {
375375
// TODO(fa): bytes object creation should not be behind a TruffleBoundary
376376
return new Object[]{factory().createBytes(data), codePoints};
377377
} catch (CharacterCodingException e) {
378-
throw raise(UnicodeEncodeError, "%s", e.getMessage());
378+
throw raise(UnicodeEncodeError, e);
379379
}
380380
}
381381

@@ -443,7 +443,7 @@ String decodeBytes(ByteBuffer bytes, String encoding, String errors) {
443443
} catch (IllegalArgumentException e) {
444444
throw raise(LookupError, "unknown encoding: %s", encoding);
445445
} catch (CharacterCodingException e) {
446-
throw raise(UnicodeDecodeError, "%s", e.getMessage());
446+
throw raise(UnicodeDecodeError, e);
447447
}
448448
}
449449
}
@@ -504,7 +504,7 @@ String decodeBytes(ByteBuffer bytes, String errors) {
504504
CharBuffer decoded = charset.newDecoder().onMalformedInput(errorAction).onUnmappableCharacter(errorAction).decode(buf);
505505
return String.valueOf(decoded);
506506
} catch (CharacterCodingException e) {
507-
throw raise(UnicodeDecodeError, "%s", e.getMessage());
507+
throw raise(UnicodeDecodeError, e);
508508
}
509509
}
510510
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/ImpModuleBuiltins.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,7 @@ private CheckFunctionResultNode getCheckResultNode() {
267267
return checkResultNode;
268268
}
269269

270+
@TruffleBoundary
270271
private PException reportImportError(RuntimeException e, String path) {
271272
StringBuilder sb = new StringBuilder();
272273
sb.append(e.getMessage());

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/InteropModuleBuiltins.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ Object read(TruffleObject receiver, Object key,
229229
try {
230230
return ForeignAccess.sendRead(readNode, receiver, key);
231231
} catch (UnknownIdentifierException | UnsupportedMessageException e) {
232-
throw raise(PythonErrorType.AttributeError, e.getMessage());
232+
throw raise(PythonErrorType.AttributeError, e);
233233
}
234234
}
235235
}
@@ -244,7 +244,7 @@ Object write(TruffleObject receiver, Object key, Object value,
244244
try {
245245
return ForeignAccess.sendWrite(writeNode, receiver, key, value);
246246
} catch (UnknownIdentifierException | UnsupportedMessageException | UnsupportedTypeException e) {
247-
throw raise(PythonErrorType.AttributeError, e.getMessage());
247+
throw raise(PythonErrorType.AttributeError, e);
248248
}
249249
}
250250
}
@@ -259,7 +259,7 @@ Object remove(TruffleObject receiver, Object key,
259259
try {
260260
return ForeignAccess.sendRemove(removeNode, receiver, key);
261261
} catch (UnknownIdentifierException | UnsupportedMessageException e) {
262-
throw raise(PythonErrorType.AttributeError, e.getMessage());
262+
throw raise(PythonErrorType.AttributeError, e);
263263
}
264264
}
265265
}
@@ -274,7 +274,7 @@ Object remove(TruffleObject receiver, Object[] arguments,
274274
try {
275275
return ForeignAccess.sendExecute(executeNode, receiver, arguments);
276276
} catch (UnsupportedMessageException | UnsupportedTypeException | ArityException e) {
277-
throw raise(PythonErrorType.AttributeError, e.getMessage());
277+
throw raise(PythonErrorType.AttributeError, e);
278278
}
279279
}
280280
}
@@ -289,7 +289,7 @@ Object remove(TruffleObject receiver, Object[] arguments,
289289
try {
290290
return ForeignAccess.sendNew(executeNode, receiver, arguments);
291291
} catch (UnsupportedMessageException | UnsupportedTypeException | ArityException e) {
292-
throw raise(PythonErrorType.AttributeError, e.getMessage());
292+
throw raise(PythonErrorType.AttributeError, e);
293293
}
294294
}
295295
}
@@ -304,7 +304,7 @@ Object remove(TruffleObject receiver, String key, Object[] arguments,
304304
try {
305305
return ForeignAccess.sendInvoke(executeNode, receiver, key, arguments);
306306
} catch (UnsupportedMessageException | UnsupportedTypeException | ArityException | UnknownIdentifierException e) {
307-
throw raise(PythonErrorType.AttributeError, e.getMessage());
307+
throw raise(PythonErrorType.AttributeError, e);
308308
}
309309
}
310310
}
@@ -346,7 +346,7 @@ Object remove(TruffleObject receiver,
346346
try {
347347
return ForeignAccess.sendGetSize(executeNode, receiver);
348348
} catch (UnsupportedMessageException e) {
349-
throw raise(PythonErrorType.TypeError, e.getMessage());
349+
throw raise(PythonErrorType.TypeError, e);
350350
}
351351
}
352352
}
@@ -399,7 +399,7 @@ TruffleObject remove(TruffleObject receiver,
399399
try {
400400
return ForeignAccess.sendKeys(executeNode, receiver);
401401
} catch (UnsupportedMessageException e) {
402-
throw raise(PythonErrorType.TypeError, e.getMessage());
402+
throw raise(PythonErrorType.TypeError, e);
403403
}
404404
}
405405
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/PosixModuleBuiltins.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -587,7 +587,7 @@ Object open(String pathname, int flags, int fileMode, @SuppressWarnings("unused"
587587
return getResources().open(truffleFile, fc);
588588
} catch (IOException e) {
589589
gotException.enter();
590-
throw raise(OSError, e.getMessage());
590+
throw raise(OSError, e);
591591
}
592592
}
593593

@@ -659,7 +659,7 @@ Object lseek(int fd, long pos, int how,
659659
return setPosition(pos, how, fc);
660660
} catch (IOException e) {
661661
gotException.enter();
662-
throw raise(OSError, e.getMessage());
662+
throw raise(OSError, e);
663663
}
664664
}
665665

@@ -699,7 +699,7 @@ Object close(int fd,
699699
closeChannel(channel);
700700
} catch (IOException e) {
701701
gotException.enter();
702-
throw raise(OSError, e.getMessage());
702+
throw raise(OSError, e);
703703
}
704704
}
705705
return PNone.NONE;
@@ -723,7 +723,7 @@ Object unlink(String path) {
723723
getContext().getEnv().getTruffleFile(path).delete();
724724
} catch (RuntimeException | IOException e) {
725725
gotException.enter();
726-
throw raise(OSError, e.getMessage());
726+
throw raise(OSError, e);
727727
}
728728
return PNone.NONE;
729729
}
@@ -756,7 +756,7 @@ Object mkdir(String path, @SuppressWarnings("unused") int mode, @SuppressWarning
756756
getContext().getEnv().getTruffleFile(path).createDirectory();
757757
} catch (RuntimeException | IOException e) {
758758
gotException.enter();
759-
throw raise(OSError, e.getMessage());
759+
throw raise(OSError, e);
760760
}
761761
return PNone.NONE;
762762
}
@@ -781,7 +781,7 @@ Object write(int fd, byte[] data,
781781
return doWriteOp(data, (WritableByteChannel) channel);
782782
} catch (NonWritableChannelException | IOException e) {
783783
gotException.enter();
784-
throw raise(OSError, e.getMessage());
784+
throw raise(OSError, e);
785785
}
786786
} else {
787787
notWritable.enter();
@@ -849,7 +849,7 @@ ByteSequenceStorage readSeekable(SeekableByteChannel channel, int size) {
849849
availableSize = availableSize(channel);
850850
} catch (IOException e) {
851851
gotException.enter();
852-
throw raise(OSError, e.getMessage());
852+
throw raise(OSError, e);
853853
}
854854
if (availableSize > ReadNode.MAX_READ) {
855855
availableSize = ReadNode.MAX_READ;
@@ -902,7 +902,7 @@ private int readIntoBuffer(ReadableByteChannel readableChannel, ByteBuffer dst)
902902
return readableChannel.read(dst);
903903
} catch (IOException e) {
904904
gotException.enter();
905-
throw raise(OSError, e.getMessage());
905+
throw raise(OSError, e);
906906
}
907907
}
908908

@@ -1003,7 +1003,7 @@ Object chmod(String path, int mode, @SuppressWarnings("unused") PNone dir_fd, @S
10031003
truffleFile.setPosixPermissions(permissions);
10041004
} catch (IOException e) {
10051005
gotException.enter();
1006-
throw raise(OSError, e.getMessage());
1006+
throw raise(OSError, e);
10071007
}
10081008
return PNone.NONE;
10091009
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/ReadlineModuleBuiltins.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ PNone setCompleter(PythonModule self, String path,
258258
}
259259
reader.close();
260260
} catch (IOException e) {
261-
throw raise(PythonErrorType.IOError, e.getMessage());
261+
throw raise(PythonErrorType.IOError, e);
262262
}
263263
return PNone.NONE;
264264
}
@@ -286,7 +286,7 @@ PNone setCompleter(PythonModule self, String path,
286286
}
287287
writer.close();
288288
} catch (IOException e) {
289-
throw raise(PythonErrorType.IOError, e.getMessage());
289+
throw raise(PythonErrorType.IOError, e);
290290
}
291291
return PNone.NONE;
292292
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/SignalModuleBuiltins.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ Object signal(int signum, int id) {
147147
try {
148148
retval = Signals.setSignalHandler(signum, id);
149149
} catch (IllegalArgumentException e) {
150-
throw raise(PythonErrorType.ValueError, e.getMessage());
150+
throw raise(PythonErrorType.ValueError, e);
151151
}
152152
if ((int) retval == Signals.SIG_UNKNOWN) {
153153
if (signalHandlers.containsKey(signum)) {
@@ -167,7 +167,7 @@ private Object installSignalHandler(int signum, PythonCallable handler, RootCall
167167
callTarget.call(arguments);
168168
});
169169
} catch (IllegalArgumentException e) {
170-
throw raise(PythonErrorType.ValueError, e.getMessage());
170+
throw raise(PythonErrorType.ValueError, e);
171171
}
172172
if ((int) retval == Signals.SIG_UNKNOWN) {
173173
if (signalHandlers.containsKey(signum)) {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/foreign/AccessForeignItemNodes.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ public Object doForeignObjectSlice(TruffleObject object, PSlice idxSlice,
121121
mslice = materializeSlice(idxSlice, object, getSizeNode, foreign2PTypeNode);
122122
} catch (InteropException e) {
123123
CompilerDirectives.transferToInterpreter();
124-
throw raise(RuntimeError, e.getMessage());
124+
throw raise(RuntimeError, e);
125125
}
126126
Object[] values = new Object[mslice.length];
127127
for (int i = mslice.start, j = 0; i < mslice.stop; i += mslice.step, j++) {
@@ -225,7 +225,7 @@ public Object doForeignObjectSlice(TruffleObject object, PSlice idxSlice, PSeque
225225
return PNone.NONE;
226226
} catch (InteropException e) {
227227
CompilerDirectives.transferToInterpreter();
228-
throw raise(RuntimeError, e.getMessage());
228+
throw raise(RuntimeError, e);
229229
}
230230
}
231231

@@ -243,7 +243,7 @@ public Object doForeignObject(TruffleObject object, Object idx, Object value,
243243
return writeForeignValue(object, convertedIdx, convertedValue, foreignWrite, keyInfoNode, hasSizeNode, foreign2PTypeNode);
244244
} catch (InteropException e) {
245245
CompilerDirectives.transferToInterpreter();
246-
throw raise(RuntimeError, e.getMessage());
246+
throw raise(RuntimeError, e);
247247
}
248248
}
249249

@@ -283,7 +283,7 @@ public Object doForeignObjectSlice(TruffleObject object, PSlice idxSlice,
283283
return PNone.NONE;
284284
} catch (InteropException e) {
285285
CompilerDirectives.transferToInterpreter();
286-
throw raise(RuntimeError, e.getMessage());
286+
throw raise(RuntimeError, e);
287287
}
288288
}
289289

@@ -298,7 +298,7 @@ public Object doForeignObject(TruffleObject object, Object idx,
298298
return removeForeignValue(object, convertedIdx, foreignRemove, keyInfoNode, hasSizeNode);
299299
} catch (InteropException e) {
300300
CompilerDirectives.transferToInterpreter();
301-
throw raise(RuntimeError, e.getMessage());
301+
throw raise(RuntimeError, e);
302302
}
303303
}
304304

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/str/StringBuiltins.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1242,7 +1242,7 @@ private Object encodeString(String self, String encoding, String errors) {
12421242
} catch (IllegalArgumentException e) {
12431243
throw raise(LookupError, "unknown encoding: %s", encoding);
12441244
} catch (CharacterCodingException e) {
1245-
throw raise(UnicodeEncodeError, "%s", e.getMessage());
1245+
throw raise(UnicodeEncodeError, e);
12461246
}
12471247
}
12481248
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/PNodeWithContext.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
import com.oracle.truffle.api.Assumption;
5454
import com.oracle.truffle.api.CompilerDirectives;
5555
import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
56+
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
5657
import com.oracle.truffle.api.TruffleLanguage.ContextReference;
5758
import com.oracle.truffle.api.nodes.Node;
5859
import com.oracle.truffle.api.profiles.ConditionProfile;
@@ -90,6 +91,15 @@ public final PException raise(PythonBuiltinClassType type, String format, Object
9091
throw raise(factory().createBaseException(type, format, arguments));
9192
}
9293

94+
public final PException raise(PythonBuiltinClassType type, Exception e) {
95+
throw raise(type, getMessage(e));
96+
}
97+
98+
@TruffleBoundary
99+
private static final String getMessage(Exception e) {
100+
return e.getMessage();
101+
}
102+
93103
public final PException raiseIndexError() {
94104
return raise(PythonErrorType.IndexError, "cannot fit 'int' into an index-sized integer");
95105
}

0 commit comments

Comments
 (0)