diff options
| author | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-05-31 23:50:37 +0000 |
|---|---|---|
| committer | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-05-31 23:50:37 +0000 |
| commit | a8ba17fbbb676afc03507ee5541a76f5c24fad69 (patch) | |
| tree | 4b05280dd0f1b3a4def3323eb6da74ef8279da45 /libjava/java/lang | |
| parent | 5f526d197ac4455c61d87aa01da276f025183f8b (diff) | |
| download | ppe42-gcc-a8ba17fbbb676afc03507ee5541a76f5c24fad69.tar.gz ppe42-gcc-a8ba17fbbb676afc03507ee5541a76f5c24fad69.zip | |
* prims.cc (DECLARE_PRIM_TYPE): Define a vtable as well.
(_Jv_PrimClass): Set `methods' by calling _Jv_FindArrayClass.
* include/jvm.h (struct _Jv_ArrayVTable): Declare.
(NUM_OBJECT_METHODS): New define.
* java/lang/natClassLoader.cc (_Jv_FindArrayClass): Added
`array_vtable' parameter. Added assertion.
* java/lang/Class.h (_Jv_FindArrayClass): Added `array_vtable'
parameter.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@34312 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/java/lang')
| -rw-r--r-- | libjava/java/lang/Class.h | 3 | ||||
| -rw-r--r-- | libjava/java/lang/natClassLoader.cc | 12 |
2 files changed, 10 insertions, 5 deletions
diff --git a/libjava/java/lang/Class.h b/libjava/java/lang/Class.h index 31f143ac577..9ea375976a4 100644 --- a/libjava/java/lang/Class.h +++ b/libjava/java/lang/Class.h @@ -251,7 +251,8 @@ private: friend jclass _Jv_FindClassInCache (_Jv_Utf8Const *name, java::lang::ClassLoader *loader); friend jclass _Jv_FindArrayClass (jclass element, - java::lang::ClassLoader *loader); + java::lang::ClassLoader *loader, + _Jv_VTable *array_vtable = 0); friend jclass _Jv_NewClass (_Jv_Utf8Const *name, jclass superclass, java::lang::ClassLoader *loader); diff --git a/libjava/java/lang/natClassLoader.cc b/libjava/java/lang/natClassLoader.cc index aa8782ddf0d..b4a9e49b71c 100644 --- a/libjava/java/lang/natClassLoader.cc +++ b/libjava/java/lang/natClassLoader.cc @@ -514,7 +514,8 @@ _Jv_NewClass (_Jv_Utf8Const *name, jclass superclass, } jclass -_Jv_FindArrayClass (jclass element, java::lang::ClassLoader *loader) +_Jv_FindArrayClass (jclass element, java::lang::ClassLoader *loader, + _Jv_VTable *array_vtable) { _Jv_Utf8Const *array_name; int len; @@ -561,6 +562,7 @@ _Jv_FindArrayClass (jclass element, java::lang::ClassLoader *loader) // Note that `vtable_method_count' doesn't include the initial // NULL slot. + JvAssert (ObjectClass.vtable_method_count == NUM_OBJECT_METHODS); int dm_count = ObjectClass.vtable_method_count + 1; // Create a new vtable by copying Object's vtable (except the @@ -569,7 +571,11 @@ _Jv_FindArrayClass (jclass element, java::lang::ClassLoader *loader) // GC. int size = (sizeof (_Jv_VTable) + ((dm_count - 1) * sizeof (void *))); - _Jv_VTable *vtable = (_Jv_VTable *) _Jv_AllocBytes (size); + _Jv_VTable *vtable; + if (array_vtable) + vtable = array_vtable; + else + vtable = (_Jv_VTable *) _Jv_AllocBytes (size); vtable->clas = array_class; memcpy (vtable->method, ObjectClass.vtable->method, dm_count * sizeof (void *)); @@ -607,5 +613,3 @@ _Jv_FindArrayClass (jclass element, java::lang::ClassLoader *loader) return array_class; } - - |

