aboutsummaryrefslogtreecommitdiff
path: root/libjava/gnu/classpath
diff options
context:
space:
mode:
authorKyle Galloway <kgallowa@redhat.com>2007-02-15 14:49:50 +0000
committerKyle Galloway <kgallowa@gcc.gnu.org>2007-02-15 14:49:50 +0000
commitfc01261a60ff3e7643ff663950020505a6d659d0 (patch)
treeb6fcfec2b20b166cb494d556988e1edde4624e05 /libjava/gnu/classpath
parent02bba3c4176fe3c6055a149d75ad8694a9c01e51 (diff)
downloadgcc-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.cc46
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 *