This is the mail archive of the
java-patches@sources.redhat.com
mailing list for the Java project.
[PATCH] New C++ ABI, cleanup patch.
- To: java-patches at sources dot redhat dot com
- Subject: [PATCH] New C++ ABI, cleanup patch.
- From: Alexandre Petit-Bianco <apbianco at cygnus dot com>
- Date: Tue, 16 Jan 2001 23:15:40 -0800
- Reply-to: apbianco at cygnus dot com
I'd like to check this patch in. I can't verify it fully builds, v3
gets in the way. Note that I had to keep the inclusion of stdio.h in
Class.h so that NULL can be defined. Is it OK?
I hope it won't break anything, should I just go?
./A
2001-01-16 Alexandre Petit-Bianco <apbianco@cygnus.com>
* prims.cc (init_prim_class): Deleted.
(DECLARE_PRIM_TYPE): Rewritten.
* java/lang/Class.h (java/lang/reflect/Modifier.h): Included.
(Class): Contructor now takes arguments, initializes fields.
(initializePrim): Prototype deleted.
* java/lang/natClass.cc (initializePrim): Deleted.
Index: prims.cc
===================================================================
RCS file: /cvs/gcc/egcs/libjava/prims.cc,v
retrieving revision 1.45
diff -u -p -r1.45 prims.cc
--- prims.cc 2001/01/15 08:11:40 1.45
+++ prims.cc 2001/01/17 07:07:52
@@ -510,21 +510,11 @@ _Jv_NewMultiArray (jclass array_type, ji
-// Initialize Class object for primitive types. The `return' statement
-// does the actuall job.
-static java::lang::Class
-init_prim_class (jobject cname, jbyte sig, jint len, jobject array_vtable)
-{
- static java::lang::Class iclass;
- iclass.initializePrim (cname, sig, len, array_vtable);
- return iclass;
-}
-
#define DECLARE_PRIM_TYPE(NAME, SIG, LEN) \
_Jv_ArrayVTable _Jv_##NAME##VTable; \
- java::lang::Class _Jv_##NAME##Class = \
- init_prim_class ((jobject) #NAME, (jbyte) SIG, \
- (jint) LEN, (jobject) &_Jv_##NAME##VTable);
+ java::lang::Class _Jv_##NAME##Class ((jobject) #NAME, \
+ (jbyte) SIG, (jint) LEN, \
+ (jobject) &_Jv_##NAME##VTable);
DECLARE_PRIM_TYPE(byte, 'B', 1);
DECLARE_PRIM_TYPE(short, 'S', 2);
Index: java/lang/Class.h
===================================================================
RCS file: /cvs/gcc/egcs/libjava/java/lang/Class.h,v
retrieving revision 1.29
diff -u -p -r1.29 Class.h
--- Class.h 2001/01/15 08:11:40 1.29
+++ Class.h 2001/01/17 07:07:55
@@ -18,6 +18,7 @@ details. */
#include <java/lang/Object.h>
#include <java/lang/String.h>
#include <java/net/URL.h>
+#include <java/lang/reflect/Modifier.h>
// We declare these here to avoid including gcj/cni.h.
extern "C" void _Jv_InitClass (jclass klass);
@@ -173,7 +174,10 @@ public:
jboolean isAssignableFrom (jclass cls);
jboolean isInstance (jobject obj);
- jboolean isInterface (void);
+ jboolean isInterface (void)
+ {
+ return (accflags & java::lang::reflect::Modifier::INTERFACE) != 0;
+ }
inline jboolean isPrimitive (void)
{
@@ -192,52 +196,32 @@ public:
// finalization
void finalize ();
- // For the initialization of primitive types: some constructors as
- // required by prims.cc:init_prim_class(), and the prototype of
- // method to perform a lightweight initialization of a Class object.
- Class (void) {}
- Class (const Class& x) : Object () {
+ // This constructor is used to create Class object for the primitive
+ // types.
+ 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.
void *p = ((void **)this)[0];
((void **)this)[0] = (void *)((char *)p-2*sizeof (void *));
- _Jv_VTable *avtable = x.vtable;
-
- // We must initialize every field of the class. We do this in
- // the same order they are declared in Class.h.
- next = NULL;
- name = x.name;
- accflags = x.accflags;
- superclass = NULL;
- constants.size = 0;
- constants.tags = NULL;
- constants.data = NULL;
- methods = NULL;
- method_count = x.method_count;
- vtable_method_count = 0;
- fields = NULL;
- size_in_bytes = x.size_in_bytes;
- field_count = 0;
- static_field_count = 0;
+ // 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.
+ name = _Jv_makeUtf8Const ((char *) cname, -1);
+ accflags = Modifier::PUBLIC | Modifier::FINAL | Modifier::ABSTRACT;
+ method_count = sig;
+ size_in_bytes = len;
vtable = JV_PRIMITIVE_VTABLE;
- interfaces = NULL;
- loader = NULL;
- interface_count = 0;
state = JV_STATE_DONE;
- thread = NULL;
depth = -1;
- ancestors = NULL;
- idt = NULL;
-
if (method_count != 'V')
- _Jv_NewArrayClass (this, NULL, avtable);
- else
- arrayclass = NULL;
+ _Jv_NewArrayClass (this, NULL, (_Jv_VTable *) array_vtable);
}
- void initializePrim (jobject cname, jbyte sig, jint len, jobject avtable);
static java::lang::Class class$;
Index: java/lang/natClass.cc
===================================================================
RCS file: /cvs/gcc/egcs/libjava/java/lang/natClass.cc,v
retrieving revision 1.33
diff -u -p -r1.33 natClass.cc
--- natClass.cc 2001/01/15 08:11:40 1.33
+++ natClass.cc 2001/01/17 07:07:59
@@ -633,12 +633,6 @@ java::lang::Class::isInstance (jobject o
return _Jv_IsAssignableFrom (this, JV_CLASS (obj));
}
-jboolean
-java::lang::Class::isInterface (void)
-{
- return (accflags & java::lang::reflect::Modifier::INTERFACE) != 0;
-}
-
jobject
java::lang::Class::newInstance (void)
{
@@ -1407,21 +1401,4 @@ java::lang::Class::getPrivateMethod (jst
}
}
JvThrow (new java::lang::NoSuchMethodException);
-}
-
-// Perform a lightweight initialization of a Class object, for the
-// purpose of creating the Class object of primitive types.
-
-void
-java::lang::Class::initializePrim (jobject cname, jbyte sig, jint len, jobject avtable)
-{
- using namespace java::lang::reflect;
-
- name = _Jv_makeUtf8Const ((char *) cname, -1);
- accflags = Modifier::PUBLIC | Modifier::FINAL | Modifier::ABSTRACT;
- method_count = sig;
- size_in_bytes = len;
- // We temporarily store `avtable' in the `vtable' field, so that the
- // copy constructor can correctly invoke _Jv_FindArrayClass.
- vtable = (_Jv_VTable *) avtable;
}