diff options
author | Per Bothner <per@bothner.com> | 2001-04-01 14:54:10 -0700 |
---|---|---|
committer | Per Bothner <bothner@gcc.gnu.org> | 2001-04-01 14:54:10 -0700 |
commit | a3b63299e6974b2f7ac5855e3edcccd6367afc3c (patch) | |
tree | 9e1f195b291f3f9fb34b91a18a554d4b28f775e8 | |
parent | f44b63ae02d689ccf33f66022228ee8d7145cfd8 (diff) | |
download | gcc-a3b63299e6974b2f7ac5855e3edcccd6367afc3c.zip gcc-a3b63299e6974b2f7ac5855e3edcccd6367afc3c.tar.gz gcc-a3b63299e6974b2f7ac5855e3edcccd6367afc3c.tar.bz2 |
natString.cc (intern): If string's data does not point to this String, make a fresh String that does.
* java/lang/natString.cc (intern): If string's data does not point to
this String, make a fresh String that does.
* java/lang/natString.cc (unintern): Replace by static function.
* java/lang/String.java (unintern): Remove method.
From-SVN: r40990
-rw-r--r-- | libjava/ChangeLog | 8 | ||||
-rw-r--r-- | libjava/java/lang/String.java | 1 | ||||
-rw-r--r-- | libjava/java/lang/natString.cc | 15 |
3 files changed, 17 insertions, 7 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 3c1ef11..177052f 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,5 +1,13 @@ 2001-04-01 Per Bothner <per@bothner.com> + * java/lang/natString.cc (intern): If string's data does not point to + this String, make a fresh String that does. + + * java/lang/natString.cc (unintern): Replace by static function. + * java/lang/String.java (unintern): Remove method. + +2001-04-01 Per Bothner <per@bothner.com> + * DeflaterOutputStream.java (deflate): Loop while def.needsInput. (finish): def.deflate needs to be called in a loop. (inbuf, inbufLength): New private fields. diff --git a/libjava/java/lang/String.java b/libjava/java/lang/String.java index 22e1153..b985cf4 100644 --- a/libjava/java/lang/String.java +++ b/libjava/java/lang/String.java @@ -347,6 +347,5 @@ public final class String implements Serializable, Comparable private native void init (byte[] chars, int hibyte, int offset, int count); private native void init (byte[] chars, int offset, int count, String enc) throws UnsupportedEncodingException; - private static native void unintern (Object obj); private static native void rehash (); } diff --git a/libjava/java/lang/natString.cc b/libjava/java/lang/natString.cc index c052905..1c71bfd 100644 --- a/libjava/java/lang/natString.cc +++ b/libjava/java/lang/natString.cc @@ -29,6 +29,7 @@ details. */ #include <gnu/gcj/convert/BytesToUnicode.h> #include <jvm.h> +static void unintern (jobject); static jstring* strhash = NULL; static int strhash_count = 0; /* Number of slots used in strhash. */ static int strhash_size = 0; /* Number of slots available in strhash. @@ -174,17 +175,19 @@ java::lang::String::intern() *ptr = (jstring) MASK_PTR (*ptr); return (jstring) UNMASK_PTR (*ptr); } - SET_STRING_IS_INTERNED(this); + jstring str = this->data == this ? this + : _Jv_NewString(JvGetStringChars(this), this->length()); + SET_STRING_IS_INTERNED(str); strhash_count++; - *ptr = this; + *ptr = str; // When string is GC'd, clear the slot in the hash table. - _Jv_RegisterFinalizer ((void *) this, unintern); - return this; + _Jv_RegisterFinalizer ((void *) str, unintern); + return str; } /* Called by String fake finalizer. */ -void -java::lang::String::unintern (jobject obj) +static void +unintern (jobject obj) { JvSynchronize sync (&StringClass); jstring str = reinterpret_cast<jstring> (obj); |