OSDN Git Service

* java/lang/Class.h (isInterface): Move implementation from
authorbryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 17 Jan 2001 10:22:33 +0000 (10:22 +0000)
committerbryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 17 Jan 2001 10:22:33 +0000 (10:22 +0000)
natClass.cc. Declare inline.
(Class): Add default constructor.
* java/lang/Object.h: Update comments.
* java/lang/natClass.cc (initializeClass): Use _Jv_InitClass to
initialize superclass, saving a call if super is already initialized.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@39091 138bc75d-0d04-0410-961f-82ee72b054a4

libjava/ChangeLog
libjava/java/lang/Class.h
libjava/java/lang/Object.h
libjava/java/lang/natClass.cc

index f958cd0..ef40057 100644 (file)
@@ -1,3 +1,12 @@
+2001-01-17  Bryce McKinlay  <bryce@albatross.co.nz>
+
+       * java/lang/Class.h (isInterface): Move implementation from 
+       natClass.cc. Declare inline.
+       (Class): Add default constructor.
+       * java/lang/Object.h: Update comments.
+       * java/lang/natClass.cc (initializeClass): Use _Jv_InitClass to
+       initialize superclass, saving a call if super is already initialized.
+
 2001-01-16  Alexandre Petit-Bianco  <apbianco@cygnus.com>
 
        * prims.cc (init_prim_class): Deleted.
index febe748..9736b78 100644 (file)
@@ -174,7 +174,8 @@ public:
 
   jboolean isAssignableFrom (jclass cls);
   jboolean isInstance (jobject obj);
-  jboolean isInterface (void)
+
+  inline jboolean isInterface (void)
   {
     return (accflags & java::lang::reflect::Modifier::INTERFACE) != 0;
   }
@@ -196,16 +197,17 @@ public:
   // finalization
   void finalize ();
 
+  Class () {};
+
   // This constructor is used to create Class object for the primitive
-  // types.
-  Class (jobject cname, jbyte sig, jint len, jobject array_vtable) {
-    
+  // types. See prims.cc.
+  Class (jobject cname, jbyte sig, jint len, jobject array_vtable)
+  {    
     using namespace java::lang::reflect;
     _Jv_Utf8Const *_Jv_makeUtf8Const (char *s, int len);
 
-    // C++ ctors are fixing the vtbl in a way that doesn't fit Java.
-    // We can fix the C++ compiler, or we can hack our runtime. What's
-    // below fix the vtable so that it starts at -2.
+    // C++ ctors set the vtbl pointer to point at an offset inside the vtable
+    // object. That doesn't work for Java, so this hack adjusts it back.
     void *p =  ((void **)this)[0];
     ((void **)this)[0] = (void *)((char *)p-2*sizeof (void *));
 
index 81b5a66..352d48b 100644 (file)
@@ -16,15 +16,13 @@ details.  */
 #include <gcj/javaprims.h>
 
 // This class is mainly here as a kludge to get G++ to allocate two
-// extra entries in the vtable. We will use them to store data.  This
-// allows us to support the new C++ ABI.
-
+// extra entries in each vtable.
 struct _JvObjectPrefix
 {
 protected:
   // New ABI Compatibility Dummy, #1 and 2.
-  virtual void nacd_1 (void) {};
-  virtual void nacd_2 (void) {};
+  virtual void nacd_1 (void) {};  // This slot really contains the Class pointer.
+  virtual void nacd_2 (void) {};  // Actually the GC bitmap marking descriptor.
 };
 
 class java::lang::Object : public _JvObjectPrefix
index 2d8a125..9a97411 100644 (file)
@@ -732,7 +732,7 @@ java::lang::Class::initializeClass (void)
     {
       try
        {
-         superclass->initializeClass ();
+         _Jv_InitClass (superclass);
        }
       catch (java::lang::Throwable *except)
        {