Changes: Joseph Wenninger
- $Id: Constructor.c 951 2004-03-11 17:30:03Z jowenn $
+ $Id: Constructor.c 1042 2004-04-26 17:12:47Z twisti $
*/
if (!parameters) {
if (this->parameterTypes->header.size != 0) {
- (*env)->ThrowNew(env, loader_load(utf_new_char("java/lang/IllegalArgumentException")), "wrong number of arguments");
+ *exceptionptr = new_exception_message(string_java_lang_IllegalArgumentException, "wrong number of arguments");
return 0;
}
} else {
if (this->parameterTypes->header.size != parameters->header.size) {
- (*env)->ThrowNew(env, loader_load(utf_new_char("java/lang/IllegalArgumentException")), "wrong number of arguments");
+ *exceptionptr = new_exception_message(string_java_lang_IllegalArgumentException, "wrong number of arguments");
return 0;
}
}
Changes: Joseph Wenninger
Christian Thalinger
- $Id: Runtime.c 997 2004-03-30 21:49:28Z twisti $
+ $Id: Runtime.c 1042 2004-04-26 17:12:47Z twisti $
*/
proplist[6][1] = utsnamebuf.sysname;
proplist[7][1] = utsnamebuf.release;
- if (!p)
- panic("Java_java_lang_Runtime_insertSystemProperties called with NULL-Argument");
+ if (!p) {
+ *exceptionptr = new_exception(string_java_lang_NullPointerException);
+ return;
+ }
/* search for method to add properties */
m = class_resolvemethod(p->header.vftbl->class,
utf_new_char("(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;")
);
- if (!m)
- panic("Can not find method 'put' for class Properties");
+ if (!m) {
+ *exceptionptr = new_exception_message(string_java_lang_NoSuchMethodError,
+ "java.lang.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;)");
+ return;
+ }
/* add the properties */
for (i = 0; i < activeprops; i++) {
Changes: Joseph Wenninger
- $Id: Thread.c 991 2004-03-29 11:22:34Z stefan $
+ $Id: Thread.c 1042 2004-04-26 17:12:47Z twisti $
*/
/* ThreadGroup of currentThread is not initialized */
t->group = (java_lang_ThreadGroup *)
- native_new_and_init(loader_load(utf_new_char("java/lang/ThreadGroup")));
+ native_new_and_init(class_new(utf_new_char("java/lang/ThreadGroup")));
if (t->group == 0)
log_text("unable to create ThreadGroup");
Changes: Joseph Wenninger
- $Id: VMClass.c 1003 2004-03-30 22:56:04Z twisti $
+ $Id: VMClass.c 1042 2004-04-26 17:12:47Z twisti $
*/
/* create utf string in which '.' is replaced by '/' */
u = javastring_toutf(s, true);
-
- c = loader_load(u);
- if (c == NULL) {
- /* class was not loaded. raise exception */
- if (runverbose)
- log_text("Setting class not found exception");
+ /* create a new class, ... */
+ c = class_new(u);
+
+ /* load, ... */
+ class_load(c);
+
+ /* class was not loaded. raise exception */
+ if (!c->loaded) {
/* there is already an exception (NoClassDefFoundError), but forName()
returns a ClassNotFoundException */
+
+ /* clear exceptionptr, because builtin_new checks for
+ ExceptionInInitializerError */
+ *exceptionptr = NULL;
+
*exceptionptr =
new_exception_javastring(string_java_lang_ClassNotFoundException, s);
return NULL;
}
- /*log_text("Returning class");*/
- use_class_as_object (c);
+ /* link, ... */
+ class_link(c);
+
+ /* ...and initialize it */
+ class_init(c);
+
+ use_class_as_object(c);
return (java_lang_Class *) c;
}
(c->methods[i].name == utf_constr))
public_methods++;
- class_constructor = (classinfo *) loader_load(utf_new_char ("java/lang/reflect/Constructor"));
+ class_constructor = class_new(utf_new_char("java/lang/reflect/Constructor"));
- if (!class_constructor)
- return NULL;
+ if (!class_constructor->loaded)
+ class_load(class_constructor);
+
+ if (!class_constructor->linked)
+ class_link(class_constructor);
array_constructor = builtin_anewarray(public_methods, class_constructor);
int idx;
/* create Field object */
- c = (classinfo *) loader_load(utf_new_char("java/lang/reflect/Field"));
+/* c = (classinfo *) loader_load(utf_new_char("java/lang/reflect/Field")); */
+ c = class_new(utf_new_char("java/lang/reflect/Field"));
o = (java_lang_reflect_Field *) native_new_and_init(c);
/* get fieldinfo entry */
if ((c->fields[i].flags & ACC_PUBLIC) || (!public_only))
public_fields++;
- class_field = loader_load(utf_new_char("java/lang/reflect/Field"));
+/* class_field = loader_load(utf_new_char("java/lang/reflect/Field")); */
+ class_field = class_new(utf_new_char("java/lang/reflect/Field"));
if (!class_field)
return NULL;
java_objectarray *exceptiontypes; /* the exceptions thrown by the method */
methodinfo *m; /* the method to be represented */
- c = (classinfo *) loader_load(utf_new_char("java/lang/reflect/Method"));
+/* c = (classinfo *) loader_load(utf_new_char("java/lang/reflect/Method")); */
+ c = class_new(utf_new_char("java/lang/reflect/Method"));
o = (java_lang_reflect_Method *) native_new_and_init(c);
/* find the method */
utf *utf_constr=utf_new_char("<init>");
utf *utf_clinit=utf_new_char("<clinit>");
+/* class_method = (classinfo*) loader_load(utf_new_char ("java/lang/reflect/Method")); */
+ class_method = class_new(utf_new_char("java/lang/reflect/Method"));
- class_method = (classinfo*) loader_load(utf_new_char ("java/lang/reflect/Method"));
if (!class_method)
return NULL;
/* JOWENN: array classes do not declare methods according to mauve test. It should be considered, if
we should return to my old clone method overriding instead of declaring it as a member function */
- if (Java_java_lang_VMClass_isArray(env,this)) {
+ if (Java_java_lang_VMClass_isArray(env, this)) {
return builtin_anewarray(0, class_method);
}
Changes: Joseph Wenninger
- $Id: VMClassLoader.c 1003 2004-03-30 22:56:04Z twisti $
+ $Id: VMClassLoader.c 1042 2004-04-26 17:12:47Z twisti $
*/
log_text("Java_java_lang_VMClassLoader_defineClass called");
/* call JNI-function to load the class */
- c = (*env)->DefineClass(env, javastring_tochar((java_objectheader*) name), (jobject) this, (const jbyte *) &buf[off], len);
- use_class_as_object (c);
+ c = (*env)->DefineClass(env,
+ javastring_tochar((java_objectheader*) name),
+ (jobject) this,
+ (const jbyte *) &buf[off],
+ len);
+
+ use_class_as_object(c);
return (java_lang_Class *) c;
}
if (u) {
/* get primitive class */
- c = loader_load_sysclass(NULL, u);
+ c = class_new(u);
+ class_load(c);
+ class_init(c);
use_class_as_object(c);
return (java_lang_Class *) c;
*/
JNIEXPORT void JNICALL Java_java_lang_VMClassLoader_resolveClass(JNIEnv *env, jclass clazz, java_lang_Class *par1)
{
- /* class already linked, so return */
+ /* linked the class */
+ if (!clazz->linked)
+ class_link(clazz);
+
return;
}
Changes: Joseph Wenninger
- $Id: VMObject.c 1003 2004-03-30 22:56:04Z twisti $
+ $Id: VMObject.c 1042 2004-04-26 17:12:47Z twisti $
*/
#include <string.h>
#include "jni.h"
#include "builtin.h"
+#include "loader.h"
#include "native.h"
#include "mm/boehm.h"
#include "threads/locks.h"
*/
JNIEXPORT java_lang_Object* JNICALL Java_java_lang_VMObject_clone(JNIEnv *env, jclass clazz, java_lang_Cloneable *this)
{
-/* log_text("Java_java_lang_VMObject_clone called");
- log_utf(((java_objectheader*)this)->vftbl->class->name);
- log_text("starting cloning"); */
classinfo *c;
java_lang_Object *new;
arraydescriptor *desc;
/* We are cloning a non-array */
if (!builtin_instanceof((java_objectheader *) this, class_java_lang_Cloneable)) {
- *exceptionptr = new_exception(string_java_lang_CloneNotSupportedException);
+ *exceptionptr =
+ new_exception(string_java_lang_CloneNotSupportedException);
return NULL;
}
/* XXX should use vftbl */
c = this->header.vftbl->class;
new = (java_lang_Object *) builtin_new(c);
- if (!new) {
- *exceptionptr = new_exception(string_java_lang_OutOfMemoryError);
+
+ if (!new)
return NULL;
- }
memcpy(new, this, c->instancesize);
#if defined(USE_THREADS) && defined(NATIVE_THREADS)
Changes: Christian Thalinger
- $Id: VMString.c 913 2004-02-05 21:23:19Z twisti $
+ $Id: VMString.c 1042 2004-04-26 17:12:47Z twisti $
*/
*/
JNIEXPORT java_lang_String* JNICALL Java_java_lang_VMString_intern(JNIEnv *env, jclass clazz, java_lang_String *this)
{
-/* printf("Java_java_lang_VMString_intern: count=%d offset=%d", this->count, this->offset); */
-/* utf_display(javastring_toutf(this, 0)); */
-/* printf("\n"); */
-/* fflush(stdout); */
-
if (this) {
/* search table so identical strings will get identical pointers */
return (java_lang_String *) literalstring_u2(this->value, this->count, this->offset, true);
Authors: Joseph Wenninger
- $Id: VMThrowable.c 973 2004-03-25 15:19:16Z twisti $
+ $Id: VMThrowable.c 1042 2004-04-26 17:12:47Z twisti $
*/
java_objectarray* generateStackTraceArray(JNIEnv *env,stacktraceelement *source,long size)
{
long resultPos;
- methodinfo *constructor;
- classinfo *class_stacktraceelement;
- java_objectarray *array_stacktraceelement;
- class_stacktraceelement = (classinfo *) loader_load(utf_new_char ("java/lang/StackTraceElement"));
+ methodinfo *m;
+ classinfo *c;
+ java_objectarray *oa;
- if (!class_stacktraceelement)
- return 0;
+ c = class_new(utf_new_char("java/lang/StackTraceElement"));
+
+ if (!c->loaded)
+ class_load(c);
+ if (!c->linked)
+ class_link(c);
- constructor=class_findmethod(class_stacktraceelement,utf_new_char("<init>"),
- utf_new_char("(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Z)V"));
- if (!constructor)
+ m = class_findmethod(c,
+ utf_new_char("<init>"),
+ utf_new_char("(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Z)V"));
+
+ if (!m)
panic("java.lang.StackTraceElement misses needed constructor");
- array_stacktraceelement = builtin_anewarray(size, class_stacktraceelement);
+ oa = builtin_anewarray(size, c);
- if (!array_stacktraceelement)
- return 0;
+ if (!oa)
+ return 0;
/* printf("Should return an array with %ld element(s)\n",size);*/
size--;
for(resultPos=0;size>=0;resultPos++,size--) {
- java_objectheader *element=builtin_new(class_stacktraceelement);
+ java_objectheader *element=builtin_new(c);
if (!element) {
panic("Memory for stack trace element could not be allocated");
}
#warning call constructor once jni is fixed to allow more than three parameters
#endif
#if 0
- (*env)->CallVoidMethod(env,element,constructor,
+ (*env)->CallVoidMethod(env,element,m,
javastring_new(source[size].method->class->sourcefile),
source[size].linenumber,
javastring_new(source[size].method->class->name),
javastring_new(source[size].method->name),
source[size].method->flags & ACC_NATIVE);
#else
- if (!(source[size].method->flags & ACC_NATIVE))setfield_critical(class_stacktraceelement,element,"fileName",
+ if (!(source[size].method->flags & ACC_NATIVE))setfield_critical(c,element,"fileName",
"Ljava/lang/String;", jobject,
(jobject) javastring_new(source[size].method->class->sourcefile));
- setfield_critical(class_stacktraceelement,element,"className", "Ljava/lang/String;", jobject,
+ setfield_critical(c,element,"className", "Ljava/lang/String;", jobject,
(jobject) javastring_new(source[size].method->class->name));
- setfield_critical(class_stacktraceelement,element,"methodName", "Ljava/lang/String;", jobject,
+ setfield_critical(c,element,"methodName", "Ljava/lang/String;", jobject,
(jobject) javastring_new(source[size].method->name));
- setfield_critical(class_stacktraceelement,element,"lineNumber", "I", jint,
+ setfield_critical(c,element,"lineNumber", "I", jint,
(jint) ((source[size].method->flags & ACC_NATIVE) ? -1:(source[size].linenumber)));
- setfield_critical(class_stacktraceelement,element,"isNative", "Z", jboolean,
+ setfield_critical(c,element,"isNative", "Z", jboolean,
(jboolean) ((source[size].method->flags & ACC_NATIVE) ? 1:0));
#endif
- array_stacktraceelement->data[resultPos]=element;
+ oa->data[resultPos]=element;
}
- return array_stacktraceelement;
+ return oa;
}
for (; pos >= 0 && el[pos].method->name == init && el[pos].method->class->name != classname; pos--);
pos--;
if (pos < 0) {
- panic("Invalid stack trace for Throwable.getStackTrace()");
+ log_text("Invalid stack trace for Throwable.getStackTrace()");
}
}
Changes: Joseph Wenninger
- $Id: Constructor.c 951 2004-03-11 17:30:03Z jowenn $
+ $Id: Constructor.c 1042 2004-04-26 17:12:47Z twisti $
*/
if (!parameters) {
if (this->parameterTypes->header.size != 0) {
- (*env)->ThrowNew(env, loader_load(utf_new_char("java/lang/IllegalArgumentException")), "wrong number of arguments");
+ *exceptionptr = new_exception_message(string_java_lang_IllegalArgumentException, "wrong number of arguments");
return 0;
}
} else {
if (this->parameterTypes->header.size != parameters->header.size) {
- (*env)->ThrowNew(env, loader_load(utf_new_char("java/lang/IllegalArgumentException")), "wrong number of arguments");
+ *exceptionptr = new_exception_message(string_java_lang_IllegalArgumentException, "wrong number of arguments");
return 0;
}
}
Changes: Joseph Wenninger
- $Id: VMClass.c 1003 2004-03-30 22:56:04Z twisti $
+ $Id: VMClass.c 1042 2004-04-26 17:12:47Z twisti $
*/
/* create utf string in which '.' is replaced by '/' */
u = javastring_toutf(s, true);
-
- c = loader_load(u);
- if (c == NULL) {
- /* class was not loaded. raise exception */
- if (runverbose)
- log_text("Setting class not found exception");
+ /* create a new class, ... */
+ c = class_new(u);
+
+ /* load, ... */
+ class_load(c);
+
+ /* class was not loaded. raise exception */
+ if (!c->loaded) {
/* there is already an exception (NoClassDefFoundError), but forName()
returns a ClassNotFoundException */
+
+ /* clear exceptionptr, because builtin_new checks for
+ ExceptionInInitializerError */
+ *exceptionptr = NULL;
+
*exceptionptr =
new_exception_javastring(string_java_lang_ClassNotFoundException, s);
return NULL;
}
- /*log_text("Returning class");*/
- use_class_as_object (c);
+ /* link, ... */
+ class_link(c);
+
+ /* ...and initialize it */
+ class_init(c);
+
+ use_class_as_object(c);
return (java_lang_Class *) c;
}
(c->methods[i].name == utf_constr))
public_methods++;
- class_constructor = (classinfo *) loader_load(utf_new_char ("java/lang/reflect/Constructor"));
+ class_constructor = class_new(utf_new_char("java/lang/reflect/Constructor"));
- if (!class_constructor)
- return NULL;
+ if (!class_constructor->loaded)
+ class_load(class_constructor);
+
+ if (!class_constructor->linked)
+ class_link(class_constructor);
array_constructor = builtin_anewarray(public_methods, class_constructor);
int idx;
/* create Field object */
- c = (classinfo *) loader_load(utf_new_char("java/lang/reflect/Field"));
+/* c = (classinfo *) loader_load(utf_new_char("java/lang/reflect/Field")); */
+ c = class_new(utf_new_char("java/lang/reflect/Field"));
o = (java_lang_reflect_Field *) native_new_and_init(c);
/* get fieldinfo entry */
if ((c->fields[i].flags & ACC_PUBLIC) || (!public_only))
public_fields++;
- class_field = loader_load(utf_new_char("java/lang/reflect/Field"));
+/* class_field = loader_load(utf_new_char("java/lang/reflect/Field")); */
+ class_field = class_new(utf_new_char("java/lang/reflect/Field"));
if (!class_field)
return NULL;
java_objectarray *exceptiontypes; /* the exceptions thrown by the method */
methodinfo *m; /* the method to be represented */
- c = (classinfo *) loader_load(utf_new_char("java/lang/reflect/Method"));
+/* c = (classinfo *) loader_load(utf_new_char("java/lang/reflect/Method")); */
+ c = class_new(utf_new_char("java/lang/reflect/Method"));
o = (java_lang_reflect_Method *) native_new_and_init(c);
/* find the method */
utf *utf_constr=utf_new_char("<init>");
utf *utf_clinit=utf_new_char("<clinit>");
+/* class_method = (classinfo*) loader_load(utf_new_char ("java/lang/reflect/Method")); */
+ class_method = class_new(utf_new_char("java/lang/reflect/Method"));
- class_method = (classinfo*) loader_load(utf_new_char ("java/lang/reflect/Method"));
if (!class_method)
return NULL;
/* JOWENN: array classes do not declare methods according to mauve test. It should be considered, if
we should return to my old clone method overriding instead of declaring it as a member function */
- if (Java_java_lang_VMClass_isArray(env,this)) {
+ if (Java_java_lang_VMClass_isArray(env, this)) {
return builtin_anewarray(0, class_method);
}
Changes: Joseph Wenninger
- $Id: VMClassLoader.c 1003 2004-03-30 22:56:04Z twisti $
+ $Id: VMClassLoader.c 1042 2004-04-26 17:12:47Z twisti $
*/
log_text("Java_java_lang_VMClassLoader_defineClass called");
/* call JNI-function to load the class */
- c = (*env)->DefineClass(env, javastring_tochar((java_objectheader*) name), (jobject) this, (const jbyte *) &buf[off], len);
- use_class_as_object (c);
+ c = (*env)->DefineClass(env,
+ javastring_tochar((java_objectheader*) name),
+ (jobject) this,
+ (const jbyte *) &buf[off],
+ len);
+
+ use_class_as_object(c);
return (java_lang_Class *) c;
}
if (u) {
/* get primitive class */
- c = loader_load_sysclass(NULL, u);
+ c = class_new(u);
+ class_load(c);
+ class_init(c);
use_class_as_object(c);
return (java_lang_Class *) c;
*/
JNIEXPORT void JNICALL Java_java_lang_VMClassLoader_resolveClass(JNIEnv *env, jclass clazz, java_lang_Class *par1)
{
- /* class already linked, so return */
+ /* linked the class */
+ if (!clazz->linked)
+ class_link(clazz);
+
return;
}
Changes: Joseph Wenninger
- $Id: VMObject.c 1003 2004-03-30 22:56:04Z twisti $
+ $Id: VMObject.c 1042 2004-04-26 17:12:47Z twisti $
*/
#include <string.h>
#include "jni.h"
#include "builtin.h"
+#include "loader.h"
#include "native.h"
#include "mm/boehm.h"
#include "threads/locks.h"
*/
JNIEXPORT java_lang_Object* JNICALL Java_java_lang_VMObject_clone(JNIEnv *env, jclass clazz, java_lang_Cloneable *this)
{
-/* log_text("Java_java_lang_VMObject_clone called");
- log_utf(((java_objectheader*)this)->vftbl->class->name);
- log_text("starting cloning"); */
classinfo *c;
java_lang_Object *new;
arraydescriptor *desc;
/* We are cloning a non-array */
if (!builtin_instanceof((java_objectheader *) this, class_java_lang_Cloneable)) {
- *exceptionptr = new_exception(string_java_lang_CloneNotSupportedException);
+ *exceptionptr =
+ new_exception(string_java_lang_CloneNotSupportedException);
return NULL;
}
/* XXX should use vftbl */
c = this->header.vftbl->class;
new = (java_lang_Object *) builtin_new(c);
- if (!new) {
- *exceptionptr = new_exception(string_java_lang_OutOfMemoryError);
+
+ if (!new)
return NULL;
- }
memcpy(new, this, c->instancesize);
#if defined(USE_THREADS) && defined(NATIVE_THREADS)
Changes: Joseph Wenninger
Christian Thalinger
- $Id: VMRuntime.c 997 2004-03-30 21:49:28Z twisti $
+ $Id: VMRuntime.c 1042 2004-04-26 17:12:47Z twisti $
*/
proplist[6][1] = utsnamebuf.sysname;
proplist[7][1] = utsnamebuf.release;
- if (!p)
- panic("Java_java_lang_Runtime_insertSystemProperties called with NULL-Argument");
+ if (!p) {
+ *exceptionptr = new_exception(string_java_lang_NullPointerException);
+ return;
+ }
/* search for method to add properties */
m = class_resolvemethod(p->header.vftbl->class,
utf_new_char("(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;")
);
- if (!m)
- panic("Can not find method 'put' for class Properties");
+ if (!m) {
+ *exceptionptr = new_exception_message(string_java_lang_NoSuchMethodError,
+ "java.lang.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;)");
+ return;
+ }
/* add the properties */
for (i = 0; i < activeprops; i++) {
Changes: Christian Thalinger
- $Id: VMString.c 913 2004-02-05 21:23:19Z twisti $
+ $Id: VMString.c 1042 2004-04-26 17:12:47Z twisti $
*/
*/
JNIEXPORT java_lang_String* JNICALL Java_java_lang_VMString_intern(JNIEnv *env, jclass clazz, java_lang_String *this)
{
-/* printf("Java_java_lang_VMString_intern: count=%d offset=%d", this->count, this->offset); */
-/* utf_display(javastring_toutf(this, 0)); */
-/* printf("\n"); */
-/* fflush(stdout); */
-
if (this) {
/* search table so identical strings will get identical pointers */
return (java_lang_String *) literalstring_u2(this->value, this->count, this->offset, true);
Changes: Joseph Wenninger
- $Id: VMThread.c 991 2004-03-29 11:22:34Z stefan $
+ $Id: VMThread.c 1042 2004-04-26 17:12:47Z twisti $
*/
/* ThreadGroup of currentThread is not initialized */
t->group = (java_lang_ThreadGroup *)
- native_new_and_init(loader_load(utf_new_char("java/lang/ThreadGroup")));
+ native_new_and_init(class_new(utf_new_char("java/lang/ThreadGroup")));
if (t->group == 0)
log_text("unable to create ThreadGroup");
Authors: Joseph Wenninger
- $Id: VMThrowable.c 973 2004-03-25 15:19:16Z twisti $
+ $Id: VMThrowable.c 1042 2004-04-26 17:12:47Z twisti $
*/
java_objectarray* generateStackTraceArray(JNIEnv *env,stacktraceelement *source,long size)
{
long resultPos;
- methodinfo *constructor;
- classinfo *class_stacktraceelement;
- java_objectarray *array_stacktraceelement;
- class_stacktraceelement = (classinfo *) loader_load(utf_new_char ("java/lang/StackTraceElement"));
+ methodinfo *m;
+ classinfo *c;
+ java_objectarray *oa;
- if (!class_stacktraceelement)
- return 0;
+ c = class_new(utf_new_char("java/lang/StackTraceElement"));
+
+ if (!c->loaded)
+ class_load(c);
+ if (!c->linked)
+ class_link(c);
- constructor=class_findmethod(class_stacktraceelement,utf_new_char("<init>"),
- utf_new_char("(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Z)V"));
- if (!constructor)
+ m = class_findmethod(c,
+ utf_new_char("<init>"),
+ utf_new_char("(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Z)V"));
+
+ if (!m)
panic("java.lang.StackTraceElement misses needed constructor");
- array_stacktraceelement = builtin_anewarray(size, class_stacktraceelement);
+ oa = builtin_anewarray(size, c);
- if (!array_stacktraceelement)
- return 0;
+ if (!oa)
+ return 0;
/* printf("Should return an array with %ld element(s)\n",size);*/
size--;
for(resultPos=0;size>=0;resultPos++,size--) {
- java_objectheader *element=builtin_new(class_stacktraceelement);
+ java_objectheader *element=builtin_new(c);
if (!element) {
panic("Memory for stack trace element could not be allocated");
}
#warning call constructor once jni is fixed to allow more than three parameters
#endif
#if 0
- (*env)->CallVoidMethod(env,element,constructor,
+ (*env)->CallVoidMethod(env,element,m,
javastring_new(source[size].method->class->sourcefile),
source[size].linenumber,
javastring_new(source[size].method->class->name),
javastring_new(source[size].method->name),
source[size].method->flags & ACC_NATIVE);
#else
- if (!(source[size].method->flags & ACC_NATIVE))setfield_critical(class_stacktraceelement,element,"fileName",
+ if (!(source[size].method->flags & ACC_NATIVE))setfield_critical(c,element,"fileName",
"Ljava/lang/String;", jobject,
(jobject) javastring_new(source[size].method->class->sourcefile));
- setfield_critical(class_stacktraceelement,element,"className", "Ljava/lang/String;", jobject,
+ setfield_critical(c,element,"className", "Ljava/lang/String;", jobject,
(jobject) javastring_new(source[size].method->class->name));
- setfield_critical(class_stacktraceelement,element,"methodName", "Ljava/lang/String;", jobject,
+ setfield_critical(c,element,"methodName", "Ljava/lang/String;", jobject,
(jobject) javastring_new(source[size].method->name));
- setfield_critical(class_stacktraceelement,element,"lineNumber", "I", jint,
+ setfield_critical(c,element,"lineNumber", "I", jint,
(jint) ((source[size].method->flags & ACC_NATIVE) ? -1:(source[size].linenumber)));
- setfield_critical(class_stacktraceelement,element,"isNative", "Z", jboolean,
+ setfield_critical(c,element,"isNative", "Z", jboolean,
(jboolean) ((source[size].method->flags & ACC_NATIVE) ? 1:0));
#endif
- array_stacktraceelement->data[resultPos]=element;
+ oa->data[resultPos]=element;
}
- return array_stacktraceelement;
+ return oa;
}
for (; pos >= 0 && el[pos].method->name == init && el[pos].method->class->name != classname; pos--);
pos--;
if (pos < 0) {
- panic("Invalid stack trace for Throwable.getStackTrace()");
+ log_text("Invalid stack trace for Throwable.getStackTrace()");
}
}