diff options
author | Kyle Galloway <kgallowa@redhat.com> | 2007-02-15 14:49:50 +0000 |
---|---|---|
committer | Kyle Galloway <kgallowa@gcc.gnu.org> | 2007-02-15 14:49:50 +0000 |
commit | fc01261a60ff3e7643ff663950020505a6d659d0 (patch) | |
tree | b6fcfec2b20b166cb494d556988e1edde4624e05 /libjava/gnu/classpath | |
parent | 02bba3c4176fe3c6055a149d75ad8694a9c01e51 (diff) | |
download | gcc-fc01261a60ff3e7643ff663950020505a6d659d0.zip gcc-fc01261a60ff3e7643ff663950020505a6d659d0.tar.gz gcc-fc01261a60ff3e7643ff663950020505a6d659d0.tar.bz2 |
natVMVirtualMachine (getFrames): Implement.
2007-02-15 Kyle Galloway <kgallowa@redhat.com>
* gnu/classpath/jdwp/natVMVirtualMachine (getFrames): Implement.
From-SVN: r121997
Diffstat (limited to 'libjava/gnu/classpath')
-rw-r--r-- | libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc | 46 |
1 files changed, 42 insertions, 4 deletions
diff --git a/libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc b/libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc index d219f58..71aa674 100644 --- a/libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc +++ b/libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc @@ -486,11 +486,49 @@ getClassMethod (jclass klass, jlong id) } java::util::ArrayList * -gnu::classpath::jdwp::VMVirtualMachine::getFrames (MAYBE_UNUSED Thread *thread, - MAYBE_UNUSED jint start, - MAYBE_UNUSED jint length) +gnu::classpath::jdwp::VMVirtualMachine::getFrames (Thread *thread, jint start, + jint length) { - return NULL; + jint frame_count = getFrameCount (thread); + ::java::util::ArrayList *frame_list; + + // Calculate the max number of frames to be returned. + jint num_frames = frame_count - start; + + // Check if num_frames is valid. + if (num_frames < 0) + num_frames = 0; + + // Check if there are more than length frames left after start. + // If length ios -1 return all remaining frames. + if (length != -1 && num_frames > length) + num_frames = length; + + frame_list = new ::java::util::ArrayList (num_frames); + + _Jv_Frame *vm_frame = reinterpret_cast<_Jv_Frame *> (thread->frame); + + // Take start frames off the top of the stack + while (vm_frame != NULL && start > 0) + { + start--; + vm_frame = vm_frame->next; + } + + // Use as a counter for the number of frames returned. + num_frames = 0; + + while (vm_frame != NULL && (num_frames < length || length == -1)) + { + jlong frameId = reinterpret_cast<jlong> (vm_frame); + + VMFrame *frame = getFrame (thread, frameId); + frame_list->add (frame); + vm_frame = vm_frame->next; + num_frames++; + } + + return frame_list; } gnu::classpath::jdwp::VMFrame * |