Skip to content

Commit ff77b36

Browse files
committed
[GR-44557] TruffleStrings: don't evaluate codeRange for mutable strings in isCompatibleTo.
PullRequest: graal/13934
2 parents ae2dfe9 + 84db5a7 commit ff77b36

File tree

2 files changed

+10
-1
lines changed

2 files changed

+10
-1
lines changed

truffle/src/com.oracle.truffle.api.strings.test/src/com/oracle/truffle/api/strings/test/TStringCornerCaseTests.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,4 +110,11 @@ public void testNegativeCodepoint() {
110110
TruffleString a = TruffleString.fromByteArrayUncached(byteArray(0x8e, 0xa2, 0xa1, 0xa1), TruffleString.Encoding.EUC_TW);
111111
Assert.assertEquals(0x8ea2a1a1, a.codePointAtByteIndexUncached(0, TruffleString.Encoding.EUC_TW, TruffleString.ErrorHandling.RETURN_NEGATIVE));
112112
}
113+
114+
@Test
115+
public void testMutableImpreciseCodeRange() {
116+
MutableTruffleString a = MutableTruffleString.fromByteArrayUncached(new byte[]{0}, 0, 1, TruffleString.Encoding.BYTES, false);
117+
Assert.assertTrue(a.isCompatibleToUncached(TruffleString.Encoding.BYTES));
118+
Assert.assertEquals(TruffleString.CodeRange.VALID, a.getCodeRangeImpreciseUncached(TruffleString.Encoding.BYTES));
119+
}
113120
}

truffle/src/com.oracle.truffle.api.strings/src/com/oracle/truffle/api/strings/AbstractTruffleString.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,9 @@ public final boolean isCompatibleTo(TruffleString.Encoding expectedEncoding) {
229229
*/
230230
@TruffleBoundary
231231
public final boolean isCompatibleToUncached(TruffleString.Encoding expectedEncoding) {
232-
getCodeRangeUncached(Encoding.get(encoding));
232+
if (isImmutable() && !isCompatibleToIntl(expectedEncoding)) {
233+
getCodeRangeUncached(Encoding.get(encoding));
234+
}
233235
return isCompatibleToIntl(expectedEncoding);
234236
}
235237

0 commit comments

Comments
 (0)