- we now build a libnat.a
[cacao.git] / nat / VMClassLoader.c
1 /* class: java/lang/ClassLoader */
2
3
4 #include "jni.h"
5 #include "loader.h"
6 #include "native.h"
7 #include "java_lang_Class.h"
8 #include "java_lang_String.h"
9 #include "java_lang_ClassLoader.h"
10
11
12 /*
13  * Class:     java/lang/ClassLoader
14  * Method:    defineClass0
15  * Signature: (Ljava/lang/String;[BII)Ljava/lang/Class;
16  */
17 JNIEXPORT struct java_lang_Class* JNICALL Java_java_lang_VMClassLoader_defineClass ( JNIEnv *env ,  jclass clazz, struct java_lang_ClassLoader* this, struct java_lang_String* name, java_bytearray* buf, s4 off, s4 len)
18 {
19     classinfo *c;
20
21     log_text("Java_java_lang_VMClassLoader_defineClass called");
22
23     /* call JNI-function to load the class */
24     c = (*env)->DefineClass(env, javastring_tochar((java_objectheader*) name), (jobject) this, (const jbyte *) &buf[off], len);
25     use_class_as_object (c);    
26     return (java_lang_Class*) c;
27 }
28
29 /*
30  * Class:     java/lang/Class
31  * Method:    getPrimitiveClass
32  * Signature: (Ljava/lang/String;)Ljava/lang/Class;
33  */
34 JNIEXPORT struct java_lang_Class* JNICALL Java_java_lang_VMClassLoader_getPrimitiveClass ( JNIEnv *env ,  jclass clazz, struct java_lang_String* name)
35 {
36     classinfo *c;
37     utf *u = javastring_toutf(name, false);
38
39     if (u) {            
40       /* get primitive class */
41       c = loader_load(u);
42       use_class_as_object (c);
43       return (java_lang_Class*) c;      
44     }
45
46     /* illegal primitive classname specified */
47     exceptionptr = native_new_and_init (class_java_lang_ClassNotFoundException);
48     return NULL;
49 }
50
51 /*
52  * Class:     java/lang/ClassLoader
53  * Method:    resolveClass0
54  * Signature: (Ljava/lang/Class;)V
55  */
56 JNIEXPORT void JNICALL Java_java_lang_VMClassLoader_resolveClass ( JNIEnv *env ,   jclass clazz, struct java_lang_Class* par1)
57 {
58   /* class already linked, so return */
59   return;
60 }
61
62
63 /*
64  * These are local overrides for various environment variables in Emacs.
65  * Please do not remove this and leave it at the end of the file, where
66  * Emacs will automagically detect them.
67  * ---------------------------------------------------------------------
68  * Local variables:
69  * mode: c
70  * indent-tabs-mode: t
71  * c-basic-offset: 4
72  * tab-width: 4
73  * End:
74  */