annotate truffle/com.oracle.truffle.tools.debug.shell/src/com/oracle/truffle/tools/debug/shell/server/REPLServer.java @ 22449:5df298d7c949

Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
author Michael Van De Vanter <michael.van.de.vanter@oracle.com>
date Wed, 04 Nov 2015 16:35:38 -0800
parents
children ad180d3d4bd7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
22449
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
1 /*
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
2 * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
4 *
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
7 * published by the Free Software Foundation. Oracle designates this
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
8 * particular file as subject to the "Classpath" exception as provided
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
9 * by Oracle in the LICENSE file that accompanied this code.
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
10 *
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
11 * This code is distributed in the hope that it will be useful, but WITHOUT
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
14 * version 2 for more details (a copy is included in the LICENSE file that
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
15 * accompanied this code).
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
16 *
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
17 * You should have received a copy of the GNU General Public License version
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
18 * 2 along with this work; if not, write to the Free Software Foundation,
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
20 *
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
22 * or visit www.oracle.com if you need additional information or have any
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
23 * questions.
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
24 */
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
25 package com.oracle.truffle.tools.debug.shell.server;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
26
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
27 import java.io.IOException;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
28 import java.util.ArrayList;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
29 import java.util.Collection;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
30 import java.util.Collections;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
31 import java.util.HashMap;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
32 import java.util.List;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
33 import java.util.Map;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
34 import java.util.WeakHashMap;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
35
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
36 import com.oracle.truffle.api.debug.Breakpoint;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
37 import com.oracle.truffle.api.debug.Debugger;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
38 import com.oracle.truffle.api.debug.ExecutionEvent;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
39 import com.oracle.truffle.api.debug.LineBreakpoint;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
40 import com.oracle.truffle.api.debug.SuspendedEvent;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
41 import com.oracle.truffle.api.debug.TagBreakpoint;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
42 import com.oracle.truffle.api.frame.FrameInstance;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
43 import com.oracle.truffle.api.frame.MaterializedFrame;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
44 import com.oracle.truffle.api.instrument.StandardSyntaxTag;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
45 import com.oracle.truffle.api.instrument.SyntaxTag;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
46 import com.oracle.truffle.api.instrument.Visualizer;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
47 import com.oracle.truffle.api.instrument.impl.DefaultVisualizer;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
48 import com.oracle.truffle.api.nodes.Node;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
49 import com.oracle.truffle.api.source.LineLocation;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
50 import com.oracle.truffle.api.source.Source;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
51 import com.oracle.truffle.api.source.SourceSection;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
52 import com.oracle.truffle.api.vm.EventConsumer;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
53 import com.oracle.truffle.api.vm.PolyglotEngine;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
54 import com.oracle.truffle.api.vm.PolyglotEngine.Language;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
55 import com.oracle.truffle.api.vm.PolyglotEngine.Value;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
56 import com.oracle.truffle.tools.debug.shell.REPLMessage;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
57 import com.oracle.truffle.tools.debug.shell.client.SimpleREPLClient;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
58
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
59 /**
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
60 * The server side of a simple message-based protocol for a possibly remote language
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
61 * Read-Eval-Print-Loop.
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
62 */
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
63 public final class REPLServer {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
64
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
65 // Language-agnostic
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
66 private final PolyglotEngine engine;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
67 private Debugger db;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
68 private Context currentServerContext;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
69 private SimpleREPLClient replClient = null;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
70 private String statusPrefix;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
71 private final Map<String, REPLHandler> handlerMap = new HashMap<>();
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
72
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
73 // TODO (mlvdv) Language-specific
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
74 private final PolyglotEngine.Language language;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
75 private final Visualizer visualizer;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
76
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
77 private int nextBreakpointUID = 0;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
78
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
79 /**
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
80 * Map: breakpoints => breakpoint UID.
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
81 * <ul>
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
82 * <li>Contains only pending breakpoints when the Debugger not yet available.</li>
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
83 * <li>When the Debugger becomes available, each pending breakpoint is replaced with a Debugger
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
84 * breakpoint, keeping same UID.</li>
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
85 * <li>Contains no disposed breakpoints.</li>
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
86 * <li>UIDs for disposed breakpoints are never reused.</li>
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
87 * </ul>
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
88 */
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
89 private Map<Breakpoint, Integer> breakpoints = new WeakHashMap<>();
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
90
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
91 /**
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
92 * Create a single-language server.
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
93 */
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
94 public REPLServer(String mimeType, Visualizer visualizer) {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
95 this.visualizer = visualizer == null ? new DefaultVisualizer() : visualizer;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
96 EventConsumer<SuspendedEvent> onHalted = new EventConsumer<SuspendedEvent>(SuspendedEvent.class) {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
97 @Override
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
98 protected void on(SuspendedEvent ev) {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
99 REPLServer.this.haltedAt(ev);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
100 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
101 };
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
102 EventConsumer<ExecutionEvent> onExec = new EventConsumer<ExecutionEvent>(ExecutionEvent.class) {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
103 @Override
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
104 protected void on(ExecutionEvent event) {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
105 if (db == null) {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
106 db = event.getDebugger();
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
107 if (!breakpoints.isEmpty()) {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
108 ArrayList<? extends Breakpoint> pendingBreakpoints = new ArrayList<>(breakpoints.keySet());
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
109 try {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
110 for (Breakpoint pending : pendingBreakpoints) {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
111
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
112 Integer uid = breakpoints.get(pending);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
113 pending.dispose();
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
114 Breakpoint replacement = null;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
115 if (pending instanceof PendingLineBreakpoint) {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
116 final PendingLineBreakpoint lineBreak = (PendingLineBreakpoint) pending;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
117 replacement = db.setLineBreakpoint(lineBreak.getIgnoreCount(), lineBreak.getLineLocation(), lineBreak.isOneShot());
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
118
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
119 } else if (pending instanceof PendingTagBreakpoint) {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
120 final PendingTagBreakpoint tagBreak = (PendingTagBreakpoint) pending;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
121 replacement = db.setTagBreakpoint(tagBreak.getIgnoreCount(), tagBreak.getTag(), tagBreak.isOneShot());
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
122 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
123 breakpoints.put(replacement, uid);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
124 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
125 } catch (IOException e) {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
126 throw new IllegalStateException("pending breakpoints should all be valid");
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
127 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
128 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
129 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
130 event.prepareStepInto();
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
131 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
132 };
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
133 engine = PolyglotEngine.buildNew().onEvent(onHalted).onEvent(onExec).build();
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
134 this.language = engine.getLanguages().get(mimeType);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
135 if (language == null) {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
136 throw new RuntimeException("Implementation not found for \"" + mimeType + "\"");
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
137 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
138 statusPrefix = languageName(language);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
139 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
140
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
141 public void add(REPLHandler handler) {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
142 handlerMap.put(handler.getOp(), handler);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
143 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
144
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
145 /**
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
146 * Starts up a server; status returned in a message.
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
147 */
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
148 public void start() {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
149
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
150 addHandlers();
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
151 this.replClient = new SimpleREPLClient(this);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
152 this.currentServerContext = new Context(null, null);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
153 replClient.start();
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
154 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
155
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
156 protected void addHandlers() {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
157 add(REPLHandler.BACKTRACE_HANDLER);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
158 add(REPLHandler.BREAK_AT_LINE_HANDLER);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
159 add(REPLHandler.BREAK_AT_LINE_ONCE_HANDLER);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
160 add(REPLHandler.BREAK_AT_THROW_HANDLER);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
161 add(REPLHandler.BREAK_AT_THROW_ONCE_HANDLER);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
162 add(REPLHandler.BREAKPOINT_INFO_HANDLER);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
163 add(REPLHandler.CALL_HANDLER);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
164 add(REPLHandler.CLEAR_BREAK_HANDLER);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
165 add(REPLHandler.CONTINUE_HANDLER);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
166 add(REPLHandler.DELETE_HANDLER);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
167 add(REPLHandler.DISABLE_BREAK_HANDLER);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
168 add(REPLHandler.ENABLE_BREAK_HANDLER);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
169 add(REPLHandler.EVAL_HANDLER);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
170 add(REPLHandler.FILE_HANDLER);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
171 add(REPLHandler.FRAME_HANDLER);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
172 add(REPLHandler.INFO_HANDLER);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
173 add(REPLHandler.KILL_HANDLER);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
174 add(REPLHandler.LOAD_HANDLER);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
175 add(REPLHandler.QUIT_HANDLER);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
176 add(REPLHandler.SET_BREAK_CONDITION_HANDLER);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
177 add(REPLHandler.STEP_INTO_HANDLER);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
178 add(REPLHandler.STEP_OUT_HANDLER);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
179 add(REPLHandler.STEP_OVER_HANDLER);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
180 add(REPLHandler.TRUFFLE_HANDLER);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
181 add(REPLHandler.TRUFFLE_NODE_HANDLER);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
182 add(REPLHandler.UNSET_BREAK_CONDITION_HANDLER);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
183 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
184
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
185 void haltedAt(SuspendedEvent event) {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
186 // Create and push a new debug context where execution is halted
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
187 currentServerContext = new Context(currentServerContext, event);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
188
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
189 // Message the client that execution is halted and is in a new debugging context
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
190 final REPLMessage message = new REPLMessage();
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
191 message.put(REPLMessage.OP, REPLMessage.STOPPED);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
192 final SourceSection src = event.getNode().getSourceSection();
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
193 final Source source = src.getSource();
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
194 message.put(REPLMessage.SOURCE_NAME, source.getName());
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
195 message.put(REPLMessage.FILE_PATH, source.getPath());
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
196 message.put(REPLMessage.LINE_NUMBER, Integer.toString(src.getStartLine()));
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
197 message.put(REPLMessage.STATUS, REPLMessage.SUCCEEDED);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
198 message.put(REPLMessage.DEBUG_LEVEL, Integer.toString(currentServerContext.getLevel()));
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
199 List<String> warnings = event.getRecentWarnings();
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
200 if (!warnings.isEmpty()) {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
201 final StringBuilder sb = new StringBuilder();
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
202 for (String warning : warnings) {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
203 sb.append(warning + "\n");
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
204 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
205 message.put(REPLMessage.WARNINGS, sb.toString());
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
206 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
207 try {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
208 // Cheat with synchrony: call client directly about entering a nested debugging
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
209 // context.
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
210 replClient.halted(message);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
211 } finally {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
212 // Returns when "continue" or "kill" is called in the new debugging context
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
213
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
214 // Pop the debug context, and return so that the old context will continue
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
215 currentServerContext = currentServerContext.predecessor;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
216 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
217 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
218
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
219 /**
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
220 * Execution context of a halted program, possibly nested.
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
221 */
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
222 public final class Context {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
223
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
224 private final Context predecessor;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
225 private final int level;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
226 private final SuspendedEvent event;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
227
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
228 Context(Context predecessor, SuspendedEvent event) {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
229 this.level = predecessor == null ? 0 : predecessor.getLevel() + 1;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
230 this.predecessor = predecessor;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
231 this.event = event;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
232 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
233
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
234 /**
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
235 * The nesting depth of this context in the current session.
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
236 */
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
237 int getLevel() {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
238 return level;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
239 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
240
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
241 /**
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
242 * The AST node where execution is halted in this context.
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
243 */
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
244 Node getNodeAtHalt() {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
245 return event.getNode();
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
246 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
247
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
248 /**
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
249 * Evaluates given code snippet in the context of currently suspended execution.
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
250 *
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
251 * @param code the snippet to evaluate
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
252 * @param frame <code>null</code> in case the evaluation should happen in top most frame,
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
253 * non-null value
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
254 * @return result of the evaluation
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
255 * @throws IOException if something goes wrong
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
256 */
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
257 Object eval(String code, FrameInstance frame) throws IOException {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
258 if (event == null) {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
259 throw new IOException("top level \"eval\" not yet supported");
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
260 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
261 return event.eval(code, frame);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
262 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
263
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
264 /**
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
265 * The frame where execution is halted in this context.
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
266 */
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
267 MaterializedFrame getFrameAtHalt() {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
268 return event.getFrame();
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
269 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
270
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
271 /**
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
272 * Dispatches a REPL request to the appropriate handler.
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
273 */
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
274 REPLMessage[] receive(REPLMessage request) {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
275 final String command = request.get(REPLMessage.OP);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
276 final REPLHandler handler = handlerMap.get(command);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
277
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
278 if (handler == null) {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
279 final REPLMessage message = new REPLMessage();
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
280 message.put(REPLMessage.OP, command);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
281 message.put(REPLMessage.STATUS, REPLMessage.FAILED);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
282 message.put(REPLMessage.DISPLAY_MSG, statusPrefix + " op \"" + command + "\" not supported");
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
283 final REPLMessage[] reply = new REPLMessage[]{message};
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
284 return reply;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
285 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
286 return handler.receive(request, REPLServer.this);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
287 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
288
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
289 /**
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
290 * Provides access to the execution stack.
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
291 *
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
292 * @return immutable list of stack elements
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
293 */
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
294 List<FrameDebugDescription> getStack() {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
295 List<FrameDebugDescription> frames = new ArrayList<>();
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
296 int frameCount = 1;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
297 for (FrameInstance frameInstance : event.getStack()) {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
298 if (frameCount == 1) {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
299 frames.add(new FrameDebugDescription(frameCount, event.getNode(), frameInstance));
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
300 } else {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
301 frames.add(new FrameDebugDescription(frameCount, frameInstance.getCallNode(), frameInstance));
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
302 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
303 frameCount++;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
304 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
305 return Collections.unmodifiableList(frames);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
306 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
307
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
308 void prepareStepOut() {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
309 event.prepareStepOut();
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
310 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
311
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
312 void prepareStepInto(int repeat) {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
313 event.prepareStepInto(repeat);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
314 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
315
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
316 void prepareStepOver(int repeat) {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
317 event.prepareStepOver(repeat);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
318 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
319
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
320 void prepareContinue() {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
321 event.prepareContinue();
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
322 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
323 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
324
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
325 /**
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
326 * Ask the server to handle a request. Return a non-empty array of messages to simulate remote
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
327 * operation where the protocol has possibly multiple messages being returned asynchronously in
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
328 * response to each request.
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
329 */
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
330 public REPLMessage[] receive(REPLMessage request) {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
331 if (currentServerContext == null) {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
332 final REPLMessage message = new REPLMessage();
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
333 message.put(REPLMessage.STATUS, REPLMessage.FAILED);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
334 message.put(REPLMessage.DISPLAY_MSG, "server not started");
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
335 final REPLMessage[] reply = new REPLMessage[]{message};
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
336 return reply;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
337 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
338 return currentServerContext.receive(request);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
339 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
340
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
341 Context getCurrentContext() {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
342 return currentServerContext;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
343 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
344
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
345 Visualizer getVisualizer() {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
346 return visualizer;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
347 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
348
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
349 // TODO (mlvdv) language-specific
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
350 Language getLanguage() {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
351 return language;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
352 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
353
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
354 // TODO (mlvdv) language-specific
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
355 public String getLanguageName() {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
356 return languageName(this.language);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
357 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
358
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
359 private static String languageName(Language lang) {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
360 return lang.getName() + "(" + lang.getVersion() + ")";
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
361 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
362
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
363 void eval(Source source) throws IOException {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
364 engine.eval(source);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
365 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
366
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
367 Breakpoint setLineBreakpoint(int ignoreCount, LineLocation lineLocation, boolean oneShot) throws IOException {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
368 Breakpoint breakpoint;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
369 if (db == null) {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
370 breakpoint = new PendingLineBreakpoint(ignoreCount, lineLocation, oneShot);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
371 } else {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
372 breakpoint = db.setLineBreakpoint(ignoreCount, lineLocation, oneShot);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
373 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
374 registerNewBreakpoint(breakpoint);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
375 return breakpoint;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
376 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
377
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
378 Breakpoint setTagBreakpoint(int ignoreCount, StandardSyntaxTag tag, boolean oneShot) throws IOException {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
379 Breakpoint breakpoint;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
380 if (db == null) {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
381 breakpoint = new PendingTagBreakpoint(ignoreCount, tag, oneShot);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
382 } else {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
383 breakpoint = db.setTagBreakpoint(ignoreCount, tag, oneShot);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
384 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
385 registerNewBreakpoint(breakpoint);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
386 return breakpoint;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
387 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
388
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
389 private synchronized void registerNewBreakpoint(Breakpoint breakpoint) {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
390 breakpoints.put(breakpoint, nextBreakpointUID++);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
391 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
392
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
393 synchronized Breakpoint findBreakpoint(int id) {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
394 for (Map.Entry<Breakpoint, Integer> entrySet : breakpoints.entrySet()) {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
395 if (id == entrySet.getValue()) {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
396 return entrySet.getKey();
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
397 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
398 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
399 return null;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
400 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
401
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
402 /**
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
403 * Gets a list of the currently existing breakpoints.
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
404 */
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
405 Collection<Breakpoint> getBreakpoints() {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
406 return new ArrayList<>(breakpoints.keySet());
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
407 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
408
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
409 synchronized int getBreakpointID(Breakpoint breakpoint) {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
410 final Integer id = breakpoints.get(breakpoint);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
411 return id == null ? -1 : id;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
412 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
413
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
414 void call(String name) throws IOException {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
415 Value symbol = engine.findGlobalSymbol(name);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
416 if (symbol == null) {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
417 throw new IOException("symbol \"" + name + "\" not found");
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
418 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
419 symbol.invoke(null);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
420 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
421
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
422 /**
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
423 * The intention to create a line breakpoint.
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
424 */
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
425 private final class PendingLineBreakpoint extends LineBreakpoint {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
426
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
427 private Source conditionSource;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
428
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
429 PendingLineBreakpoint(int ignoreCount, LineLocation lineLocation, boolean oneShot) {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
430 super(Breakpoint.State.ENABLED_UNRESOLVED, lineLocation, ignoreCount, oneShot);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
431 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
432
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
433 @Override
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
434 public void setEnabled(boolean enabled) {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
435 switch (getState()) {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
436 case ENABLED_UNRESOLVED:
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
437 if (!enabled) {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
438 setState(State.DISABLED_UNRESOLVED);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
439 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
440 break;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
441 case DISABLED_UNRESOLVED:
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
442 if (enabled) {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
443 setState(State.ENABLED_UNRESOLVED);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
444 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
445 break;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
446 case DISPOSED:
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
447 throw new IllegalStateException("Disposed breakpoints must stay disposed");
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
448 default:
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
449 throw new IllegalStateException("Unexpected breakpoint state");
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
450 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
451 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
452
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
453 @Override
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
454 public boolean isEnabled() {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
455 return getState() == State.ENABLED_UNRESOLVED;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
456 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
457
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
458 @Override
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
459 public void setCondition(String expr) throws IOException {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
460 this.conditionSource = Source.fromText(expr, "breakpoint condition from text: " + expr);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
461 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
462
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
463 @Override
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
464 public Source getCondition() {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
465 return conditionSource;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
466 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
467
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
468 @Override
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
469 public void dispose() {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
470 if (getState() == State.DISPOSED) {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
471 throw new IllegalStateException("Breakpoint already disposed");
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
472 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
473 setState(State.DISPOSED);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
474 breakpoints.remove(this);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
475 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
476 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
477
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
478 /**
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
479 * The intention to create a line breakpoint.
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
480 */
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
481 private final class PendingTagBreakpoint extends TagBreakpoint {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
482
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
483 private Source conditionSource;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
484
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
485 PendingTagBreakpoint(int ignoreCount, SyntaxTag tag, boolean oneShot) {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
486 super(Breakpoint.State.ENABLED_UNRESOLVED, tag, ignoreCount, oneShot);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
487 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
488
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
489 @Override
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
490 public void setEnabled(boolean enabled) {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
491 switch (getState()) {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
492 case ENABLED_UNRESOLVED:
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
493 if (!enabled) {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
494 setState(State.DISABLED_UNRESOLVED);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
495 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
496 break;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
497 case DISABLED_UNRESOLVED:
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
498 if (enabled) {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
499 setState(State.ENABLED_UNRESOLVED);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
500 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
501 break;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
502 case DISPOSED:
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
503 throw new IllegalStateException("Disposed breakpoints must stay disposed");
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
504 default:
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
505 throw new IllegalStateException("Unexpected breakpoint state");
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
506 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
507 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
508
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
509 @Override
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
510 public boolean isEnabled() {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
511 return getState() == State.ENABLED_UNRESOLVED;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
512 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
513
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
514 @Override
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
515 public void setCondition(String expr) throws IOException {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
516 this.conditionSource = Source.fromText(expr, "breakpoint condition from text: " + expr);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
517 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
518
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
519 @Override
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
520 public Source getCondition() {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
521 return conditionSource;
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
522 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
523
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
524 @Override
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
525 public void dispose() {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
526 if (getState() == State.DISPOSED) {
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
527 throw new IllegalStateException("Breakpoint already disposed");
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
528 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
529 setState(State.DISPOSED);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
530 breakpoints.remove(this);
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
531 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
532 }
5df298d7c949 Truffle/Debugging: add change missing from previous fix concerning "pending" breakpoints
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents:
diff changeset
533 }