/* src/native/vm/cldc1.1/java_lang_Class.c
- Copyright (C) 2006, 2007 R. Grafl, A. Krall, C. Kruegel, C. Oates,
- R. Obermaisser, M. Platter, M. Probst, S. Ring, E. Steiner,
- C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich, J. Wenninger,
- Institut f. Computersprachen - TU Wien
+ Copyright (C) 2006, 2007, 2008
+ CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO
This file is part of CACAO.
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- $Id: java_lang_VMRuntime.c 5900 2006-11-04 17:30:44Z michi $
-
*/
#include "vm/types.h"
#include "native/jni.h"
+#include "native/llni.h"
#include "native/native.h"
#include "native/include/java_lang_String.h" /* required by j.l.C */
#include "native/include/java_lang_Class.h"
-#include "native/vm/java_lang_Class.h"
+#include "vm/exceptions.h"
+#include "vm/initialize.h"
/* native methods implemented by this file ************************************/
{ "newInstance", "()Ljava/lang/Object;", (void *) (ptrint) &Java_java_lang_Class_newInstance },
{ "isInstance", "(Ljava/lang/Object;)Z", (void *) (ptrint) &Java_java_lang_Class_isInstance },
{ "isAssignableFrom", "(Ljava/lang/Class;)Z", (void *) (ptrint) &Java_java_lang_Class_isAssignableFrom },
- { "isInterface", "()Z", (void *) (ptrint) &_Jv_java_lang_Class_isInterface },
- { "isArray", "()Z", (void *) (ptrint) &_Jv_java_lang_Class_isArray },
+ { "isInterface", "()Z", (void *) (ptrint) &Java_java_lang_Class_isInterface },
+ { "isArray", "()Z", (void *) (ptrint) &Java_java_lang_Class_isArray },
{ "getName", "()Ljava/lang/String;", (void *) (ptrint) &Java_java_lang_Class_getName },
};
*/
JNIEXPORT java_lang_Class* JNICALL Java_java_lang_Class_forName(JNIEnv *env, jclass clazz, java_lang_String *name)
{
- return _Jv_java_lang_Class_forName(name);
+ utf *ufile;
+ utf *uname;
+ classinfo *c;
+ u2 *pos;
+ s4 i;
+
+ /* illegal argument */
+
+ if (name == NULL) {
+ exceptions_throw_nullpointerexception();
+ return NULL;
+ }
+
+ /* create utf string in which '.' is replaced by '/' */
+
+ ufile = javastring_toutf((java_handle_t *) name, true);
+ uname = javastring_toutf((java_handle_t *) name, false);
+
+ /* name must not contain '/' (mauve test) */
+
+ for (i = 0, pos = LLNI_field_direct(name, value)->data + LLNI_field_direct(name, offset); i < LLNI_field_direct(name, count); i++, pos++) {
+ if (*pos == '/') {
+ exceptions_throw_classnotfoundexception(uname);
+ return NULL;
+ }
+ }
+
+ /* try to load, ... */
+
+ c = load_class_bootstrap(ufile);
+
+ if (c == NULL)
+ return NULL;
+
+ /* link, ... */
+
+ if (!link_class(c))
+ return NULL;
+
+ /* ...and initialize it. */
+
+ if (!initialize_class(c))
+ return NULL;
+
+ return LLNI_classinfo_wrap(c);
}
* Method: isInstance
* Signature: (Ljava/lang/Object;)Z
*/
-JNIEXPORT s4 JNICALL Java_java_lang_Class_isInstance(JNIEnv *env, java_lang_Class *this, java_lang_Object *obj)
+JNIEXPORT int32_t JNICALL Java_java_lang_Class_isInstance(JNIEnv *env, java_lang_Class *this, java_lang_Object *obj)
{
- return _Jv_java_lang_Class_isInstance(this, obj);
+ classinfo *c;
+ java_handle_t *h;
+
+ c = LLNI_classinfo_unwrap(this);
+ h = (java_handle_t *) obj;
+
+ return class_is_instance(c, h);
}
* Method: isAssignableFrom
* Signature: (Ljava/lang/Class;)Z
*/
-JNIEXPORT s4 JNICALL Java_java_lang_Class_isAssignableFrom(JNIEnv *env, java_lang_Class *this, java_lang_Class *cls)
+JNIEXPORT int32_t JNICALL Java_java_lang_Class_isAssignableFrom(JNIEnv *env, java_lang_Class *this, java_lang_Class *cls)
+{
+ classinfo *to;
+ classinfo *from;
+
+ to = LLNI_classinfo_unwrap(this);
+ from = LLNI_classinfo_unwrap(cls);
+
+ if (from == NULL) {
+ exceptions_throw_nullpointerexception();
+ return 0;
+ }
+
+ return class_is_assignable_from(to, from);
+}
+
+
+/*
+ * Class: java/lang/Class
+ * Method: isInterface
+ * Signature: ()Z
+ */
+JNIEXPORT int32_t JNICALL Java_java_lang_Class_isInterface(JNIEnv *env, java_lang_Class *this)
+{
+ classinfo *c;
+
+ c = LLNI_classinfo_unwrap(this);
+
+ return class_is_interface(c);
+}
+
+
+/*
+ * Class: java/lang/Class
+ * Method: isArray
+ * Signature: ()Z
+ */
+JNIEXPORT int32_t JNICALL Java_java_lang_Class_isArray(JNIEnv *env, java_lang_Class *this)
{
- return _Jv_java_lang_Class_isAssignableFrom(this, cls);
+ classinfo *c;
+
+ c = LLNI_classinfo_unwrap(this);
+
+ return class_is_array(c);
}
*/
JNIEXPORT java_lang_String* JNICALL Java_java_lang_Class_getName(JNIEnv *env, java_lang_Class *this)
{
- return _Jv_java_lang_Class_getName(this);
+ classinfo *c;
+
+ c = LLNI_classinfo_unwrap(this);
+
+ return (java_lang_String*) class_get_classname(c);
}