OSDN Git Service

* java/lang/Class.h (_Jv_Self): New union type.
authorbryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 6 May 2001 13:42:11 +0000 (13:42 +0000)
committerbryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 6 May 2001 13:42:11 +0000 (13:42 +0000)
(Class): Manipulate vtable pointer via _Jv_Self union. Thanks to
Jeff Sturm and Fergus Henderson.

* java/lang/ClassLoader.java: Remove dead code fragment.

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

libjava/ChangeLog
libjava/java/lang/Class.h
libjava/java/lang/ClassLoader.java

index 018b62b..5a95e2f 100644 (file)
@@ -1,3 +1,13 @@
+2001-05-06  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+
+       * java/lang/Class.h (_Jv_Self): New union type.
+       (Class): Manipulate vtable pointer via _Jv_Self union. Thanks to
+       Jeff Sturm and Fergus Henderson.
+
+2001-05-06  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+
+       * java/lang/ClassLoader.java: Remove dead code fragment.
+
 2001-05-03  Martin Kahlert  <martin.kahlert@infineon.com>
 
        * jni.cc (_Jv_JNI_GetPrimitiveArrayRegion): Fixed bounds
index a0cd730..8cce30f 100644 (file)
@@ -99,6 +99,13 @@ struct _Jv_ifaces
   jshort count;
 };
 
+// Used for vtable pointer manipulation.
+union _Jv_Self
+{
+  char *vtable_ptr;
+  jclass self;
+};
+
 #define JV_PRIMITIVE_VTABLE ((_Jv_VTable *) -1)
 
 #define JV_CLASS(Obj) ((jclass) (*(_Jv_VTable **) Obj)->clas)
@@ -211,9 +218,8 @@ public:
 
     // 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 *));
-
+    ((_Jv_Self *)this)->vtable_ptr -= 2 * sizeof (void *);
+    
     // We must initialize every field of the class.  We do this in the
     // same order they are declared in Class.h, except for fields that
     // are initialized to NULL.
index 56d73e6..9c4b3c8 100644 (file)
@@ -91,10 +91,6 @@ public abstract class ClassLoader
     return loadClass (name, false);
   }
   
-  /* findClass implementation for the system classloader. 
-  native Class systemFindClass(String name)
-    throws java.lang.ClassNotFoundException;
-
   /** 
    * Loads the class by the given name.  The default implementation
    * will search for the class in the following order (similar to jdk 1.2)