diff options
author | green <green@138bc75d-0d04-0410-961f-82ee72b054a4> | 1999-08-08 14:06:23 +0000 |
---|---|---|
committer | green <green@138bc75d-0d04-0410-961f-82ee72b054a4> | 1999-08-08 14:06:23 +0000 |
commit | 9a6624c49770e9b5e630a7c51eb0a13002d9df83 (patch) | |
tree | 277498eeeff558237a9cd88b0ea8b3788b31d645 /libjava/prims.cc | |
parent | 47c5fab6136c7525f4abe013644d7d20570d1b94 (diff) | |
download | gcc-9a6624c49770e9b5e630a7c51eb0a13002d9df83.tar.gz |
1999-08-09 Anthony Green <green@cygnus.com>
* gij.cc: New file.
* include/config.h.in: Rebuilt.
* acconfig.h: Add INTERPRETER.
* configure: Rebuilt.
* Makefile.in: Rebuilt.
* Makefile.am (libffi_files): Identify the libffi object files for
inclusion in libgcj.
(LIBFFIINCS): Define.
* interpret.cc (gnu::gcj::runtime::MethodInvocation::continue1):
Dummy definition for configurations without an interpreter.
* java/net/natPlainSocketImpl.cc (getOption): Disamiguate call to
java::lang::Boolean constructor.
* include/java-interp.h: Always include java-cpool.h.
* java/lang/natClassLoader.cc (getVMClassLoader0): Always return 0
when INTERPRETER not defined.
* java/lang/Class.h (finalize): Define.
* gnu/gcj/util/path/DirectoryPathEntry.java (getURL): Catch
IOException from File.getCanonicalPath.
(getStream): Likewise.
* NEWS: More news.
* THANKS: More thanks.
1999-08-09 Kresten Krab Thorup <krab@gnu.org>
* resolve.cc (get_ffi_type_from_signature): Generate uint16 for
jchar type.
(_Jv_PrepareClass): Allow non-abstract classes to
have abstract subclasses.
(_Jv_ResolvePoolEntry): Revert subclass check for protected
fields and methods.
* interpret.cc (continue1/perform_invoke): Don't sign extend
uint16 return val.
(continue1/lshl,lshr): Push long, not int.
(continue1/ulshr): Use UINT64, not long long.
* defineclass.cc (handleFieldsEnd): Handle case when all fields
are static.
* java/lang/natClass.cc (forName): Add call to _Jv_InitClass.
* java/lang/FirstThread.java (run): Add top-level exception
handler.
(run0): Renamed from run.
1999-08-08 Kresten Krab Thorup <krab@gnu.org>
* configure.in (--with-interpreter): Added.
* include/config.h.in (INTERPRETER): Added.
* java/lang/ClassLoader.java: File replaced.
* java/lang/VMClassLoader.java: New file.
* java/lang/natClassLoader.cc: New file.
* gnu/gcj/runtime/MethodInvocation.java: New file.
* gnu/gcj/util/path/SearchPath.java: New file.
* gnu/gcj/util/path/PathEntry.java: New file.
* gnu/gcj/util/path/DirectoryPathEntry.java: New file.
* gnu/gcj/util/path/ZipPathEntry.java: New file.
* gnu/gcj/util/path/URLPathEntry.java: New file.
* gnu/gcj/util/path/CacheEntry.java: New file.
* include/java-interp.h: New file.
* include/java-cpool.h: New file.
* include/java-insns.h: New file.
* defineclass.cc: New file.
* interpret.cc: New file.
* resolve.cc: New file.
* java/lang/natClass.cc (loaded_classes, _Jv_RegisterClass,
_Jv_RegisterClasses, _Jv_FindClassInCache, _Jv_FindClass,
_Jv_NewClass, _Jv_FindArrayClass): Moved to natClassLoader.cc.
(finalize): New.
(STATE_NOTHING, STATE_RESOLVED, STATE_IN_PROGRESS, STATE_DONE,
STATE_ERROR): Moved to java/lang/Class.h and renamed with JV_
prefix.
(initializeClass): Use new JV_ prefixed names. Also, call
ClassLoader::resolveClass instead of _Jv_ResolveClass.
* java/lang/Class.h (JV_STATE_PRELOADING, JV_STATE_LOADING,
JV_STATE_LOADED, JV_STATE_COMPILED, JV_STATE_PREPARED,
JV_STATE_LINKED): New.
(_Jv_WaitForState, _Jv_RegisterInitiatingLoader,
_Jv_UnregisterClass, _Jv_InternClassStrings): New friends.
(_Jv_IsInterpretedClass, _Jv_InitField, _Jv_LookupDeclaredMethod,
_Jv_DetermineVTableIndex, _Jv_ResolvePoolEntry, _Jv_PrepareClass,
_Jv_ClassReader, _Jv_InterpClass, _Jv_InterpMethod,
_Jv_InterpMethodInvocation): New friends for interpreter.
(finalize): New.
(CONSTANT_Class, CONSTANT_String, etc.): Moved to
include/java-cpool.h and renamed with JV_ prefix.
* include/jvm.h (_Jv_makeUtf8Const, _Jv_makeUtf8TypeConst): New
decls.
(_Jv_UnregisterClass): New decl.
* java/lang/natClassLoader.cc (_Jv_FindArrayClass): Added
class loader argument.
(_Jv_FindClass): Use class loader.
* prims.cc (_Jv_makeUtf8Const): New function.
(_Jv_NewObjectArray): Change use of _Jv_FindArrayClass.
(_Jv_NewPrimArray): Ditto.
(_Jv_FindClassFromSignature): Ditto.
* java/lang/reflect/natArray.cc (newInstance): Ditto.
* java/lang/reflect/natMethod.cc (getType): Ditto.
* include/java-field.h (_Jv_Field::isRef): Make robust for
non-resolved contexts.
* boehm.cc (_Jv_MarkObj): Mark interpreter-related fields.
Also, don't mark class->next field.
* java/lang/VirtualMachineError.java: Added FIXME note.
* configure.in (INTERPSPEC): New spec.
* libgcj.spec.in: Added INTERPSPEC.
* Makefile.am: Added gcjh friends for java/lang/VMClassLoader and
gnu/gcj/runtime/MethodInvocation.
(libgcj_la_SOURCES): Added resolve.cc defineclass.cc interpret.cc.
(ordinary_java_source_files): Added above mentioned java classes.
* configure: Rebuilt.
* Makefile.in: Rebuilt.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@28597 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/prims.cc')
-rw-r--r-- | libjava/prims.cc | 61 |
1 files changed, 51 insertions, 10 deletions
diff --git a/libjava/prims.cc b/libjava/prims.cc index c26c2996a21..90fd96de9f3 100644 --- a/libjava/prims.cc +++ b/libjava/prims.cc @@ -180,6 +180,24 @@ _Jv_makeUtf8Const (char* s, int len) 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; +} + #ifdef DEBUG @@ -298,7 +316,10 @@ _Jv_NewObjectArray (jsize count, jclass elementClass, jobject init) 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); @@ -338,7 +359,7 @@ _Jv_NewPrimArray (jclass eltype, jint count) 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. @@ -531,9 +552,11 @@ _Jv_FindClassFromSignature (char *sig, java::lang::ClassLoader *loader) ; _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. @@ -588,9 +611,20 @@ JvRunMain (jclass klass, int argc, const char **argv) 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, klass, arg_vec); + if (klass == NULL) + { + arg_vec = JvConvertArgv (argc - 2, argv + 2); + main_group = new java::lang::ThreadGroup (23); + main_thread = new java::lang::FirstThread (main_group, + JvNewStringLatin1 (argv[1]), + arg_vec); + } + else + { + arg_vec = JvConvertArgv (argc - 1, argv + 1); + main_group = new java::lang::ThreadGroup (23); + main_thread = new java::lang::FirstThread (main_group, klass, arg_vec); + } main_thread->start(); _Jv_ThreadWait (); @@ -598,6 +632,7 @@ JvRunMain (jclass klass, int argc, const char **argv) java::lang::Runtime::getRuntime ()->exit (0); } + void * @@ -630,7 +665,7 @@ _Jv_divI (jint dividend, jint divisor) if (divisor == 0) _Jv_Throw (arithexception); - if (dividend == 0x80000000L && divisor == -1) + if (dividend == (jint) 0x80000000L && divisor == -1) return dividend; return dividend / divisor; @@ -642,7 +677,7 @@ _Jv_remI (jint dividend, jint divisor) if (divisor == 0) _Jv_Throw (arithexception); - if (dividend == 0x80000000L && divisor == -1) + if (dividend == (jint) 0x80000000L && divisor == -1) return 0; return dividend % divisor; @@ -654,7 +689,7 @@ _Jv_divJ (jlong dividend, jlong divisor) if (divisor == 0) _Jv_Throw (arithexception); - if (dividend == 0x8000000000000000LL && divisor == -1) + if (dividend == (jlong) 0x8000000000000000LL && divisor == -1) return dividend; return dividend / divisor; @@ -666,9 +701,15 @@ _Jv_remJ (jlong dividend, jlong divisor) if (divisor == 0) _Jv_Throw (arithexception); - if (dividend == 0x8000000000000000LL && divisor == -1) + if (dividend == (jlong) 0x8000000000000000LL && divisor == -1) return 0; return dividend % divisor; } + + + + + + |