Skip to content

Commit 6e28086

Browse files
committed
[GR-17086] Do not translate IllegalArgumentException
* Consider it an internal error like other Java exceptions.
1 parent fe56a82 commit 6e28086

File tree

18 files changed

+139
-125
lines changed

18 files changed

+139
-125
lines changed

src/main/java/org/truffleruby/collections/IntHashMap.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -71,12 +71,6 @@ public IntHashMap(int initialCapacity) {
7171
@SuppressWarnings({ "unchecked", "rawtypes" })
7272
public IntHashMap(int initialCapacity, float loadFactor) {
7373
super();
74-
if (initialCapacity < 0) {
75-
throw new IllegalArgumentException("Illegal Capacity: " + initialCapacity);
76-
}
77-
if (loadFactor <= 0) {
78-
throw new IllegalArgumentException("Illegal Load: " + loadFactor);
79-
}
8074
if (initialCapacity == 0) {
8175
initialCapacity = 1;
8276
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import java.io.IOException;
1515
import java.util.EnumSet;
1616

17+
import com.oracle.truffle.api.CompilerDirectives;
1718
import com.oracle.truffle.api.interop.InvalidBufferOffsetException;
1819
import com.oracle.truffle.api.interop.UnknownKeyException;
1920
import org.jcodings.Encoding;
@@ -1077,7 +1078,7 @@ public RubyException rangeErrorConvertToInt(long value, Node currentNode) {
10771078
} else if (value > Integer.MAX_VALUE) {
10781079
direction = "big";
10791080
} else {
1080-
throw new IllegalArgumentException();
1081+
throw CompilerDirectives.shouldNotReachHere("long fitting in int");
10811082
}
10821083

10831084
return rangeError(StringUtils.format("integer %d too %s to convert to `int'", value, direction), currentNode);

src/main/java/org/truffleruby/core/format/FormatExceptionTranslator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
*/
1010
package org.truffleruby.core.format;
1111

12+
import com.oracle.truffle.api.CompilerDirectives;
1213
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
1314
import com.oracle.truffle.api.nodes.Node;
1415
import org.truffleruby.RubyContext;
@@ -49,9 +50,8 @@ public static RuntimeException translate(RubyContext context, Node currentNode,
4950
} else if (exception instanceof InvalidFormatException) {
5051
final InvalidFormatException e = (InvalidFormatException) exception;
5152
return new RaiseException(context, coreExceptions.argumentError(e.getMessage(), currentNode));
52-
5353
} else {
54-
throw new IllegalArgumentException();
54+
throw CompilerDirectives.shouldNotReachHere(exception);
5555
}
5656
}
5757

src/main/java/org/truffleruby/core/format/pack/SimplePackTreeBuilder.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import java.util.Deque;
1616
import java.util.List;
1717

18+
import com.oracle.truffle.api.CompilerDirectives;
1819
import org.truffleruby.RubyLanguage;
1920
import org.truffleruby.core.format.FormatEncoding;
2021
import org.truffleruby.core.format.FormatNode;
@@ -293,7 +294,7 @@ private void appendFloatNode(int size, ByteOrder byteOrder, int count) {
293294
typeNode = readNode;
294295
break;
295296
default:
296-
throw new IllegalArgumentException();
297+
throw CompilerDirectives.shouldNotReachHere();
297298
}
298299

299300
appendNode(sharedTreeBuilder.applyCount(
@@ -341,7 +342,7 @@ private FormatNode writeInteger(int size, ByteOrder byteOrder, FormatNode readNo
341342
}
342343
break;
343344
default:
344-
throw new IllegalArgumentException(Integer.toString(size));
345+
throw CompilerDirectives.shouldNotReachHere(Integer.toString(size));
345346
}
346347

347348
return WriteBytesNodeGen.create(convertNode);

src/main/java/org/truffleruby/core/format/unpack/SimpleUnpackTreeBuilder.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import java.util.Deque;
1616
import java.util.List;
1717

18+
import com.oracle.truffle.api.CompilerDirectives;
1819
import org.truffleruby.RubyLanguage;
1920
import org.truffleruby.core.format.FormatNode;
2021
import org.truffleruby.core.format.SharedTreeBuilder;
@@ -306,7 +307,7 @@ private void appendFloatNode(int size, ByteOrder byteOrder, int count) {
306307
decodeNode = ReinterpretLongAsDoubleNodeGen.create(readNode);
307308
break;
308309
default:
309-
throw new IllegalArgumentException();
310+
throw CompilerDirectives.shouldNotReachHere();
310311
}
311312

312313
final FormatNode writeNode = WriteValueNodeGen.create(new OutputNode(), decodeNode);
@@ -344,7 +345,7 @@ private FormatNode createIntegerDecodeNode(int size, ByteOrder byteOrder, boolea
344345
}
345346
break;
346347
default:
347-
throw new IllegalArgumentException();
348+
throw CompilerDirectives.shouldNotReachHere();
348349
}
349350

350351
if (!signed) {

src/main/java/org/truffleruby/core/kernel/TruffleKernelNodes.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,8 @@ protected Object defineHookedVariableInnerNode(
192192
name.getString(),
193193
getter,
194194
setter,
195-
isDefined);
195+
isDefined,
196+
this);
196197
return nil;
197198
}
198199

src/main/java/org/truffleruby/core/method/MethodFilter.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
*/
1010
package org.truffleruby.core.method;
1111

12+
import com.oracle.truffle.api.CompilerDirectives;
1213
import org.truffleruby.language.Visibility;
1314
import org.truffleruby.language.methods.InternalMethod;
1415

@@ -57,7 +58,7 @@ public static MethodFilter by(Visibility visibility) {
5758
case PRIVATE:
5859
return PRIVATE;
5960
default:
60-
throw new IllegalArgumentException("unsupported visibility: " + visibility);
61+
throw CompilerDirectives.shouldNotReachHere("unsupported visibility: " + visibility);
6162
}
6263
}
6364
}

