From: Tom Tromey Date: Fri, 7 Jul 2000 20:54:32 +0000 (+0000) Subject: natClassLoader.cc (_Jv_PrepareCompiledClass): Initialize static final String fields. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=4ea9cbf197726cf031645159c7fa192a44b4c9c3;p=gcc.git natClassLoader.cc (_Jv_PrepareCompiledClass): Initialize static final String fields. * java/lang/natClassLoader.cc (_Jv_PrepareCompiledClass): Initialize static final String fields. From-SVN: r34910 --- diff --git a/libjava/ChangeLog b/libjava/ChangeLog index e0ac2f31b91..779aef41842 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,8 @@ +2000-07-06 Tom Tromey + + * java/lang/natClassLoader.cc (_Jv_PrepareCompiledClass): + Initialize static final String fields. + 2000-07-03 Tom Tromey * java/io/PrintWriter.java (print): Call write(String), not diff --git a/libjava/java/lang/natClassLoader.cc b/libjava/java/lang/natClassLoader.cc index b4a9e49b71c..65da6135787 100644 --- a/libjava/java/lang/natClassLoader.cc +++ b/libjava/java/lang/natClassLoader.cc @@ -261,7 +261,6 @@ _Jv_PrepareCompiledClass(jclass klass) pool->data[index].clazz = found; pool->tags[index] |= JV_CONSTANT_ResolvedFlag; } - else if (pool->tags[index] == JV_CONSTANT_String) { jstring str; @@ -271,6 +270,24 @@ _Jv_PrepareCompiledClass(jclass klass) } } + jfieldID f = JvGetFirstStaticField (klass); + for (int n = JvNumStaticFields (klass); n > 0; --n) + { + int mod = f->getModifiers (); + // Maybe the compiler should mark these with + // _Jv_FIELD_CONSTANT_VALUE? For now we just know that this + // only happens for constant strings. + if (f->getClass () == &StringClass + && java::lang::reflect::Modifier::isStatic (mod) + && java::lang::reflect::Modifier::isFinal (mod)) + { + jstring *strp = (jstring *) f->u.addr; + if (*strp) + *strp = _Jv_NewStringUtf8Const ((_Jv_Utf8Const *) *strp); + } + f = f->getNextField (); + } + klass->notifyAll (); }