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:
Ralph Loader 2003-09-22 08:17:49 +00:00 committed by Bryce McKinlay
parent b5bb72ec41
commit 88962108fc
5 changed files with 35 additions and 2 deletions

View file

@ -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

View file

@ -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);
}

View file

@ -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

View 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);
}
}

View file

@ -0,0 +1 @@
Good string. More than 16 chars.