src/java.base/share/classes/java/lang/StringUTF16.java
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
*** old/src/java.base/share/classes/java/lang/StringUTF16.java Wed Mar 22 15:53:02 2017
--- new/src/java.base/share/classes/java/lang/StringUTF16.java Wed Mar 22 15:53:01 2017
*** 326,335 ****
--- 326,355 ----
return indexOf(value, length(value), str, length(str), 0);
}
@HotSpotIntrinsicCandidate
public static int indexOf(byte[] value, int valueCount, byte[] str, int strCount, int fromIndex) {
+ // Redundant.
+ // Callers:
+ // StringUTF16.indexOf(byte[] value, byte[] str): valid by construction
+ // return indexOf(value, length(value), str, length(str), 0);
+ //
+ // String.indexOf:
+ // StringUTF16.indexOf(src, srcCount, tgt, tgtCount, fromIndex);
+ // 0 <= tgtCount < tgtStr.length >> 1
+ // byte[] tgt = tgtStr.value;
+ // int tgtCount = tgtStr.length();
+ //
+ // 0 < fromIndex < srcCount
+ //
+ // 0 <= srcCount < src.length
+ // Covered by ABS.indexOf():
+ // checkIndex(count, value.length >> coder);
+ // return String.indexOf(value, coder, count, str, fromIndex);
+ checkBoundsBeginEnd(fromIndex, valueCount, value.length >> 1);
+ checkBoundsBeginEnd(0, strCount, str.length >> 1);
+
char first = getChar(str, 0);
int max = (valueCount - strCount);
for (int i = fromIndex; i <= max; i++) {
// Look for first character.
if (getChar(value, i) != first) {
*** 363,372 ****
--- 383,396 ----
return indexOfLatin1(value, length(value), str, str.length, 0);
}
@HotSpotIntrinsicCandidate
public static int indexOfLatin1(byte[] src, int srcCount, byte[] tgt, int tgtCount, int fromIndex) {
+ // Redundant (similar to StringUTF16.indexOf).
+ checkBoundsBeginEnd(fromIndex, srcCount, src.length >> 1);
+ checkBoundsBeginEnd(0, tgtCount, tgt.length >> 1);
+
char first = (char)(tgt[0] & 0xff);
int max = (srcCount - tgtCount);
for (int i = fromIndex; i <= max; i++) {
// Look for first character.
if (getChar(src, i) != first) {
*** 388,397 ****
--- 412,425 ----
return -1;
}
@HotSpotIntrinsicCandidate
private static int indexOfChar(byte[] value, int ch, int fromIndex, int max) {
+ // Redundant: StringUTF16.indexOf (caller) does the checks
+ // max == value.length >> 1
+ // 0 <= fromIndex <= max
+ checkBoundsBeginEnd(fromIndex, max, value.length >> 1);
for (int i = fromIndex; i < max; i++) {
if (getChar(value, i) == ch) {
return i;
}
}
*** 403,412 ****
--- 431,444 ----
*/
private static int indexOfSupplementary(byte[] value, int ch, int fromIndex, int max) {
if (Character.isValidCodePoint(ch)) {
final char hi = Character.highSurrogate(ch);
final char lo = Character.lowSurrogate(ch);
+ // Redundant: StringUTF16.indexOf (caller) does the checks
+ // max == value.length >> 1
+ // 0 <= fromIndex <= max
+ checkBoundsBeginEnd(fromIndex, max, value.length >> 1);
for (int i = fromIndex; i < max - 1; i++) {
if (getChar(value, i) == hi && getChar(value, i + 1 ) == lo) {
return i;
}
}
*** 418,429 ****
--- 450,467 ----
public static int lastIndexOf(byte[] src, int srcCount,
byte[] tgt, int tgtCount, int fromIndex) {
int min = tgtCount - 1;
int i = min + fromIndex;
int strLastIndex = tgtCount - 1;
+
+ // Redundant: covered by checks in String.lastIndexOf
+ checkIndex(strLastIndex, tgt.length >> 1);
char strLastChar = getChar(tgt, strLastIndex);
+ // Redundant: not needed for String.lastIndexOf(), covered by ASB.lastIndexOf().
+ checkIndex(i, src.length >> 1);
+
startSearchForLastChar:
while (true) {
while (i >= min && getChar(src, i) != strLastChar) {
i--;
}
src/java.base/share/classes/java/lang/StringUTF16.java
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File