From: green Date: Wed, 25 Feb 2004 19:52:58 +0000 (+0000) Subject: de-pessimization X-Git-Tag: upstream/4.9.2~72763 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ab9b8800aa18a76d9514ccaeada3727e6d4a8a9c;p=platform%2Fupstream%2Flinaro-gcc.git de-pessimization git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@78447 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 6899b92..d5f171d 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,9 @@ +2004-02-24 Anthony Green + + * java/lang/StringBuffer.java: No need to NULL out remainder of + buffer since ensureCapacity_unsynchronized will have done this for + us. + 2004-02-20 Michael Koch * gnu/java/net/protocol/jar/Handler.java diff --git a/libjava/java/lang/StringBuffer.java b/libjava/java/lang/StringBuffer.java index 92f9615..293b97d 100644 --- a/libjava/java/lang/StringBuffer.java +++ b/libjava/java/lang/StringBuffer.java @@ -1,5 +1,6 @@ /* StringBuffer.java -- Growable strings - Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. + Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004 + Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -205,10 +206,26 @@ public final class StringBuffer implements Serializable, CharSequence if (newLength < 0) throw new StringIndexOutOfBoundsException(newLength); + int valueLength = value.length; + + /* Always call ensureCapacity_unsynchronized in order to preserve + copy-on-write semantics. */ ensureCapacity_unsynchronized(newLength); - while (count < newLength) - value[count++] = '\0'; - count = newLength; + + if (newLength < valueLength) + { + /* If the StringBuffer's value just grew, then we know that + value is newly allocated and the region between count and + newLength is filled with '\0'. */ + count = newLength; + } + else + { + /* The StringBuffer's value doesn't need to grow. However, + we should clear out any cruft that may exist. */ + while (count < newLength) + value[count++] = '\0'; + } } /**