aboutsummaryrefslogtreecommitdiff
path: root/libjava/java
diff options
context:
space:
mode:
authorBryce McKinlay <bryce@albatross.co.nz>2001-01-17 10:22:33 +0000
committerBryce McKinlay <bryce@gcc.gnu.org>2001-01-17 10:22:33 +0000
commit607adf67a0b885a747fcc6995f8545a26f006661 (patch)
tree611e7282c479126e4aaf4a31ed1c07a8bd3e6df8 /libjava/java
parent61a24907052a2cdcf421ff28fa91a47668c9d300 (diff)
downloadgcc-607adf67a0b885a747fcc6995f8545a26f006661.zip
gcc-607adf67a0b885a747fcc6995f8545a26f006661.tar.gz
gcc-607adf67a0b885a747fcc6995f8545a26f006661.tar.bz2
Class.h (isInterface): Move implementation from natClass.cc.
* 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. From-SVN: r39091
Diffstat (limited to 'libjava/java')
-rw-r--r--libjava/java/lang/Class.h16
-rw-r--r--libjava/java/lang/Object.h8
-rw-r--r--libjava/java/lang/natClass.cc2
3 files changed, 13 insertions, 13 deletions
diff --git a/libjava/java/lang/Class.h b/libjava/java/lang/Class.h
index febe748..9736b78 100644
--- a/libjava/java/lang/Class.h
+++ b/libjava/java/lang/Class.h
@@ -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 *));
diff --git a/libjava/java/lang/Object.h b/libjava/java/lang/Object.h
index 81b5a66..352d48b 100644
--- a/libjava/java/lang/Object.h
+++ b/libjava/java/lang/Object.h
@@ -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
diff --git a/libjava/java/lang/natClass.cc b/libjava/java/lang/natClass.cc
index 2d8a125..9a97411 100644
--- a/libjava/java/lang/natClass.cc
+++ b/libjava/java/lang/natClass.cc
@@ -732,7 +732,7 @@ java::lang::Class::initializeClass (void)
{
try
{
- superclass->initializeClass ();
+ _Jv_InitClass (superclass);
}
catch (java::lang::Throwable *except)
{