return (m);
}
+_Jv_Utf8Const *
+_Jv_makeUtf8Const (jstring string)
+{
+ jint hash = string->hashCode ();
+ jint len = _Jv_GetStringUTFLength (string);
+
+ Utf8Const* m = (Utf8Const*)
+ _Jv_AllocBytesChecked (sizeof(Utf8Const) + len + 1);
+
+ m->hash = hash;
+ m->length = len;
+
+ _Jv_GetStringUTFRegion (string, 0, string->length (), m->data);
+ m->data[len] = 0;
+
+ return m;
+}
+
\f
#ifdef DEBUG
JvThrow (no_memory);
size_t size = count * sizeof (jobject) + sizeof (__JArray);
- jclass clas = _Jv_FindArrayClass (elementClass);
+
+ // FIXME: second argument should be "current loader" //
+ jclass clas = _Jv_FindArrayClass (elementClass, 0);
+
jobjectArray obj = (jobjectArray) _Jv_AllocArray (size);
if (! obj)
JvThrow (no_memory);
arr->length = count;
// Note that we assume we are given zeroed memory by the allocator.
- jclass klass = _Jv_FindArrayClass (eltype);
+ jclass klass = _Jv_FindArrayClass (eltype, 0);
// Set the vtbl last to avoid problems if the GC happens during the
// window in this function between the allocation and this
// assignment.
;
_Jv_Utf8Const *name = _Jv_makeUtf8Const (&sig[1], i - 1);
return _Jv_FindClass (name, loader);
+
}
case '[':
- return _Jv_FindArrayClass (_Jv_FindClassFromSignature (&sig[1], loader));
+ return _Jv_FindArrayClass (_Jv_FindClassFromSignature (&sig[1], loader),
+ loader);
}
JvFail ("couldn't understand class signature");
return NULL; // Placate compiler.
java::lang::Runtime::getRuntime ()->exit (0);
}
+void
+_Jv_RunMain (const char *class_name, int argc, const char **argv)
+{
+ INIT_SEGV;
+#ifdef HANDLE_FPE
+ INIT_FPE;
+#else
+ arithexception = new java::lang::ArithmeticException
+ (JvNewStringLatin1 ("/ by zero"));
+#endif
+
+ no_memory = new java::lang::OutOfMemoryError;
+
+#ifdef USE_LTDL
+ LTDL_SET_PRELOADED_SYMBOLS ();
+#endif
+
+ arg_vec = JvConvertArgv (argc - 1, argv + 1);
+ main_group = new java::lang::ThreadGroup (23);
+ main_thread = new java::lang::FirstThread (main_group,
+ JvNewStringLatin1 (class_name),
+ arg_vec);
+ main_thread->start();
+ _Jv_ThreadWait ();
+
+ java::lang::Runtime::getRuntime ()->exit (0);
+}
+
+
\f
void *
if (divisor == 0)
_Jv_Throw (arithexception);
- if (dividend == 0x80000000L && divisor == -1)
+ if (dividend == (jint) 0x80000000L && divisor == -1)
return dividend;
return dividend / divisor;
if (divisor == 0)
_Jv_Throw (arithexception);
- if (dividend == 0x80000000L && divisor == -1)
+ if (dividend == (jint) 0x80000000L && divisor == -1)
return 0;
return dividend % divisor;
if (divisor == 0)
_Jv_Throw (arithexception);
- if (dividend == 0x8000000000000000LL && divisor == -1)
+ if (dividend == (jlong) 0x8000000000000000LL && divisor == -1)
return dividend;
return dividend / divisor;
if (divisor == 0)
_Jv_Throw (arithexception);
- if (dividend == 0x8000000000000000LL && divisor == -1)
+ if (dividend == (jlong) 0x8000000000000000LL && divisor == -1)
return 0;
return dividend % divisor;
}
+
+
+
+
+
+