diff options
author | Tom Tromey <tromey@cygnus.com> | 2000-03-02 20:25:20 +0000 |
---|---|---|
committer | Tom Tromey <tromey@gcc.gnu.org> | 2000-03-02 20:25:20 +0000 |
commit | b099f07de92d7b228ff662711b148addf4b2b115 (patch) | |
tree | dd49bb49b56ee51fa4bbd2a20cc08ae6eefa6306 /libjava/java/lang/natClass.cc | |
parent | c45da1ca925d67685ca633b48a4ca1ec44dfaca1 (diff) | |
download | gcc-b099f07de92d7b228ff662711b148addf4b2b115.zip gcc-b099f07de92d7b228ff662711b148addf4b2b115.tar.gz gcc-b099f07de92d7b228ff662711b148addf4b2b115.tar.bz2 |
java-interp.h: Don't include MethodInvocation.h.
* include/java-interp.h: Don't include MethodInvocation.h.
(class _Jv_InterpMethod): Don't make MethodInvocation a friend.
* Makefile.in: Rebuilt.
* Makefile.am (gnu/gcj/runtime/MethodInvocation.h): Removed.
(ordinary_java_source_files): Don't mention
MethodInvocation.java.
* gnu/gcj/runtime/MethodInvocation.java: Removed.
* interpret.cc (MethodInvocation::continue1): Removed.
(run): Handle exceptions here.
* java/lang/ClassLoader.java (defineClass1, defineClass2):
Removed.
* java/lang/natClassLoader.cc (defineClass0): Catch exceptions
here.
(defineClass2): Removed.
* java/lang/reflect/Method.java (hack_trampoline, hack_call):
Removed.
* java/lang/reflect/natMethod.cc (_Jv_CallAnyMethodA): Catch
exceptions here.
(hack_call): Removed.
* java/lang/Class.h (Class): Removed hackRunInitializers,
hackTrampoline.
* java/lang/natClass.cc (hackRunInitializers): Removed.
(initializeClass): Catch exceptions here.
Include ExceptionInInitializerError.h.
* java/lang/Class.java (hackTrampoline, hackRunInitializers):
Removed.
* java/lang/Object.h (Object): Don't mention hack12_6.
* java/lang/natObject.cc (_Jv_FinalizeObject): Catch exceptions
here.
* java/lang/Object.java (hack12_6): Removed.
* java/lang/natThread.cc (run_): Renamed. Catch exceptions here.
(start): Use run_, not run__.
* java/lang/Thread.java (run_): Renamed from run__; old run_
removed.
* jni.cc (_Jv_JNI_FindClass): Handle exceptions.
(_Jv_JNI_EnsureLocalCapacity): Likewise.
(_Jv_JNI_DefineClass): Likewise.
(_Jv_JNI_ThrowNew): Likewise.
(_Jv_JNI_AllocObject): Likewise.
(_Jv_JNI_GetAnyMethodID): Likewise.
(_Jv_JNI_CallAnyMethodV): Likewise.
(_Jv_JNI_CallAnyMethodA): Likewise.
(_Jv_JNI_CallAnyVoidMethodV): Likewise.
(_Jv_JNI_CallAnyVoidMethodA): Likewise.
(_Jv_JNI_GetAnyFieldID): Likewise.
(_Jv_JNI_NewString): Likewise.
(_Jv_JNI_NewStringUTF): Likewise.
(_Jv_JNI_GetStringUTFChars): Likewise.
(_Jv_JNI_NewObjectArray): Likewise.
(_Jv_JNI_NewPrimitiveArray): Likewise.
(_Jv_JNI_GetPrimitiveArrayRegion): Likewise.
(_Jv_JNI_GetStringRegion): Likewise.
(_Jv_JNI_GetStringUTFRegion): Likewise.
(_Jv_JNI_SetPrimitiveArrayRegion): Likewise.
(_Jv_JNI_MonitorEnter): Likewise.
(_Jv_JNI_MonitorExit): Likewise.
(_Jv_JNI_ToReflectedField): Likewise.
(_Jv_JNI_ToReflectedMethod): Likewise.
(_Jv_JNI_RegisterNatives): Likewise.
(_Jv_JNI_AttachCurrentThread): Likewise.
(_Jv_JNI_DestroyJavaVM): Likewise.
From-SVN: r32294
Diffstat (limited to 'libjava/java/lang/natClass.cc')
-rw-r--r-- | libjava/java/lang/natClass.cc | 57 |
1 files changed, 28 insertions, 29 deletions
diff --git a/libjava/java/lang/natClass.cc b/libjava/java/lang/natClass.cc index 882fadd..42af715 100644 --- a/libjava/java/lang/natClass.cc +++ b/libjava/java/lang/natClass.cc @@ -27,6 +27,7 @@ details. */ #include <java/lang/reflect/Constructor.h> #include <java/lang/AbstractMethodError.h> #include <java/lang/ClassNotFoundException.h> +#include <java/lang/ExceptionInInitializerError.h> #include <java/lang/IllegalAccessException.h> #include <java/lang/IllegalAccessError.h> #include <java/lang/IncompatibleClassChangeError.h> @@ -690,15 +691,6 @@ java::lang::Class::finalize (void) #endif } -// FIXME. -void -java::lang::Class::hackRunInitializers (void) -{ - _Jv_Method *meth = _Jv_GetMethodLocal (this, clinit_name, void_signature); - if (meth) - ((void (*) (void)) meth->ncode) (); -} - // This implements the initialization process for a class. From Spec // section 12.4.2. void @@ -764,46 +756,53 @@ java::lang::Class::initializeClass (void) // Step 7. if (! isInterface () && superclass) { - // FIXME: We can't currently catch a Java exception in C++ code. - // So instead we call a Java trampoline. It returns an - // exception, or null. - jobject except = superclass->hackTrampoline(0, NULL); - if (except) + try + { + superclass->initializeClass (); + } + catch (java::lang::Throwable *except) { // Caught an exception. _Jv_MonitorEnter (this); state = JV_STATE_ERROR; notifyAll (); _Jv_MonitorExit (this); - JvThrow (except); + throw except; } } - // Step 8. - // FIXME: once again we have to go through a trampoline. - java::lang::Throwable *except = hackTrampoline (1, NULL); - - // Steps 9, 10, 11. - if (! except) + // Steps 8, 9, 10, 11. + try { - _Jv_MonitorEnter (this); - state = JV_STATE_DONE; + _Jv_Method *meth = _Jv_GetMethodLocal (this, clinit_name, + void_signature); + if (meth) + ((void (*) (void)) meth->ncode) (); } - else + catch (java::lang::Throwable *except) { if (! ErrorClass.isInstance(except)) { - // Once again we must use the trampoline. In this case we - // have to detect an OutOfMemoryError. - except = hackTrampoline(2, except); + try + { + except = new ExceptionInInitializerError (except); + } + catch (java::lang::Throwable *t) + { + except = t; + } } _Jv_MonitorEnter (this); state = JV_STATE_ERROR; + notifyAll (); + _Jv_MonitorExit (this); + JvThrow (except); } + + _Jv_MonitorEnter (this); + state = JV_STATE_DONE; notifyAll (); _Jv_MonitorExit (this); - if (except) - JvThrow (except); } |