From 1c8b319bc72eec4f9c6e971bb02d6f678c8a0b6f Mon Sep 17 00:00:00 2001 From: twisti Date: Wed, 15 Aug 2007 15:20:47 +0000 Subject: [PATCH] * src/vmcore/class.c (class_get_interfaces): New function. * src/vmcore/class.h (class_get_interfaces): Likewise. * src/native/vm/java_lang_Class.c (getSuperclass): Cast return value. (getInterfaces): Use class_get_interfaces. * src/native/vm/sun/jvm.c (JVM_GetClassInterfaces): Likewise. --- src/native/vm/java_lang_Class.c | 21 +++------------------ src/native/vm/sun/jvm.c | 14 +++++++++----- src/vmcore/class.c | 33 ++++++++++++++++++++++++++++++++- src/vmcore/class.h | 19 ++++++++++--------- 4 files changed, 54 insertions(+), 33 deletions(-) diff --git a/src/native/vm/java_lang_Class.c b/src/native/vm/java_lang_Class.c index b644d609d..e50165ed5 100644 --- a/src/native/vm/java_lang_Class.c +++ b/src/native/vm/java_lang_Class.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: java_lang_Class.c 8305 2007-08-15 13:49:26Z panzi $ + $Id: java_lang_Class.c 8307 2007-08-15 15:20:47Z twisti $ */ @@ -290,7 +290,7 @@ java_lang_Class *_Jv_java_lang_Class_getSuperclass(java_lang_Class *klass) super = class_get_superclass(c); - return super; + return (java_lang_Class *) super; } @@ -302,26 +302,11 @@ java_lang_Class *_Jv_java_lang_Class_getSuperclass(java_lang_Class *klass) java_objectarray *_Jv_java_lang_Class_getInterfaces(java_lang_Class *klass) { classinfo *c; - classinfo *ic; java_objectarray *oa; - u4 i; c = (classinfo *) klass; - if (!(c->state & CLASS_LINKED)) - if (!link_class(c)) - return NULL; - - oa = builtin_anewarray(c->interfacescount, class_java_lang_Class); - - if (oa == NULL) - return NULL; - - for (i = 0; i < c->interfacescount; i++) { - ic = c->interfaces[i].cls; - - oa->data[i] = ic; - } + oa = class_get_interfaces(c); return oa; } diff --git a/src/native/vm/sun/jvm.c b/src/native/vm/sun/jvm.c index 37d23eda0..1df82cda0 100644 --- a/src/native/vm/sun/jvm.c +++ b/src/native/vm/sun/jvm.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: jvm.c 8305 2007-08-15 13:49:26Z panzi $ + $Id: jvm.c 8307 2007-08-15 15:20:47Z twisti $ */ @@ -759,10 +759,14 @@ jstring JVM_GetClassName(JNIEnv *env, jclass cls) jobjectArray JVM_GetClassInterfaces(JNIEnv *env, jclass cls) { -#if PRINTJVM - log_println("JVM_GetClassInterfaces: cls=%p", cls); -#endif - return (jobjectArray) _Jv_java_lang_Class_getInterfaces((java_lang_Class *) cls); + classinfo *c; + java_objectarray *oa; + + TRACEJVMCALLS("JVM_GetClassInterfaces(env=%p, cls=%p)", env, cls); + + oa = class_get_interfaces(c); + + return (jobjectArray) oa; } diff --git a/src/vmcore/class.c b/src/vmcore/class.c index 2833926c0..37791b1af 100644 --- a/src/vmcore/class.c +++ b/src/vmcore/class.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: class.c 8295 2007-08-11 17:57:24Z michi $ + $Id: class.c 8307 2007-08-15 15:20:47Z twisti $ */ @@ -1721,6 +1721,37 @@ classinfo *class_get_declaringclass(classinfo *c) } +/* class_get_interfaces ******************************************************** + + Return an array of interfaces of the given class. + +*******************************************************************************/ + +java_objectarray *class_get_interfaces(classinfo *c) +{ + classinfo *ic; + java_objectarray *oa; + u4 i; + + if (!(c->state & CLASS_LINKED)) + if (!link_class(c)) + return NULL; + + oa = builtin_anewarray(c->interfacescount, class_java_lang_Class); + + if (oa == NULL) + return NULL; + + for (i = 0; i < c->interfacescount; i++) { + ic = c->interfaces[i].cls; + + oa->data[i] = (java_object_t *) ic; + } + + return oa; +} + + /* class_get_signature ********************************************************* Return the signature of the given class. For array and primitive diff --git a/src/vmcore/class.h b/src/vmcore/class.h index 10e04b104..d19dead9d 100644 --- a/src/vmcore/class.h +++ b/src/vmcore/class.h @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: class.h 8295 2007-08-11 17:57:24Z michi $ + $Id: class.h 8307 2007-08-15 15:20:47Z twisti $ */ @@ -357,16 +357,17 @@ methodinfo *class_resolvemethod(classinfo *c, utf *name, utf *dest); methodinfo *class_resolveclassmethod(classinfo *c, utf *name, utf *dest, classinfo *referer, bool throwexception); methodinfo *class_resolveinterfacemethod(classinfo *c, utf *name, utf *dest, classinfo *referer, bool throwexception); -bool class_issubclass(classinfo *sub, classinfo *super); -bool class_isanysubclass(classinfo *sub, classinfo *super); -bool class_is_primitive(classinfo *c); -bool class_is_array(classinfo *c); -bool class_is_interface(classinfo *c); -classinfo *class_get_superclass(classinfo *c); -classinfo *class_get_declaringclass(classinfo *c); +bool class_issubclass(classinfo *sub, classinfo *super); +bool class_isanysubclass(classinfo *sub, classinfo *super); +bool class_is_primitive(classinfo *c); +bool class_is_array(classinfo *c); +bool class_is_interface(classinfo *c); +classinfo *class_get_superclass(classinfo *c); +classinfo *class_get_declaringclass(classinfo *c); +java_objectarray *class_get_interfaces(classinfo *c); #if defined(ENABLE_JAVASE) -utf *class_get_signature(classinfo *c); +utf *class_get_signature(classinfo *c); #endif /* some debugging functions */ -- 2.25.1