RFR: 8071571: Move substring of same string to slow path
Martin Buchholz
martinrb at google.com
Tue May 12 21:22:00 UTC 2015
All your changes look good. But:
---
Not your bug, but it looks like the below should instead be:
throw new StringIndexOutOfBoundsException(beginIndex);
Perhaps fix in a follow-on change.
1935 if (subLen < 0) {
1936 throw new StringIndexOutOfBoundsException(subLen);
---
We seem to have clean progress, but for substring fast-path we can do a
little better, I think, thus:
public String substring(int beginIndex, int endIndex) {
int subLen;
return ((beginIndex | (value.length - endIndex)) > 0
&& (subLen = endIndex - beginIndex) > 0)
? new String(value, beginIndex, subLen)
: substringSlowPath(beginIndex, endIndex);
}
private String substringSlowPath(int beginIndex, int endIndex) {
if (beginIndex <= 0) {
if (beginIndex < 0) {
throw new StringIndexOutOfBoundsException(beginIndex);
}
if (endIndex == value.length) {
return this;
}
}
if (endIndex > value.length) {
throw new StringIndexOutOfBoundsException(endIndex);
}
if (endIndex == beginIndex) {
return "";
}
throw new StringIndexOutOfBoundsException(endIndex - beginIndex);
}
additional white-box tests would be required if we adopt that.
On Tue, May 12, 2015 at 11:58 AM, Ivan Gerasimov <ivan.gerasimov at oracle.com>
wrote:
>
>
> On 12.05.2015 20:34, Martin Buchholz wrote:
>
> Hi Ivan,
>
> The code below looks wrong to me - sb.length() resolves to sb.count, not
> v2.length.
> If I'm correct, then there's a missing test to be added, since this error
> should be caught by some test.
>
> private boolean nonSyncContentEquals(AbstractStringBuilder sb) {
> - char v1[] = value;
> - char v2[] = sb.getValue();
> + char[] v1 = value;
> + char[] v2 = sb.getValue();
> int n = v1.length;
> - if (n != sb.length()) {
> + if (n != v2.length) {
> return false;
> }
>
>
> Yes, of course you're right. This change looked so "obviously correct"
> to me, that I didn't care to run the tests before posting the webrev :-(
>
> I've reverted this change back:
> http://cr.openjdk.java.net/~igerasim/8071571/01/webrev/
>
> Sincerely yours,
> Ivan
>
>
> On Mon, May 11, 2015 at 1:52 PM, Ivan Gerasimov <ivan.gerasimov at oracle.com
> > wrote:
>
>> I have to take over this fix.
>>
>> The latest webrev from the review thread above (with a few minor changes)
>> is here:
>> http://cr.openjdk.java.net/~igerasim/8071571/00/webrev/
>>
>> Would you please review/approve the fix at your convenience?
>>
>> Sincerely yours,
>> Ivan
>>
>>
>
>
More information about the core-libs-dev
mailing list