Merged branch subtype-trunk into default.
[cacao.git] / src / vm / class.cpp
index 0aa5f21233972cf757f8f2f0f4b8c7285d38a7a7..698356d11566973010920c69af5720f75694445d 100644 (file)
 
 #include "arch.h"
 
-#include "mm/memory.h"
+#include "mm/memory.hpp"
 
 #include "native/llni.h"
 
 #include "threads/lock.hpp"
 #include "threads/mutex.hpp"
 
-#include "toolbox/logging.h"
+#include "toolbox/logging.hpp"
 
 #include "vm/array.hpp"
 #include "vm/jit/builtin.hpp"
@@ -2117,6 +2117,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 */
@@ -2137,16 +2144,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;
 }