PatchSet 4074 
Date: 2003/09/28 22:30:18
Author: dalibor
Branch: HEAD
Tag: (none) 
Log:
Refactored interpreter exception handling into separate functions

Members: 
        ChangeLog:1.1669->1.1670 
        kaffe/kaffevm/exception.h:1.22->1.23 
        kaffe/kaffevm/support.c:1.60->1.61 
        kaffe/kaffevm/intrp/machine.c:1.32->1.33 
        kaffe/kaffevm/intrp/machine.h:1.8->1.9 

Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.1669 kaffe/ChangeLog:1.1670
--- kaffe/ChangeLog:1.1669      Sun Sep 28 20:07:15 2003
+++ kaffe/ChangeLog     Sun Sep 28 22:30:18 2003
@@ -1,3 +1,22 @@
+2003-09-28  Dalibor Topic <[EMAIL PROTECTED]>
+
+       * kaffe/kaffevm/exception.h:
+       {INTERPRETER] removed vmExcept_setIntrpFrame, moved to
+       intrp/machine.c and renamed to setFrame.
+
+       * kaffe/kaffevm/support.c:
+       (callMethodA, callMethodV)[INTERPRETER] Call new functions in
+       machine.c.
+       
+       * kaffe/kaffevm/intrp/machine.c:
+       (setFrame, setupExceptionHandling, cleanupExceptionHandling) New
+       functions.
+       (virtualMachine) Call the new functions.
+
+       * kaffe/kaffevm/intrp/machine.h:
+       Added prototypes for setupExceptionHandling,
+       cleanupExceptionHandling.
+
 2003-09-28  Guilhem Lavaux <[EMAIL PROTECTED]>
 
        * libraries/javalib/java/nio/ByteBufferHelper.java: added missing
Index: kaffe/kaffe/kaffevm/exception.h
diff -u kaffe/kaffe/kaffevm/exception.h:1.22 kaffe/kaffe/kaffevm/exception.h:1.23
--- kaffe/kaffe/kaffevm/exception.h:1.22        Sun Jul 27 16:53:46 2003
+++ kaffe/kaffe/kaffevm/exception.h     Sun Sep 28 22:30:19 2003
@@ -33,6 +33,7 @@
 struct Hjava_lang_Class;
 struct Hjava_lang_Object;
 struct Hjava_lang_Throwable;
+
 struct _methods;
 struct _errorInfo;
 
@@ -146,19 +147,6 @@
 {
        JTHREAD_LONGJMP(frame->jbuf, 1);
 }
-
-#if defined(INTERPRETER)
-static inline void 
-vmExcept_setIntrpFrame(VmExceptHandler* eh, u4 pc, struct _methods* meth, struct 
Hjava_lang_Object* syncobj)
-{
-       assert(eh);
-       assert(meth);
-       
-       eh->meth = meth;
-       eh->frame.intrp.pc = pc;
-       eh->frame.intrp.syncobj = syncobj;
-}
-#endif
 
 static inline void 
 vmExcept_setSyncObj(VmExceptHandler* eh, struct Hjava_lang_Object* syncobj)
Index: kaffe/kaffe/kaffevm/support.c
diff -u kaffe/kaffe/kaffevm/support.c:1.60 kaffe/kaffe/kaffevm/support.c:1.61
--- kaffe/kaffe/kaffevm/support.c:1.60  Sun Aug 31 22:09:02 2003
+++ kaffe/kaffe/kaffevm/support.c       Sun Sep 28 22:30:19 2003
@@ -623,11 +623,7 @@
                        lockObject(syncobj);
                }
 
-               vmExcept_setIntrpFrame(&mjbuf, 0, meth, syncobj);
-               if (tid != NULL && unhand(tid)->PrivateInfo != 0) {
-                       mjbuf.prev = (VmExceptHandler*)unhand(tid)->exceptPtr;
-                       unhand(tid)->exceptPtr = (struct Hkaffe_util_Ptr*)&mjbuf;
-               }
+               setupExceptionHandling(&mjbuf, meth, syncobj, tid);
 
                /* Make the call - system dependent */
                sysdepCallMethod(&call);
@@ -636,9 +632,7 @@
                        unlockObject(syncobj);
                }
 
-               if (tid != NULL && unhand(tid)->PrivateInfo != 0) {
-                       unhand(tid)->exceptPtr = (struct Hkaffe_util_Ptr*)mjbuf.prev;
-               }
+               cleanupExceptionHandling(&mjbuf, tid);
        }
 #endif
        if (!promoted && call.retsize == 1) {
@@ -843,11 +837,7 @@
                        lockObject(syncobj);
                }
 
-               vmExcept_setIntrpFrame(&mjbuf, 0, meth, syncobj);
-               if (tid != NULL && unhand(tid)->PrivateInfo != 0) {
-                       mjbuf.prev = (VmExceptHandler*)unhand(tid)->exceptPtr;
-                       unhand(tid)->exceptPtr = (struct Hkaffe_util_Ptr*)&mjbuf;
-               }
+               setupExceptionHandling(&mjbuf, meth, syncobj, tid);
 
                /* Make the call - system dependent */
                sysdepCallMethod(&call);
