#include <stdint.h>
#include <sys/stat.h>
-#include "mm/memory.h"
+#include "mm/memory.hpp"
-#include "native/jni.h"
+#include "native/jni.hpp"
#include "native/llni.h"
-#include "native/native.h"
-#include "native/include/java_lang_Class.h"
-#include "native/include/java_lang_String.h"
-#include "native/include/java_security_ProtectionDomain.h" /* required by... */
-#include "native/include/java_lang_ClassLoader.h"
-#include "native/include/java_util_HashMap.h"
-#include "native/include/java_util_Map.h"
-#include "native/include/java_lang_Boolean.h"
-
-// FIXME
-extern "C" {
-#include "native/include/java_lang_VMClassLoader.h"
-}
+#include "native/native.hpp"
-#include "toolbox/logging.h"
-#include "toolbox/list.h"
+#if defined(ENABLE_JNI_HEADERS)
+# include "native/vm/include/java_lang_VMClassLoader.h"
+#endif
+
+#include "toolbox/logging.hpp"
+#include "toolbox/list.hpp"
#if defined(ENABLE_ASSERTION)
-#include "vm/assertion.h"
+#include "vm/assertion.hpp"
#endif
-#include "vm/builtin.h"
-#include "vm/exceptions.h"
-#include "vm/initialize.h"
+#include "vm/array.hpp"
+#include "vm/jit/builtin.hpp"
+#include "vm/class.hpp"
+#include "vm/classcache.hpp"
+#include "vm/exceptions.hpp"
+#include "vm/globals.hpp"
+#include "vm/initialize.hpp"
+#include "vm/javaobjects.hpp"
+#include "vm/linker.hpp"
+#include "vm/loader.hpp"
+#include "vm/options.h"
#include "vm/primitive.hpp"
-#include "vm/stringlocal.h"
+#include "vm/statistics.h"
+#include "vm/string.hpp"
#include "vm/vm.hpp"
+#include "vm/zip.hpp"
#include "vm/jit/asmpart.h"
-#include "vmcore/class.h"
-#include "vmcore/classcache.h"
-#include "vmcore/linker.h"
-#include "vmcore/loader.h"
-#include "vmcore/options.h"
-#include "vmcore/statistics.h"
-#include "vmcore/suck.h"
-#include "vmcore/zip.h"
-
#if defined(ENABLE_JVMTI)
#include "native/jvmti/cacaodbg.h"
#endif
* Method: defineClass
* Signature: (Ljava/lang/ClassLoader;Ljava/lang/String;[BIILjava/security/ProtectionDomain;)Ljava/lang/Class;
*/
-JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClassLoader_defineClass(JNIEnv *env, jclass clazz, java_lang_ClassLoader *cl, java_lang_String *name, java_handle_bytearray_t *data, int32_t offset, int32_t len, java_security_ProtectionDomain *pd)
+JNIEXPORT jclass JNICALL Java_java_lang_VMClassLoader_defineClass(JNIEnv *env, jclass clazz, jobject cl, jstring name, jbyteArray data, jint offset, jint len, jobject pd)
{
- utf *utfname;
- classinfo *c;
- classloader_t *loader;
- java_lang_Class *o;
+ utf* utfname;
+ classinfo* c;
+ classloader_t* loader;
+ uint8_t* stream;
#if defined(ENABLE_JVMTI)
jint new_class_data_len = 0;
/* check the indexes passed */
- if ((offset < 0) || (len < 0) || ((offset + len) > LLNI_array_size(data))) {
+ ByteArray ba(data);
+
+ if ((offset < 0) || (len < 0) || ((offset + len) > ba.get_length())) {
exceptions_throw_arrayindexoutofboundsexception();
return NULL;
}
c = class_define(utfname, loader, new_class_data_len, new_class_data, pd);
else
#endif
- c = class_define(utfname, loader, len, (uint8_t *) &LLNI_array_direct(data, offset), (java_handle_t *) pd);
+ {
+ stream = ((uint8_t *) ba.get_raw_data_ptr()) + offset;
+ c = class_define(utfname, loader, len, stream, (java_handle_t *) pd);
+ }
if (c == NULL)
return NULL;
- /* for convenience */
-
- o = LLNI_classinfo_wrap(c);
-
- /* set ProtectionDomain */
+ // REMOVEME
+ java_handle_t* h = LLNI_classinfo_wrap(c);
- LLNI_field_set_ref(o, pd, pd);
+ // Set ProtectionDomain.
+ java_lang_Class jlc(h);
+ jlc.set_pd(pd);
- return o;
+ return (jclass) jlc.get_handle();
}
* Method: getPrimitiveClass
* Signature: (C)Ljava/lang/Class;
*/
-JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClassLoader_getPrimitiveClass(JNIEnv *env, jclass clazz, int32_t type)
+JNIEXPORT jclass JNICALL Java_java_lang_VMClassLoader_getPrimitiveClass(JNIEnv *env, jclass clazz, jchar type)
{
classinfo *c;
return NULL;
}
- return LLNI_classinfo_wrap(c);
+ return (jclass) LLNI_classinfo_wrap(c);
}
* Method: resolveClass
* Signature: (Ljava/lang/Class;)V
*/
-JNIEXPORT void JNICALL Java_java_lang_VMClassLoader_resolveClass(JNIEnv *env, jclass clazz, java_lang_Class *c)
+JNIEXPORT void JNICALL Java_java_lang_VMClassLoader_resolveClass(JNIEnv *env, jclass clazz, jclass c)
{
classinfo *ci;
* Method: loadClass
* Signature: (Ljava/lang/String;Z)Ljava/lang/Class;
*/
-JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClassLoader_loadClass(JNIEnv *env, jclass clazz, java_lang_String *name, int32_t resolve)
+JNIEXPORT jclass JNICALL Java_java_lang_VMClassLoader_loadClass(JNIEnv *env, jclass clazz, jstring name, jboolean resolve)
{
classinfo *c;
utf *u;
if (!link_class(c))
return NULL;
- return LLNI_classinfo_wrap(c);
+ return (jclass) LLNI_classinfo_wrap(c);
}
* Method: nativeGetResources
* Signature: (Ljava/lang/String;)Ljava/util/Vector;
*/
-JNIEXPORT struct java_util_Vector* JNICALL Java_java_lang_VMClassLoader_nativeGetResources(JNIEnv *env, jclass clazz, java_lang_String *name)
+JNIEXPORT jobject JNICALL Java_java_lang_VMClassLoader_nativeGetResources(JNIEnv *env, jclass clazz, jstring name)
{
java_handle_t *o; /* vector being created */
methodinfo *m; /* "add" method of vector */
java_handle_t *path; /* path to be added */
- list_classpath_entry *lce; /* classpath entry */
utf *utfname; /* utf to look for */
char *buffer; /* char buffer */
char *namestart; /* start of name to use */
/* iterate over all classpath entries */
- for (lce = (list_classpath_entry*) list_first(list_classpath_entries); lce != NULL;
- lce = (list_classpath_entry*) list_next(list_classpath_entries, lce)) {
+ for (List<list_classpath_entry*>::iterator it = list_classpath_entries->begin(); it != list_classpath_entries->end(); it++) {
+ list_classpath_entry* lce = *it;
+
/* clear path pointer */
path = NULL;
MFREE(buffer, char, bufsize);
- return (struct java_util_Vector *) o;
+ return (jobject) o;
return_NULL:
MFREE(buffer, char, bufsize);
* Method: defaultAssertionStatus
* Signature: ()Z
*/
-JNIEXPORT int32_t JNICALL Java_java_lang_VMClassLoader_defaultAssertionStatus(JNIEnv *env, jclass clazz)
+JNIEXPORT jboolean JNICALL Java_java_lang_VMClassLoader_defaultAssertionStatus(JNIEnv *env, jclass clazz)
{
#if defined(ENABLE_ASSERTION)
return assertion_system_enabled;
* Method: userAssertionStatus
* Signature: ()Z
*/
-JNIEXPORT int32_t JNICALL Java_java_lang_VMClassLoader_defaultUserAssertionStatus(JNIEnv *env, jclass clazz)
+JNIEXPORT jboolean JNICALL Java_java_lang_VMClassLoader_defaultUserAssertionStatus(JNIEnv *env, jclass clazz)
{
#if defined(ENABLE_ASSERTION)
return assertion_user_enabled;
/*
* Class: java/lang/VMClassLoader
* Method: packageAssertionStatus
- * Signature: ()Ljava_util_Map;
+ * Signature: (Ljava/lang/Boolean;Ljava/lang/Boolean;)Ljava/util/Map;
*/
-JNIEXPORT java_util_Map* JNICALL Java_java_lang_VMClassLoader_packageAssertionStatus0(JNIEnv *env, jclass clazz, java_lang_Boolean *jtrue, java_lang_Boolean *jfalse)
+JNIEXPORT jobject JNICALL Java_java_lang_VMClassLoader_packageAssertionStatus0(JNIEnv *env, jclass clazz, jobject jtrue, jobject jfalse)
{
java_handle_t *hm;
#if defined(ENABLE_ASSERTION)
java_handle_t *js;
methodinfo *m;
- assertion_name_t *item;
#endif
/* new HashMap() */
/* if nothing todo, return now */
if (assertion_package_count == 0) {
- return (java_util_Map *) hm;
+ return (jobject) hm;
}
/* get HashMap.put method */
return NULL;
}
- item = (assertion_name_t *)list_first(list_assertion_names);
+ for (List<assertion_name_t*>::iterator it = list_assertion_names->begin(); it != list_assertion_names->end(); it++) {
+ assertion_name_t* item = *it;
- while (item != NULL) {
- if (item->package == false) {
- item = (assertion_name_t *)list_next(list_assertion_names, item);
+ if (item->package == false)
continue;
- }
if (strcmp(item->name, "") == 0) {
/* unnamed package wanted */
else {
vm_call_method(m, hm, js, jfalse);
}
-
- item = (assertion_name_t *)list_next(list_assertion_names, item);
}
#endif
- return (java_util_Map *) hm;
+ return (jobject) hm;
}
/*
* Class: java/lang/VMClassLoader
* Method: classAssertionStatus
- * Signature: ()Ljava_util_Map;
+ * Signature: (Ljava/lang/Boolean;Ljava/lang/Boolean;)Ljava/util/Map;
*/
-JNIEXPORT java_util_Map* JNICALL Java_java_lang_VMClassLoader_classAssertionStatus0(JNIEnv *env, jclass clazz, java_lang_Boolean *jtrue, java_lang_Boolean *jfalse)
+JNIEXPORT jobject JNICALL Java_java_lang_VMClassLoader_classAssertionStatus0(JNIEnv *env, jclass clazz, jobject jtrue, jobject jfalse)
{
java_handle_t *hm;
#if defined(ENABLE_ASSERTION)
java_handle_t *js;
methodinfo *m;
- assertion_name_t *item;
#endif
/* new HashMap() */
/* if nothing todo, return now */
if (assertion_class_count == 0) {
- return (java_util_Map *) hm;
+ return (jobject) hm;
}
/* get HashMap.put method */
return NULL;
}
- item = (assertion_name_t *)list_first(list_assertion_names);
+ for (List<assertion_name_t*>::iterator it = list_assertion_names->begin(); it != list_assertion_names->end(); it++) {
+ assertion_name_t* item = *it;
- while (item != NULL) {
- if (item->package == true) {
- item = (assertion_name_t *)list_next(list_assertion_names, item);
+ if (item->package == true)
continue;
- }
js = javastring_new_from_ascii(item->name);
if (js == NULL) {
else {
vm_call_method(m, hm, js, jfalse);
}
-
- item = (assertion_name_t *)list_next(list_assertion_names, item);
}
#endif
- return (java_util_Map *) hm;
+ return (jobject) hm;
}
* Method: findLoadedClass
* Signature: (Ljava/lang/ClassLoader;Ljava/lang/String;)Ljava/lang/Class;
*/
-JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClassLoader_findLoadedClass(JNIEnv *env, jclass clazz, java_lang_ClassLoader *loader, java_lang_String *name)
+JNIEXPORT jclass JNICALL Java_java_lang_VMClassLoader_findLoadedClass(JNIEnv *env, jclass clazz, jobject loader, jstring name)
{
classloader_t *cl;
classinfo *c;
if (c == NULL)
c = classcache_lookup(cl, u);
- return LLNI_classinfo_wrap(c);
+ return (jclass) LLNI_classinfo_wrap(c);
}
} // extern "C"
*******************************************************************************/
-// FIXME
-extern "C" {
void _Jv_java_lang_VMClassLoader_init(void)
{
- utf *u;
+ utf* u = utf_new_char("java/lang/VMClassLoader");
- u = utf_new_char("java/lang/VMClassLoader");
-
- native_method_register(u, methods, NATIVE_METHODS_COUNT);
-}
+ NativeMethods& nm = VM::get_current()->get_nativemethods();
+ nm.register_methods(u, methods, NATIVE_METHODS_COUNT);
}