This is the mail archive of the java-patches@sources.redhat.com mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Patch: initialize Boolean


I currently still can't rebuild the current libjava :-(.
However, I tested this same patch on a different, but similar, libjava
source base (the Red Hat internal one) and I am confident that it is
correct.  It fixes a bug in java.lang.reflect whereby Boolean was used
without initializing it first.

2000-09-13  Tom Tromey  <tromey@cygnus.com>

	* java/lang/reflect/natArray.cc (BooleanClass): New define.
	(get): Ensure Boolean class is initialized.
	* java/lang/reflect/natField.cc (BooleanClass): New define.
	(get): Ensure Boolean class is initialized.

Tom

Index: java/lang/reflect/natArray.cc
===================================================================
RCS file: /cvs/java/libgcj/libjava/java/lang/reflect/natArray.cc,v
retrieving revision 1.6
diff -u -r1.6 natArray.cc
--- natArray.cc	2000/03/09 04:50:49	1.6
+++ natArray.cc	2000/09/13 18:13:44
@@ -25,6 +25,9 @@
 #include <java/lang/Boolean.h>
 #include <java/lang/Character.h>
 
+#define BooleanClass _CL_Q34java4lang7Boolean
+extern java::lang::Class BooleanClass;
+
 jobject
 java::lang::reflect::Array::newInstance (jclass componentType, jint length)
 {
@@ -211,10 +214,13 @@
   if (elementType == JvPrimClass (char))
     return new java::lang::Character (elements ((jcharArray) array) [index]);
   if (elementType == JvPrimClass (boolean))
-    if (elements ((jbooleanArray) array) [index])
-      return java::lang::Boolean::TRUE;
-    else
-      return java::lang::Boolean::FALSE;
+    {
+      _Jv_InitClass (&BooleanClass);
+      if (elements ((jbooleanArray) array) [index])
+	return java::lang::Boolean::TRUE;
+      else
+	return java::lang::Boolean::FALSE;
+    }
   JvThrow (new java::lang::IllegalArgumentException());
 }
 
Index: java/lang/reflect/natField.cc
===================================================================
RCS file: /cvs/java/libgcj/libjava/java/lang/reflect/natField.cc,v
retrieving revision 1.4
diff -u -r1.4 natField.cc
--- natField.cc	2000/03/07 19:55:27	1.4
+++ natField.cc	2000/09/13 18:13:44
@@ -26,6 +26,9 @@
 #include <java/lang/Boolean.h>
 #include <java/lang/Character.h>
 
+#define BooleanClass _CL_Q34java4lang7Boolean
+extern java::lang::Class BooleanClass;
+
 jint
 java::lang::reflect::Field::getModifiers ()
 {
@@ -251,10 +254,13 @@
   if (fld->type == JvPrimClass (char))
     return new java::lang::Character (* (jchar*) addr);
   if (fld->type == JvPrimClass (boolean))
-    if (* (jboolean*) addr)
-      return java::lang::Boolean::TRUE;
-    else
-      return java::lang::Boolean::FALSE;
+    {
+      _Jv_InitClass (&BooleanClass);
+      if (* (jboolean*) addr)
+	return java::lang::Boolean::TRUE;
+      else
+	return java::lang::Boolean::FALSE;
+    }
   JvThrow (new java::lang::IllegalArgumentException());
 }
 

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]