Mercurial > hg > graal-jvmci-8
comparison graal/com.oracle.truffle.tools.debug.shell/src/com/oracle/truffle/tools/debug/shell/server/REPLHandler.java @ 21890:894f82515e38
Truffle/APIs and Debugging: Evolutionary steps to integrating debugging and tool support with TruffleVM APIs
- Add a version string to language registration: Language.getShortName() produces a string with both language and version
- Rename SLMain --> SLLanguage (little change current machinery)
- Remove DebugEngine dependence on ExecutionContext: Visualizer access migrated to TruffleLanguage
- ExecutionContext now has only one method left: getCompilerOptions()
- Rename SourceExecutionProvider to DebugSupportProvider, now supplied by implementing abstract TruffleLanguage.getDebugSupport()
- Revise DebugEngine and its helper classes to work with the new APIs
author | Michael Van De Vanter <michael.van.de.vanter@oracle.com> |
---|---|
date | Tue, 09 Jun 2015 15:20:30 -0700 |
parents | 3b8bbf51d320 |
children |
comparison
equal
deleted
inserted
replaced
21889:45083be8a812 | 21890:894f82515e38 |
---|---|
24 */ | 24 */ |
25 package com.oracle.truffle.tools.debug.shell.server; | 25 package com.oracle.truffle.tools.debug.shell.server; |
26 | 26 |
27 import java.util.*; | 27 import java.util.*; |
28 | 28 |
29 import com.oracle.truffle.api.*; | |
30 import com.oracle.truffle.api.frame.*; | 29 import com.oracle.truffle.api.frame.*; |
31 import com.oracle.truffle.api.instrument.*; | 30 import com.oracle.truffle.api.instrument.*; |
32 import com.oracle.truffle.api.nodes.*; | 31 import com.oracle.truffle.api.nodes.*; |
33 import com.oracle.truffle.api.source.*; | 32 import com.oracle.truffle.api.source.*; |
33 import com.oracle.truffle.api.vm.TruffleVM.Language; | |
34 import com.oracle.truffle.tools.debug.engine.*; | |
34 import com.oracle.truffle.tools.debug.shell.*; | 35 import com.oracle.truffle.tools.debug.shell.*; |
35 import com.oracle.truffle.tools.debug.engine.*; | |
36 | 36 |
37 /** | 37 /** |
38 * Server-side REPL implementation of an {@linkplain REPLMessage "op"}. | 38 * Server-side REPL implementation of an {@linkplain REPLMessage "op"}. |
39 * <p> | 39 * <p> |
40 * The language-agnostic handlers are implemented here. | 40 * The language-agnostic handlers are implemented here. |
113 infoMessage.put(REPLMessage.STATUS, REPLMessage.SUCCEEDED); | 113 infoMessage.put(REPLMessage.STATUS, REPLMessage.SUCCEEDED); |
114 return infoMessage; | 114 return infoMessage; |
115 } | 115 } |
116 | 116 |
117 protected static REPLMessage createFrameInfoMessage(final REPLServerContext serverContext, FrameDebugDescription frame) { | 117 protected static REPLMessage createFrameInfoMessage(final REPLServerContext serverContext, FrameDebugDescription frame) { |
118 final Visualizer visualizer = serverContext.getLanguageContext().getVisualizer(); | 118 final Visualizer visualizer = serverContext.getLanguage().getDebugSupport().getVisualizer(); |
119 final REPLMessage infoMessage = new REPLMessage(REPLMessage.OP, REPLMessage.FRAME_INFO); | 119 final REPLMessage infoMessage = new REPLMessage(REPLMessage.OP, REPLMessage.FRAME_INFO); |
120 infoMessage.put(REPLMessage.FRAME_NUMBER, Integer.toString(frame.index())); | 120 infoMessage.put(REPLMessage.FRAME_NUMBER, Integer.toString(frame.index())); |
121 final Node node = frame.node(); | 121 final Node node = frame.node(); |
122 | 122 |
123 infoMessage.put(REPLMessage.SOURCE_LOCATION, visualizer.displaySourceLocation(node)); | 123 infoMessage.put(REPLMessage.SOURCE_LOCATION, visualizer.displaySourceLocation(node)); |
400 return finishReplyFailed(reply, "frame number " + frameNumber + " out of range"); | 400 return finishReplyFailed(reply, "frame number " + frameNumber + " out of range"); |
401 } | 401 } |
402 final FrameDebugDescription frameDescription = stack.get(frameNumber); | 402 final FrameDebugDescription frameDescription = stack.get(frameNumber); |
403 final REPLMessage frameMessage = createFrameInfoMessage(serverContext, frameDescription); | 403 final REPLMessage frameMessage = createFrameInfoMessage(serverContext, frameDescription); |
404 final Frame frame = frameDescription.frameInstance().getFrame(FrameInstance.FrameAccess.READ_ONLY, true); | 404 final Frame frame = frameDescription.frameInstance().getFrame(FrameInstance.FrameAccess.READ_ONLY, true); |
405 final ExecutionContext context = serverContext.getLanguageContext(); | 405 final Language language = serverContext.getLanguage(); |
406 final Visualizer visualizer = language.getDebugSupport().getVisualizer(); | |
406 final FrameDescriptor frameDescriptor = frame.getFrameDescriptor(); | 407 final FrameDescriptor frameDescriptor = frame.getFrameDescriptor(); |
407 try { | 408 try { |
408 final StringBuilder sb = new StringBuilder(); | 409 final StringBuilder sb = new StringBuilder(); |
409 for (FrameSlot slot : frameDescriptor.getSlots()) { | 410 for (FrameSlot slot : frameDescriptor.getSlots()) { |
410 sb.append(Integer.toString(slot.getIndex()) + ": " + context.getVisualizer().displayIdentifier(slot) + " = "); | 411 sb.append(Integer.toString(slot.getIndex()) + ": " + visualizer.displayIdentifier(slot) + " = "); |
411 try { | 412 try { |
412 final Object value = frame.getValue(slot); | 413 final Object value = frame.getValue(slot); |
413 sb.append(context.getVisualizer().displayValue(context, value, 0)); | 414 sb.append(visualizer.displayValue(value, 0)); |
414 } catch (Exception ex) { | 415 } catch (Exception ex) { |
415 sb.append("???"); | 416 sb.append("???"); |
416 } | 417 } |
417 sb.append("\n"); | 418 sb.append("\n"); |
418 } | 419 } |
511 public static final REPLHandler TRUFFLE_HANDLER = new REPLHandler(REPLMessage.TRUFFLE) { | 512 public static final REPLHandler TRUFFLE_HANDLER = new REPLHandler(REPLMessage.TRUFFLE) { |
512 | 513 |
513 @Override | 514 @Override |
514 public REPLMessage[] receive(REPLMessage request, REPLServerContext serverContext) { | 515 public REPLMessage[] receive(REPLMessage request, REPLServerContext serverContext) { |
515 final REPLMessage reply = createReply(); | 516 final REPLMessage reply = createReply(); |
516 final ASTPrinter astPrinter = serverContext.getLanguageContext().getVisualizer().getASTPrinter(); | 517 final ASTPrinter astPrinter = serverContext.getLanguage().getDebugSupport().getVisualizer().getASTPrinter(); |
517 final String topic = request.get(REPLMessage.TOPIC); | 518 final String topic = request.get(REPLMessage.TOPIC); |
518 reply.put(REPLMessage.TOPIC, topic); | 519 reply.put(REPLMessage.TOPIC, topic); |
519 Node node = serverContext.getNode(); | 520 Node node = serverContext.getNode(); |
520 if (node == null) { | 521 if (node == null) { |
521 return finishReplyFailed(reply, "no current AST node"); | 522 return finishReplyFailed(reply, "no current AST node"); |
572 public static final REPLHandler TRUFFLE_NODE_HANDLER = new REPLHandler(REPLMessage.TRUFFLE_NODE) { | 573 public static final REPLHandler TRUFFLE_NODE_HANDLER = new REPLHandler(REPLMessage.TRUFFLE_NODE) { |
573 | 574 |
574 @Override | 575 @Override |
575 public REPLMessage[] receive(REPLMessage request, REPLServerContext serverContext) { | 576 public REPLMessage[] receive(REPLMessage request, REPLServerContext serverContext) { |
576 final REPLMessage reply = createReply(); | 577 final REPLMessage reply = createReply(); |
577 final ASTPrinter astPrinter = serverContext.getLanguageContext().getVisualizer().getASTPrinter(); | 578 final ASTPrinter astPrinter = serverContext.getLanguage().getDebugSupport().getVisualizer().getASTPrinter(); |
578 final Node node = serverContext.getNode(); | 579 final Node node = serverContext.getNode(); |
579 if (node == null) { | 580 if (node == null) { |
580 return finishReplyFailed(reply, "no current AST node"); | 581 return finishReplyFailed(reply, "no current AST node"); |
581 } | 582 } |
582 | 583 |