* src/native/vm/gnu/java_lang_VMClass.c (getModifiers): Use
authorChristian Thalinger <twisti@complang.tuwien.ac.at>
Sun, 16 Sep 2007 20:06:03 +0000 (22:06 +0200)
committerChristian Thalinger <twisti@complang.tuwien.ac.at>
Sun, 16 Sep 2007 20:06:03 +0000 (22:06 +0200)
class_get_modifiers.
* src/native/vm/sun/jvm.c (JVM_GetClassModifiers): Likewise.

* src/native/vm/java_lang_Class.c (class_get_modifiers): Removed.
* src/native/vm/java_lang_Class.h: Likewise.

* src/vmcore/class.c (class_get_modifiers): New function.
* src/vmcore/class.h: Likewise.

src/native/vm/gnu/java_lang_VMClass.c
src/native/vm/java_lang_Class.c
src/native/vm/java_lang_Class.h
src/native/vm/sun/jvm.c
src/vmcore/class.c
src/vmcore/class.h

index 6ec61b846beac0d0b81b4a61c99816ade942c93c..efd36b1277cbb38ba96996d6613efba566cee526 100644 (file)
@@ -224,9 +224,16 @@ JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_getComponentType(JNIEn
  * Method:    getModifiers
  * Signature: (Ljava/lang/Class;Z)I
  */
-JNIEXPORT s4 JNICALL Java_java_lang_VMClass_getModifiers(JNIEnv *env, jclass clazz, java_lang_Class *klass, s4 ignoreInnerClassesAttrib)
+JNIEXPORT int32_t JNICALL Java_java_lang_VMClass_getModifiers(JNIEnv *env, jclass clazz, java_lang_Class *klass, int32_t ignoreInnerClassesAttrib)
 {
-       return _Jv_java_lang_Class_getModifiers(klass, ignoreInnerClassesAttrib);
+       classinfo *c;
+       int32_t    flags;
+
+       c = LLNI_classinfo_unwrap(klass);
+
+       flags = class_get_modifiers(c, ignoreInnerClassesAttrib);
+
+       return flags;
 }
 
 
index 6b7f49e5838b3142f5dd1b01e399ac6b9dd0dcd9..a877fa2984a4025f41d8e40e5915148a16670c32 100644 (file)
@@ -246,53 +246,6 @@ s4 _Jv_java_lang_Class_isAssignableFrom(java_lang_Class *klass, java_lang_Class
 
 #if defined(ENABLE_JAVASE)
 
-/*
- * Class:     java/lang/Class
- * Method:    getModifiers
- * Signature: (Z)I
- */
-s4 _Jv_java_lang_Class_getModifiers(java_lang_Class *klass, s4 ignoreInnerClassesAttrib)
-{
-       classinfo             *c;
-       classref_or_classinfo  inner;
-       classref_or_classinfo  outer;
-       utf                   *innername;
-       s4                     i;
-
-       c = LLNI_classinfo_unwrap(klass);
-
-       if (!ignoreInnerClassesAttrib && (c->innerclasscount != 0)) {
-               /* search for passed class as inner class */
-
-               for (i = 0; i < c->innerclasscount; i++) {
-                       inner = c->innerclass[i].inner_class;
-                       outer = c->innerclass[i].outer_class;
-
-                       /* Check if inner is a classref or a real class and get
-               the name of the structure */
-
-                       innername = IS_CLASSREF(inner) ? inner.ref->name : inner.cls->name;
-
-                       /* innerclass is this class */
-
-                       if (innername == c->name) {
-                               /* has the class actually an outer class? */
-
-                               if (outer.any)
-                                       /* return flags got from the outer class file */
-                                       return c->innerclass[i].flags & ACC_CLASS_REFLECT_MASK;
-                               else
-                                       return c->flags & ACC_CLASS_REFLECT_MASK;
-                       }
-               }
-       }
-
-       /* passed class is no inner class or it was not requested */
-
-       return c->flags & ACC_CLASS_REFLECT_MASK;
-}
-
-
 /*
  * Class:     java/lang/Class
  * Method:    getDeclaredFields
index 8e1421b253edccd3d608c681f18589bdc67bc9fe..e601b6a5911d4660875989589bddcaeecff1f06f 100644 (file)
@@ -62,7 +62,6 @@ s4                             _Jv_java_lang_Class_isInstance(java_lang_Class *k
 s4                             _Jv_java_lang_Class_isAssignableFrom(java_lang_Class *klass, java_lang_Class *c);
 
 #if defined(ENABLE_JAVASE)
-s4                             _Jv_java_lang_Class_getModifiers(java_lang_Class *klass, s4 ignoreInnerClassesAttrib);
 java_handle_objectarray_t     *_Jv_java_lang_Class_getDeclaredFields(java_lang_Class *klass, s4 publicOnly);
 java_handle_objectarray_t     *_Jv_java_lang_Class_getDeclaredMethods(java_lang_Class *klass, s4 publicOnly);
 java_handle_objectarray_t     *_Jv_java_lang_Class_getDeclaredConstructors(java_lang_Class *klass, s4 publicOnly);
index 757c6b4ccb395a8b5d557bc596b49ff414a30230..a099a06aaa6cfc82a5baf66f6f20e9c79b095f4c 100644 (file)
@@ -1030,16 +1030,15 @@ jclass JVM_GetComponentType(JNIEnv *env, jclass cls)
 jint JVM_GetClassModifiers(JNIEnv *env, jclass cls)
 {
        classinfo *c;
+       int32_t    flags;
 
-#if PRINTJVM
-       log_println("JVM_GetClassModifiers: cls=%p", cls);
-#endif
+       TRACEJVMCALLS("JVM_GetClassModifiers(env=%p, cls=%p)", env, cls);
 
        c = LLNI_classinfo_unwrap(cls);
 
-       /* XXX is this correct? */
+       flags = class_get_modifiers(c, false);
 
-       return c->flags & ACC_CLASS_REFLECT_MASK;
+       return flags;
 }
 
 
index 7e4ccdc82db418338741d336ddde5319d6300150..61a47aaf5f19f61a18f4227e9ccb0ab484b000c1 100644 (file)
@@ -1989,6 +1989,57 @@ java_handle_bytearray_t *class_get_annotations(classinfo *c)
 }
 
 
