diff truffle/com.oracle.truffle.tools.debug.shell/src/com/oracle/truffle/tools/debug/shell/server/REPLHandler.java @ 22476:4a83dc15e774

Truffle/Debugging: reorganize Debugger/Suspended event to pass stack as FrameInstances; delete FrameDebugDescription
author Michael Van De Vanter <michael.van.de.vanter@oracle.com>
date Mon, 07 Dec 2015 20:48:29 -0800
parents c434681cd164
children
line wrap: on
line diff
--- a/truffle/com.oracle.truffle.tools.debug.shell/src/com/oracle/truffle/tools/debug/shell/server/REPLHandler.java	Mon Dec 07 18:21:03 2015 -0800
+++ b/truffle/com.oracle.truffle.tools.debug.shell/src/com/oracle/truffle/tools/debug/shell/server/REPLHandler.java	Mon Dec 07 20:48:29 2015 -0800
@@ -29,9 +29,10 @@
 import java.util.Collection;
 import java.util.List;
 
-import com.oracle.truffle.api.debug.FrameDebugDescription;
-import com.oracle.truffle.api.frame.Frame;
+import com.oracle.truffle.api.frame.FrameInstance;
+import com.oracle.truffle.api.frame.FrameInstance.FrameAccess;
 import com.oracle.truffle.api.frame.FrameSlot;
+import com.oracle.truffle.api.frame.MaterializedFrame;
 import com.oracle.truffle.api.instrument.ASTPrinter;
 import com.oracle.truffle.api.instrument.KillException;
 import com.oracle.truffle.api.instrument.QuitException;
@@ -150,10 +151,11 @@
         public REPLMessage[] receive(REPLMessage request, REPLServer replServer) {
             final Visualizer visualizer = replServer.getVisualizer();
             final ArrayList<REPLMessage> replies = new ArrayList<>();
-            final List<FrameDebugDescription> stack = replServer.getCurrentContext().getStack();
-
-            for (int i = 0; i < stack.size(); i++) {
-                replies.add(btMessage(i, stack.get(i).node(), visualizer));
+            final Context currentContext = replServer.getCurrentContext();
+            final List<FrameInstance> stack = currentContext.getStack();
+            replies.add(btMessage(0, currentContext.getNode(), visualizer));
+            for (int i = 1; i <= stack.size(); i++) {
+                replies.add(btMessage(i, stack.get(i - 1).getCallNode(), visualizer));
             }
             if (replies.size() > 0) {
                 return replies.toArray(new REPLMessage[0]);
@@ -469,17 +471,24 @@
             if (frameNumber == null) {
                 return finishReplyFailed(createReply(), "no frame number specified");
             }
-            final List<FrameDebugDescription> stack = replServer.getCurrentContext().getStack();
-            if (frameNumber < 0 || frameNumber >= stack.size()) {
+            final Context currentContext = replServer.getCurrentContext();
+            final List<FrameInstance> stack = currentContext.getStack();
+            if (frameNumber < 0 || frameNumber > stack.size()) {
                 return finishReplyFailed(createReply(), "frame number " + frameNumber + " out of range");
             }
             final Visualizer visualizer = replServer.getVisualizer();
 
-            final FrameDebugDescription frameDescription = stack.get(frameNumber);
-            final Frame frame = frameDescription.frame();
-            final Node node = frameDescription.node();
+            MaterializedFrame frame;
+            Node node;
+            if (frameNumber == 0) {
+                frame = currentContext.getFrame();
+                node = currentContext.getNode();
+            } else {
+                final FrameInstance instance = stack.get(frameNumber - 1);
+                frame = instance.getFrame(FrameAccess.MATERIALIZE, true).materialize();
+                node = instance.getCallNode();
+            }
             List<? extends FrameSlot> slots = frame.getFrameDescriptor().getSlots();
-
             if (slots.size() == 0) {
                 final REPLMessage emptyFrameMessage = createFrameInfoMessage(replServer, frameNumber, node);
                 return finishReplySucceeded(emptyFrameMessage, "empty frame");