OSDN Git Service

2007-02-06 Kyle Galloway <kgallowa@redhat.com>
authorkgallowa <kgallowa@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 8 Feb 2007 18:01:56 +0000 (18:01 +0000)
committerkgallowa <kgallowa@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 8 Feb 2007 18:01:56 +0000 (18:01 +0000)
    * include/java-interp.h (_Jv_InterpFrame): obj_ptr field added
    to hold "this" pointer for frame.
    (_Jv_InterpFrame::get_this_ptr): New method.
    * interpret-run.cc: Copy the "this" pointer into obj_ptr.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@121717 138bc75d-0d04-0410-961f-82ee72b054a4

libjava/ChangeLog
libjava/include/java-interp.h
libjava/interpret-run.cc

index d99393b..e3fc132 100644 (file)
@@ -1,3 +1,10 @@
+2007-02-07  Kyle Galloway  <kgallowa@redhat.com>
+
+    * include/java-interp.h (_Jv_InterpFrame): obj_ptr field added
+    to hold "this" pointer for frame.
+    (_Jv_InterpFrame::get_this_ptr): New method.
+    * interpret-run.cc: Copy the "this" pointer into obj_ptr.
+
 2007-02-07  Keith Seitz  <keiths@redhat.com>
 
        * include/java-interp.h (_Jv_Frame::depth):
 2007-02-07  Keith Seitz  <keiths@redhat.com>
 
        * include/java-interp.h (_Jv_Frame::depth):
index ce2fac2..2b3ae7c 100644 (file)
@@ -387,6 +387,9 @@ public:
   _Jv_word *locals;
   char *locals_type;
 
   _Jv_word *locals;
   char *locals_type;
 
+  // Object pointer for this frame ("this")
+  jobject obj_ptr;
+
   _Jv_InterpFrame (void *meth, java::lang::Thread *thr, jclass proxyCls = NULL)
   : _Jv_Frame (reinterpret_cast<_Jv_MethodBase *> (meth), thr,
                     frame_interpreter)
   _Jv_InterpFrame (void *meth, java::lang::Thread *thr, jclass proxyCls = NULL)
   : _Jv_Frame (reinterpret_cast<_Jv_MethodBase *> (meth), thr,
                     frame_interpreter)
@@ -394,12 +397,18 @@ public:
     next_interp = (_Jv_InterpFrame *) thr->interp_frame;
     proxyClass = proxyCls;
     thr->interp_frame = (gnu::gcj::RawData *) this;
     next_interp = (_Jv_InterpFrame *) thr->interp_frame;
     proxyClass = proxyCls;
     thr->interp_frame = (gnu::gcj::RawData *) this;
+    obj_ptr = NULL;
   }
 
   ~_Jv_InterpFrame ()
   {
     thread->interp_frame = (gnu::gcj::RawData *) next_interp;
   }
   }
 
   ~_Jv_InterpFrame ()
   {
     thread->interp_frame = (gnu::gcj::RawData *) next_interp;
   }
+
+  jobject get_this_ptr ()
+  {
+    return obj_ptr;
+  } 
 };
 
 // A native frame in the call stack really just a placeholder
 };
 
 // A native frame in the call stack really just a placeholder
index 12d0b9a..8a4d204 100644 (file)
@@ -349,6 +349,15 @@ details.  */
   */
   memcpy ((void*) locals, (void*) args, meth->args_raw_size);
 
   */
   memcpy ((void*) locals, (void*) args, meth->args_raw_size);
 
+#ifdef DEBUG
+  // Get the object pointer for this method, after checking that it is
+  // non-static.
+  _Jv_Method *method = meth->get_method ();
+   
+  if ((method->accflags & java::lang::reflect::Modifier::STATIC) == 0)
+    frame_desc.obj_ptr = locals[0].o;
+#endif
+
   _Jv_word *pool_data = meth->defining_class->constants.data;
 
   /* These three are temporaries for common code used by several
   _Jv_word *pool_data = meth->defining_class->constants.data;
 
   /* These three are temporaries for common code used by several