* src/vmcore/class.c (class_get_interfaces): New function.
authortwisti <none@none>
Wed, 15 Aug 2007 15:20:47 +0000 (15:20 +0000)
committertwisti <none@none>
Wed, 15 Aug 2007 15:20:47 +0000 (15:20 +0000)
* 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
src/native/vm/sun/jvm.c
src/vmcore/class.c
src/vmcore/class.h

index b644d609d2ab996a16aaef7afae8a80e44c92e5f..e50165ed56196e67b5d921b6ece8a11d5a4690c5 100644 (file)
@@ -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;
 }
index 37d23eda0d86f65b555a3040fecd370d6ab85a27..1df82cda015d00d9f362c80d8ca80910b5f3db44 100644 (file)
@@ -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;
 }
 
 
index 2833926c037f7c91c2bb35a952f4e2790b2c1228..37791b1af7fb0a7d5024d68b7d99ab5a06e3293a 100644 (file)
@@ -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
index 10e04b10465442c982ac634457b7a19aec219be2..d19dead9dc90171c627b7bc7da0371d5ac59fc81 100644 (file)
@@ -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 */