src/main/java/org/truffleruby/core/proc/ProcOperations.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
*/
1010
package org.truffleruby.core.proc;
1111

12+
import com.oracle.truffle.api.CompilerDirectives;
1213
import com.oracle.truffle.api.object.Shape;
1314
import org.truffleruby.RubyContext;
1415
import org.truffleruby.RubyLanguage;
@@ -72,7 +73,7 @@ public static RubyProc createRubyProc(
7273
callTargetForType = holder.getCallTargetForLambda();
7374
break;
7475
default:
75-
throw new IllegalArgumentException();
76+
throw CompilerDirectives.shouldNotReachHere();
7677
}
7778

7879
return new RubyProc(

src/main/java/org/truffleruby/core/string/ConvertBytes.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import java.math.BigInteger;
1717
import java.util.Arrays;
1818

19+
import com.oracle.truffle.api.CompilerDirectives;
1920
import org.truffleruby.RubyContext;
2021
import org.truffleruby.core.CoreLibrary;
2122
import org.truffleruby.core.numeric.FixnumOrBignumNode;
@@ -733,7 +734,7 @@ public static final byte[] twosComplementToHexBytes(byte[] in, boolean upper) {
733734

734735
public static final byte[] twosComplementToUnsignedBytes(byte[] in, int shift, boolean upper) {
735736
if (shift < 1 || shift > 4) {
736-
throw new IllegalArgumentException("shift value must be 1-4");
737+
throw CompilerDirectives.shouldNotReachHere("shift value must be 1-4");
737738
}
738739
int ilen = in.length;
739740
int olen = (ilen * 8 + shift - 1) / shift;

src/main/java/org/truffleruby/core/string/EncodingUtils.java

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,15 @@
2929
import java.util.ArrayList;
3030
import java.util.List;
3131

32+
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
33+
import com.oracle.truffle.api.nodes.Node;
3234
import org.jcodings.Encoding;
3335
import org.jcodings.ascii.AsciiTables;
3436
import org.jcodings.specific.ASCIIEncoding;
37+
import org.truffleruby.RubyContext;
3538
import org.truffleruby.core.rope.CodeRange;
3639
import org.truffleruby.core.rope.RopeOperations;
40+
import org.truffleruby.language.control.RaiseException;
3741

3842
public class EncodingUtils {
3943

@@ -164,19 +168,25 @@ public static int encAscget(byte[] pBytes, int p, int e, int[] len, Encoding enc
164168
}
165169

166170
// rb_enc_codepoint_len
167-
public static int encCodepointLength(byte[] pBytes, int p, int e, int[] len_p, Encoding enc, CodeRange codeRange) {
171+
@TruffleBoundary
172+
public static int encCodepointLength(byte[] pBytes, int p, int e, int[] len_p, Encoding enc, CodeRange codeRange,
173+
Node node) {
168174
int r;
169175
if (e <= p) {
170-
throw new IllegalArgumentException("empty string");
176+
final RubyContext context = RubyContext.get(node);
177+
throw new RaiseException(context, context.getCoreExceptions().argumentError("empty string", node));
171178
}
172179
r = StringSupport.characterLength(enc, codeRange, pBytes, p, e);
173180
if (!StringSupport.MBCLEN_CHARFOUND_P(r)) {
174-
throw new IllegalArgumentException("invalid byte sequence in " + enc);
181+
final RubyContext context = RubyContext.get(node);
182+
throw new RaiseException(
183+
context,
184+
context.getCoreExceptions().argumentError("invalid byte sequence in " + enc, node));
175185
}
176186
if (len_p != null) {
177187
len_p[0] = StringSupport.MBCLEN_CHARFOUND_LEN(r);
178188
}
179-
return StringSupport.codePoint(enc, codeRange, pBytes, p, e);
189+
return StringSupport.codePoint(enc, codeRange, pBytes, p, e, node);
180190
}
181191

182192
// rb_enc_mbcput

0 commit comments

Comments
 (0)