Fixes PR113.
authorMichael Starzinger <michi@complang.tuwien.ac.at>
Thu, 23 Oct 2008 16:32:03 +0000 (18:32 +0200)
committerMichael Starzinger <michi@complang.tuwien.ac.at>
Thu, 23 Oct 2008 16:32:03 +0000 (18:32 +0200)
* src/vm/class.cpp (class_get_modifiers): Remove ACC_SUPER bit from class
flags when returning modifiers.

src/vm/class.cpp

index 2e941b10b5d28ff968adea73052ef291a4d31d70..aca2115c827e6a1758e9a57d7e073896705b9891 100644 (file)
@@ -2113,6 +2113,13 @@ int32_t class_get_modifiers(classinfo *c, bool ignoreInnerClassesAttrib)
        classref_or_classinfo  outer;
        utf                   *innername;
        int                    i;
+       int32_t                flags;
+
+       /* default to flags of passed class */
+
+       flags = c->flags;
+
+       /* if requested we check if passed class is inner class */
 
        if (!ignoreInnerClassesAttrib && (c->innerclasscount != 0)) {
                /* search for passed class as inner class */
@@ -2133,16 +2140,16 @@ int32_t class_get_modifiers(classinfo *c, bool ignoreInnerClassesAttrib)
 
                                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;
+                                       flags = c->innerclass[i].flags;
+
+                               break;
                        }
                }
        }
 
-       /* passed class is no inner class or it was not requested */
+       /* remove ACC_SUPER bit from flags */
 
-       return c->flags & ACC_CLASS_REFLECT_MASK;
+       return flags & ~ACC_SUPER & ACC_CLASS_REFLECT_MASK;
 }