+/* class_get_modifiers *********************************************************
+
+   Get the modifier flags of the given class.
+
+   IN:
+       c....the class of which the modifier flags should be returned
+          ignoreInnerClassesAttrib
+   RETURN VALUE:
+       modifier flags
+
+*******************************************************************************/
+
+int32_t class_get_modifiers(classinfo *c, bool ignoreInnerClassesAttrib)
+{
+       classref_or_classinfo  inner;
+       classref_or_classinfo  outer;
+       utf                   *innername;
+       int                    i;
+
+       if (!ignoreInnerClassesAttrib && (c->innerclasscount != 0)) {
+               /* search for passed class as inner class */
+
+               for (i = 0; i < c->innerclasscount; i++) {
+                       inner = c->innerclass[i].inner_class;
+                       outer = c->innerclass[i].outer_class;
+
+                       /* Check if inner is a classref or a real class and get
+               the name of the structure */
+
+                       innername = IS_CLASSREF(inner) ? inner.ref->name : inner.cls->name;
+
+                       /* innerclass is this class */
+
+                       if (innername == c->name) {
+                               /* has the class actually an outer class? */
+
+                               if (outer.any)
+                                       /* return flags got from the outer class file */
+                                       return c->innerclass[i].flags & ACC_CLASS_REFLECT_MASK;
+                               else
+                                       return c->flags & ACC_CLASS_REFLECT_MASK;
+                       }
+               }
+       }
+
+       /* passed class is no inner class or it was not requested */
+
+       return c->flags & ACC_CLASS_REFLECT_MASK;
+}
+
+
 /* class_get_signature *********************************************************
 
    Return the signature of the given class.  For array and primitive
index 179a976dfb95fec9bfc103440fc17b9cadf6bf83..0127c20dee970db13e140b8b5c577a7994c03c0e 100644 (file)
@@ -383,6 +383,7 @@ classinfo                 *class_get_declaringclass(classinfo *c);
 classinfo                 *class_get_enclosingclass(classinfo *c);
 java_handle_objectarray_t *class_get_interfaces(classinfo *c);
 java_handle_bytearray_t   *class_get_annotations(classinfo *c);
+int32_t                    class_get_modifiers(classinfo *c, bool ignoreInnerClassesAttrib);
 
 #if defined(ENABLE_JAVASE)
 utf                       *class_get_signature(classinfo *c);