diff options
Diffstat (limited to 'libjava/gnu/classpath/jdwp')
| -rw-r--r-- | libjava/gnu/classpath/jdwp/VMFrame.h | 2 | ||||
| -rw-r--r-- | libjava/gnu/classpath/jdwp/VMFrame.java | 4 | ||||
| -rw-r--r-- | libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc | 16 |
3 files changed, 17 insertions, 5 deletions
diff --git a/libjava/gnu/classpath/jdwp/VMFrame.h b/libjava/gnu/classpath/jdwp/VMFrame.h index 0108e7b96d5..737f39de28b 100644 --- a/libjava/gnu/classpath/jdwp/VMFrame.h +++ b/libjava/gnu/classpath/jdwp/VMFrame.h @@ -33,7 +33,7 @@ class gnu::classpath::jdwp::VMFrame : public ::java::lang::Object { public: - VMFrame(::java::lang::Thread *, jlong, ::gnu::classpath::jdwp::util::Location *); + VMFrame(::java::lang::Thread *, jlong, ::gnu::classpath::jdwp::util::Location *, ::java::lang::Object *); virtual ::gnu::classpath::jdwp::util::Location * getLocation(); virtual ::gnu::classpath::jdwp::value::Value * getValue(jint, jbyte); virtual void setValue(jint, ::gnu::classpath::jdwp::value::Value *); diff --git a/libjava/gnu/classpath/jdwp/VMFrame.java b/libjava/gnu/classpath/jdwp/VMFrame.java index 4b144af75c3..de2640c85ff 100644 --- a/libjava/gnu/classpath/jdwp/VMFrame.java +++ b/libjava/gnu/classpath/jdwp/VMFrame.java @@ -74,11 +74,13 @@ public class VMFrame * @param frame_id a long, the jframeID of this frame * @param frame_loc a Location, the location of this frame */ - public VMFrame(Thread thr, long frame_id, Location frame_loc) + public VMFrame(Thread thr, long frame_id, Location frame_loc, + Object frame_obj) { thread = thr; id = frame_id; loc = frame_loc; + obj = frame_obj; } /** diff --git a/libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc b/libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc index 7fee49bee4c..db33781378e 100644 --- a/libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc +++ b/libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc @@ -618,12 +618,22 @@ getFrame (Thread *thread, jlong frameID) VMMethod *meth = getClassMethod (klass, reinterpret_cast<jlong> (info.method)); + jobject this_obj; + if (info.location == -1) - loc = new Location (meth, 0); + { + loc = new Location (meth, 0); + this_obj = NULL; + } else - loc = new Location (meth, info.location); + { + loc = new Location (meth, info.location); + _Jv_InterpFrame *iframe = reinterpret_cast<_Jv_InterpFrame *> (vm_frame); + this_obj = iframe->get_this_ptr (); + } - return new VMFrame (thread, reinterpret_cast<jlong> (vm_frame), loc); + return new VMFrame (thread, reinterpret_cast<jlong> (vm_frame), loc, + this_obj); } jint |

