The .hh files created with the header file generator are all
included here as are the C functions implementing these methods.
- $Id: native.c 692 2003-12-05 18:17:43Z stefan $
+ $Id: native.c 730 2003-12-11 21:23:31Z edwin $
*/
+
#include <stdlib.h>
#include <unistd.h>
#include <time.h>
#include "tables.h"
#include "loader.h"
#include "toolbox/loging.h"
+#include "toolbox/memory.h"
#include "threads/thread.h"
#include "threads/threadio.h"
#include "threads/locks.h"
void use_class_as_object(classinfo *c)
{
- vftbl *vt, *newtbl;
-
- /*log_text("use_class_as_object");*/
- if (!class_java_lang_Class)
- class_java_lang_Class =
- class_new ( utf_new_char ("java/lang/Class") );
- vt = class_java_lang_Class->vftbl;
- if (!c->classvftbl) {
- c->classvftbl = true;
-
-/* copy_vftbl(&newtbl, vt);
- newtbl->class = c->header.vftbl->class;
- newtbl->baseval = c->header.vftbl->baseval;
- newtbl->diffval = c->header.vftbl->diffval;
- c->header.vftbl = newtbl;*/
+ vftbl *vt;
+ vftbl *newtbl;
+
+ if (!class_java_lang_Class)
+ class_java_lang_Class = class_new(utf_new_char ("java/lang/Class"));
+
+ vt = class_java_lang_Class->vftbl;
+
+
+ if (!c->classvftbl) {
+ c->classvftbl = true;
+
+ /* copy_vftbl(&newtbl, vt);
+ newtbl->class = c->header.vftbl->class;
+ newtbl->baseval = c->header.vftbl->baseval;
+ newtbl->diffval = c->header.vftbl->diffval;
+ c->header.vftbl = newtbl;*/
- c->header.vftbl=class_java_lang_Class->vftbl;
+ c->header.vftbl = class_java_lang_Class->vftbl;
if (!class_java_lang_VMClass) {
- class_java_lang_VMClass =
- loader_load ( utf_new_char("java/lang/VMClass"));
- method_vmclass_init =
- class_findmethod(class_java_lang_VMClass,utf_new_char("<init>"),
- utf_new_char("(Lgnu/classpath/RawData;)V"));
- if (method_vmclass_init==0) {
+ loader_load_sysclass(&class_java_lang_VMClass,
+ utf_new_char("java/lang/VMClass"));
+
+ method_vmclass_init =
+ class_findmethod(class_java_lang_VMClass,
+ utf_new_char("<init>"),
+ utf_new_char("(Lgnu/classpath/RawData;)V"));
+
+ if (method_vmclass_init == 0) {
class_showmethods(class_java_lang_VMClass);
- panic("Needed class initializer for VMClass could not be found");
- }
- }
- {
- java_objectheader *vmo = builtin_new (class_java_lang_VMClass);
+ panic("Needed class initializer for VMClass could not be found");
+ }
+ }
+ {
+ java_objectheader *vmo = builtin_new(class_java_lang_VMClass);
if (!vmo) panic("Error while creating instance of java/lang/VMClass");
- asm_calljavamethod (method_vmclass_init, vmo, c, NULL, NULL);
- c->vmClass=(java_lang_VMClass*)vmo;
+ asm_calljavamethod(method_vmclass_init, vmo, c, NULL, NULL);
+ c->vmClass = (java_lang_VMClass *) vmo;
/*log_text("VMCLASS has been attached");*/
- }
- }
-
+ }
+ }
}
class_java_security_PrivilegedActionException =
class_new(utf_new_char("java/security/PrivilegedActionException"));
- class_java_net_UnknownHostException =
- loader_load(utf_new_char("java/net/UnknownHostException"));
- class_java_net_SocketException =
- loader_load(utf_new_char("java/net/SocketException"));
+ loader_load_sysclass(&class_java_net_UnknownHostException,
+ utf_new_char("java/net/UnknownHostException"));
+ loader_load_sysclass(&class_java_net_SocketException,
+ utf_new_char("java/net/SocketException"));
class_java_lang_IllegalArgumentException =
class_new(utf_new_char("java/lang/IllegalArgumentException"));
methodinfo *m;
jfieldID id;
- m = class_resolvemethod(loader_load(utf_new_char ("java/util/Vector")),
+ m = class_resolvemethod(loader_load_sysclass(NULL,utf_new_char ("java/util/Vector")),
utf_new_char("addElement"),
utf_new_char("(Ljava/lang/Object;)V")
);
void throw_classnotfoundexception()
{
+ dolog("throw_classnotfoundexception");
if (!class_java_lang_ClassNotFoundException) {
panic("java.lang.ClassNotFoundException not found. Maybe wrong classpath?");
}
/* throws a ClassNotFoundException */
exceptionptr = native_new_and_init(class_java_lang_ClassNotFoundException);
+ dolog("set exceptionptr");
}
void throw_classnotfoundexception2(utf* classname)
{
+ dolog("throw_classnotfoundexception2");
+ log_plain("Class: "); log_plain_utf(classname); log_nl();
+
if (!class_java_lang_ClassNotFoundException) {
panic("java.lang.ClassNotFoundException not found. Maybe wrong classpath?");
}
/* throws a ClassNotFoundException with message */
exceptionptr = native_new_and_init_string(class_java_lang_ClassNotFoundException,
javastring_new(classname));
+ dolog("set exceptionptr");
}
void throw_linkageerror2(utf* classname)
{
+ dolog("throw_linkageerror2");
+ log_plain("Class: "); log_plain_utf(classname); log_nl();
+
if (!class_java_lang_LinkageError) {
panic("java.lang.LinkageError not found. Maybe wrong classpath?");
}
/* throws a ClassNotFoundException with message */
exceptionptr = native_new_and_init_string(class_java_lang_LinkageError,
javastring_new(classname));
+ dolog("set exceptionptr");
}
java_objectheader *native_new_and_init(classinfo *c)
{
methodinfo *m;
- java_objectheader *o = builtin_new(c); /* create object */
+ java_objectheader *o;
+ /* if c==NULL it is probebly because loader_load failed */
+ if (!c) return exceptionptr;
+
+ o = builtin_new(c); /* create object */
+
/*
printf("native_new_and_init ");
utf_display(c->name);
char logtext[MAXLOGTEXT];
sprintf(logtext, "Warning: class has no instance-initializer: ");
utf_sprint(logtext + strlen(logtext), c->name);
- dolog(logtext);
+ log_text(logtext);
}
return o;
}
java_objectheader *native_new_and_init_string(classinfo *c, java_lang_String *s)
{
methodinfo *m;
- java_objectheader *o = builtin_new(c); /* create object */
+ java_objectheader *o;
+ /* if c==NULL it is probebly because loader_load failed */
+ if (!c) return exceptionptr;
+
+ o = builtin_new(c); /* create object */
+
if (!o) return NULL;
/* find initializer */
char logtext[MAXLOGTEXT];
sprintf(logtext, "Warning: class has no instance-initializer: ");
utf_sprint(logtext + strlen(logtext), c->name);
- dolog(logtext);
+ log_text(logtext);
}
return o;
}