#include "toolbox/list.h"
#include "vm/global.h"
+#include "vm/stringlocal.h"
#if defined(ENABLE_JAVASE)
# include "vmcore/annotation.h"
#include "vmcore/references.h"
#include "vmcore/utf8.h"
-
/* class state defines ********************************************************/
#define CLASS_LOADING 0x0001
typedef struct {
java_object_t header;
-#if defined(WITH_CLASSPATH_GNU)
+#if defined(WITH_JAVA_RUNTIME_LIBRARY_GNU_CLASSPATH)
intptr_t padding[4];
-#elif defined(WITH_CLASSPATH_SUN)
+#elif defined(WITH_JAVA_RUNTIME_LIBRARY_OPENJDK)
intptr_t padding[19];
-#elif defined(WITH_CLASSPATH_CLDC1_1)
+#elif defined(WITH_JAVA_RUNTIME_LIBRARY_CLDC1_1)
intptr_t padding[3];
#else
# error unknown classpath configuration
#endif
#endif
- classloader *classloader; /* NULL for bootstrap classloader */
+ classloader_t *classloader; /* NULL for bootstrap classloader */
#if defined(ENABLE_JAVASE)
-# if defined(WITH_CLASSPATH_SUN)
+# if defined(WITH_JAVA_RUNTIME_LIBRARY_OPENJDK)
java_object_t *protectiondomain;
java_objectarray_t *signers;
# endif
#endif
+#if defined(ENABLE_JITCACHE)
+ int cache_file_fd;
+#endif
};
/* frequently used classes ****************************************************/
-/* important system classes */
+/* Important system classes. */
extern classinfo *class_java_lang_Object;
extern classinfo *class_java_lang_Class;
extern classinfo *class_java_lang_Throwable;
extern classinfo *class_java_io_Serializable;
-#if defined(WITH_CLASSPATH_GNU)
+/* Important system exceptions. */
+
+extern classinfo *class_java_lang_Exception;
+extern classinfo *class_java_lang_ClassNotFoundException;
+extern classinfo *class_java_lang_RuntimeException;
+
+#if defined(WITH_JAVA_RUNTIME_LIBRARY_GNU_CLASSPATH)
extern classinfo *class_java_lang_VMSystem;
extern classinfo *class_java_lang_VMThread;
extern classinfo *class_java_lang_VMThrowable;
#endif
-#if defined(WITH_CLASSPATH_SUN)
+#if defined(WITH_JAVA_RUNTIME_LIBRARY_OPENJDK)
extern classinfo *class_sun_reflect_MagicAccessorImpl;
#endif
extern classinfo *class_java_util_Vector;
extern classinfo *class_java_util_HashMap;
+# if defined(WITH_JAVA_RUNTIME_LIBRARY_GNU_CLASSPATH)
+extern classinfo *class_java_lang_reflect_VMConstructor;
+extern classinfo *class_java_lang_reflect_VMField;
+extern classinfo *class_java_lang_reflect_VMMethod;
+# endif
+
extern classinfo *arrayclass_java_lang_Object;
# if defined(ENABLE_ANNOTATIONS)
extern classinfo *class_sun_reflect_ConstantPool;
-# if defined(WITH_CLASSPATH_GNU)
+# if defined(WITH_JAVA_RUNTIME_LIBRARY_GNU_CLASSPATH)
extern classinfo *class_sun_reflect_annotation_AnnotationParser;
# endif
# endif
/* inline functions ***********************************************************/
+/**
+ * Returns the classname of the class, where slashes ('/') are
+ * replaced by dots ('.').
+ *
+ * @param c class to get name of
+ * @return classname
+ */
+inline static java_handle_t* class_get_classname(classinfo* c)
+{
+ java_handle_t *s;
+
+ /* Create a java string. */
+
+ s = javastring_new_slash_to_dot(c->name);
+
+ return s;
+}
+
+
/* class_is_primitive **********************************************************
Checks if the given class is a primitive class.
*******************************************************************************/
-static inline classloader *class_get_classloader(classinfo *c)
+static inline classloader_t *class_get_classloader(classinfo *c)
{
- classloader *cl;
+ classloader_t *cl;
cl = c->classloader;
classinfo *class_create_classinfo(utf *u);
void class_postset_header_vftbl(void);
-classinfo *class_define(utf *name, classloader *cl, int32_t length, uint8_t *data, java_handle_t *pd);
+classinfo *class_define(utf *name, classloader_t *cl, int32_t length, uint8_t *data, java_handle_t *pd);
void class_set_packagename(classinfo *c);
bool class_load_attributes(classbuffer *cb);
/* retrieve constantpool element */
-voidptr class_getconstant(classinfo *class, u4 pos, u4 ctype);
+voidptr class_getconstant(classinfo *c, u4 pos, u4 ctype);
voidptr innerclass_getconstant(classinfo *c, u4 pos, u4 ctype);
/* frees all resources used by the class */
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_anonymousclass(classinfo *c);
-bool class_is_array(classinfo *c);
-bool class_is_interface(classinfo *c);
-bool class_is_localclass(classinfo *c);
-bool class_is_memberclass(classinfo *c);
+bool class_issubclass(classinfo *sub, classinfo *super);
+bool class_isanysubclass(classinfo *sub, classinfo *super);
+bool class_is_assignable_from(classinfo *to, classinfo *from);
+bool class_is_instance(classinfo *c, java_handle_t *h);
-classloader *class_get_classloader(classinfo *c);
+classloader_t *class_get_classloader(classinfo *c);
classinfo *class_get_superclass(classinfo *c);
classinfo *class_get_componenttype(classinfo *c);
java_handle_objectarray_t *class_get_declaredclasses(classinfo *c, bool publicOnly);
+java_handle_objectarray_t *class_get_declaredconstructors(classinfo *c, bool publicOnly);
+java_handle_objectarray_t *class_get_declaredfields(classinfo *c, bool publicOnly);
+java_handle_objectarray_t *class_get_declaredmethods(classinfo *c, bool publicOnly);
classinfo *class_get_declaringclass(classinfo *c);
classinfo *class_get_enclosingclass(classinfo *c);
-methodinfo *class_get_enclosingmethod(classinfo *c);
+java_handle_t* class_get_enclosingconstructor(classinfo *c);
+methodinfo* class_get_enclosingmethod_raw(classinfo *c);
+java_handle_t* class_get_enclosingmethod(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);
+java_handle_t *class_get_name(classinfo *c);
#if defined(ENABLE_JAVASE)
utf *class_get_signature(classinfo *c);