* src/native/llni.h: Added macros for array handling.
[cacao.git] / src / vmcore / class.h
index 1c8b7f660840a7bfe7b6642f8011316d2ec7a7c0..7119921ef8e4e8926b95611f2ef8cbae5e6fc51b 100644 (file)
@@ -22,7 +22,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   $Id: class.h 8219 2007-07-20 16:52:11Z twisti $
+   $Id: class.h 8318 2007-08-16 10:05:34Z michi $
 
 */
 
@@ -85,7 +85,7 @@ typedef struct castinfo       castinfo;
    runtime in vm_create. */
 
 typedef struct {
-       java_objectheader header;
+       java_object_t      header;
 #if defined(WITH_CLASSPATH_GNU)
        intptr_t           padding[4];
 #elif defined(WITH_CLASSPATH_SUN)
@@ -126,8 +126,6 @@ struct classinfo {                /* class structure                          */
        s4          methodscount;     /* number of methods                        */
        methodinfo *methods;          /* method table                             */
 
-       listnode_t  listnode;         /* linkage                                  */
-
        s4          state;            /* current class state                      */
        s4          index;            /* hierarchy depth (classes) or index       */
                                      /* (interfaces)                             */
@@ -149,10 +147,17 @@ struct classinfo {                /* class structure                          */
        utf        *sourcefile;       /* SourceFile attribute                     */
 #if defined(ENABLE_JAVASE)
        utf        *signature;        /* Signature attribute                      */
-       s4            runtimevisibleannotationscount;
-       annotation_t *runtimevisibleannotations;
+#if defined(ENABLE_ANNOTATIONS)
+       annotation_bytearray_t  *annotations;
+       
+       annotation_bytearrays_t *method_annotations;
+       annotation_bytearrays_t *method_parameterannotations;
+       annotation_bytearrays_t *method_annotationdefaults;
+
+       annotation_bytearrays_t *field_annotations;
+#endif
 #endif
-       java_objectheader *classloader; /* NULL for bootstrap classloader         */
+       classloader *classloader;       /* NULL for bootstrap classloader         */
 };
 
 
@@ -189,9 +194,6 @@ struct castinfo {
 
 /* global variables ***********************************************************/
 
-extern list_t unlinkedclasses; /* this is only used for eager class loading   */
-
-
 /* frequently used classes ****************************************************/
 
 /* important system classes */
@@ -209,6 +211,9 @@ extern classinfo *class_java_lang_VMSystem;
 extern classinfo *class_java_lang_VMThread;
 extern classinfo *class_java_io_Serializable;
 
+#if defined(WITH_CLASSPATH_SUN)
+extern classinfo *class_sun_reflect_MagicAccessorImpl;
+#endif
 
 /* system exception classes required in cacao */
 
@@ -229,6 +234,13 @@ extern classinfo *class_java_lang_ClassNotFoundException;
 
 #if defined(ENABLE_JAVASE)
 extern classinfo *class_java_lang_Void;
+
+#if defined(ENABLE_ANNOTATIONS)
+extern classinfo *class_sun_reflect_ConstantPool;
+#if defined(WITH_CLASSPATH_GNU)
+extern classinfo *class_sun_reflect_annotation_AnnotationParser;
+#endif
+#endif
 #endif
 
 extern classinfo *class_java_lang_Boolean;
@@ -292,7 +304,7 @@ extern classinfo *pseudo_class_New;
 
 classinfo *class_create_classinfo(utf *u);
 void       class_postset_header_vftbl(void);
-classinfo *class_define(utf *name, java_objectheader *cl, int32_t length, const uint8_t *data);
+classinfo *class_define(utf *name, classloader *cl, int32_t length, const uint8_t *data);
 void       class_set_packagename(classinfo *c);
 
 bool       class_load_attributes(classbuffer *cb);
@@ -345,13 +357,20 @@ 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);
+java_handle_objectarray_t *class_get_declaredclasses(classinfo *c, bool publicOnly);
+classinfo                 *class_get_declaringclass(classinfo *c);
+java_handle_objectarray_t *class_get_interfaces(classinfo *c);
+
+#if defined(ENABLE_JAVASE)
+utf              *class_get_signature(classinfo *c);
+#endif
 
 /* some debugging functions */