@@ -856,9 +846,7 @@
                        unlockObject(syncobj);
                }
 
-               if (tid != NULL && unhand(tid)->PrivateInfo != 0) {
-                       unhand(tid)->exceptPtr = (struct Hkaffe_util_Ptr*)mjbuf.prev;
-               }
+               cleanupExceptionHandling(&mjbuf, tid);
        }
 #endif
 }
Index: kaffe/kaffe/kaffevm/intrp/machine.c
diff -u kaffe/kaffe/kaffevm/intrp/machine.c:1.32 
kaffe/kaffe/kaffevm/intrp/machine.c:1.33
--- kaffe/kaffe/kaffevm/intrp/machine.c:1.32    Sun Jul 27 16:53:47 2003
+++ kaffe/kaffe/kaffevm/intrp/machine.c Sun Sep 28 22:30:20 2003
@@ -168,11 +168,7 @@
        /* If we have any exception handlers we must prepare to catch them.
         * We also need to catch if we are synchronised (so we can release it).
         */
-       vmExcept_setIntrpFrame(&mjbuf, 0, meth, mobj);
-       if (tid != NULL && unhand(tid)->PrivateInfo != 0) {
-               mjbuf.prev = (VmExceptHandler*)unhand(tid)->exceptPtr;
-               unhand(tid)->exceptPtr = (struct Hkaffe_util_Ptr*)&mjbuf;
-       }
+       setupExceptionHandling(&mjbuf, meth, mobj, tid);
 
        if (meth->exception_table != 0) {
                if (JTHREAD_SETJMP(mjbuf.jbuf) != 0) {
@@ -235,9 +231,8 @@
        if (mobj != 0) {
                locks_internal_unlockMutex(&mobj->lock, &mjbuf, 0); 
        }
-       if (tid != NULL && unhand(tid)->PrivateInfo != 0) {
-               unhand(tid)->exceptPtr = (struct Hkaffe_util_Ptr*)mjbuf.prev;
-       }
+
+       cleanupExceptionHandling(&mjbuf, tid);
 
 RDBG(  dprintf("Returning from method %s%s.\n", meth->name->data, METHOD_SIGD(meth)); 
)
 }
@@ -290,4 +285,39 @@
 getEngine()
 {
        return "kaffe.intr";
+}
+
+static inline void 
+setFrame(VmExceptHandler* eh,
+        struct _methods* meth,
+        struct Hjava_lang_Object* syncobj)
+{
+       assert(eh);
+       assert(meth);
+       
+       eh->meth = meth;
+       eh->frame.intrp.pc = 0;
+       eh->frame.intrp.syncobj = syncobj;
+}
+
+void
+setupExceptionHandling(VmExceptHandler* eh,
+                      struct _methods* meth,
+                      struct Hjava_lang_Object* syncobj,
+                      struct Hjava_lang_Thread* tid)
+{
+  setFrame(eh, meth, syncobj);
+  if (tid != NULL && unhand(tid)->PrivateInfo != 0) {
+    eh->prev = (VmExceptHandler*)unhand(tid)->exceptPtr;
+    unhand(tid)->exceptPtr = (struct Hkaffe_util_Ptr*)eh;
+  }
+}
+
+void
+cleanupExceptionHandling(VmExceptHandler* eh,
+                        struct Hjava_lang_Thread* tid)
+{
+  if (tid != NULL && unhand(tid)->PrivateInfo != 0) {
+    unhand(tid)->exceptPtr = (struct Hkaffe_util_Ptr*)eh->prev;
+  }
 }
Index: kaffe/kaffe/kaffevm/intrp/machine.h
diff -u kaffe/kaffe/kaffevm/intrp/machine.h:1.8 kaffe/kaffe/kaffevm/intrp/machine.h:1.9
--- kaffe/kaffe/kaffevm/intrp/machine.h:1.8     Thu Aug 15 11:11:11 2002
+++ kaffe/kaffe/kaffevm/intrp/machine.h Sun Sep 28 22:30:20 2003
@@ -110,5 +110,7 @@
 struct _slots;
 struct Hjava_lang_Thread;
 void virtualMachine(struct _methods*, struct _slots*, struct _slots*, struct 
Hjava_lang_Thread*);
+void setupExceptionHandling(VmExceptHandler* eh, struct _methods* meth, struct 
Hjava_lang_Object* syncobj, struct Hjava_lang_Thread* tid);
+void cleanupExceptionHandling(VmExceptHandler* eh, struct Hjava_lang_Thread* tid);
 
 #endif

_______________________________________________
kaffe mailing list
[EMAIL PROTECTED]
http://kaffe.org/cgi-bin/mailman/listinfo/kaffe

Reply via email to