re PR libgcj/12350 (StringBuffer.substring handles shared flag incorrected.)
2003-09-21 Ralph Loader <suckfish@ihug.co.nz> PR java/12350: * java/lang/StringBuffer.java (substring): Fix handling of shared flag. 2003-09-21 Ralph Loader <suckfish@ihug.co.nz> PR java/12350 * libjava.lang/PR12350.java: New file. * libjava.lang/PR12350.out: New file. From-SVN: r71651
This commit is contained in:
parent
b5bb72ec41
commit
88962108fc
5 changed files with 35 additions and 2 deletions
|
@ -1,3 +1,8 @@
|
|||
2003-09-21 Ralph Loader <suckfish@ihug.co.nz>
|
||||
|
||||
PR java/12350:
|
||||
* java/lang/StringBuffer.java (substring): Fix handling of shared flag.
|
||||
|
||||
2003-09-22 Michael Koch <konqueror@gmx.de>
|
||||
|
||||
* jni.cc (_Jv_LookupJNIMethod): Remove workaround that should hide a
|
||||
|
|
|
@ -564,8 +564,9 @@ public final class StringBuffer implements Serializable, CharSequence
|
|||
throw new StringIndexOutOfBoundsException();
|
||||
if (len == 0)
|
||||
return "";
|
||||
// Share the char[] unless 3/4 empty.
|
||||
shared = (len << 2) >= value.length;
|
||||
// Share unless substring is smaller than 1/4 of the buffer.
|
||||
if ((len << 2) >= value.length)
|
||||
shared = true;
|
||||
// Package constructor avoids an array copy.
|
||||
return new String(value, beginIndex, len, shared);
|
||||
}
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
2003-09-21 Ralph Loader <suckfish@ihug.co.nz>
|
||||
|
||||
PR java/12350
|
||||
* libjava.lang/PR12350.java: New file.
|
||||
* libjava.lang/PR12350.out: New file.
|
||||
|
||||
2003-09-17 Ranjit Mathew <rmathew@hotmail.com>
|
||||
|
||||
PR java/9577
|
||||
|
|
20
libjava/testsuite/libjava.lang/PR12350.java
Normal file
20
libjava/testsuite/libjava.lang/PR12350.java
Normal file
|
@ -0,0 +1,20 @@
|
|||
public class PR12350
|
||||
{
|
||||
static public void main (String[] ignored) throws Throwable
|
||||
{
|
||||
StringBuffer b = new StringBuffer ("Good string. More than 16 chars.");
|
||||
|
||||
// Should cause sharing.
|
||||
String s = b.toString();
|
||||
|
||||
// Take a char by char unshared copy of s.
|
||||
String t = new String (s.toCharArray());
|
||||
|
||||
b.substring (0, 4); // BUG: Clears shared flag.
|
||||
b.replace (0, 4, "Bad "); // Modifies shared data.
|
||||
|
||||
System.out.println (s);
|
||||
assert s.equals (t);
|
||||
}
|
||||
|
||||
}
|
1
libjava/testsuite/libjava.lang/PR12350.out
Normal file
1
libjava/testsuite/libjava.lang/PR12350.out
Normal file
|
@ -0,0 +1 @@
|
|||
Good string. More than 16 chars.
|
Loading…
Add table
Reference in a new issue