changeset 22442:2b1845933b6f

Truffle/REPL: fix two minor bugs and improve error reporting
author Michael Van De Vanter <michael.van.de.vanter@oracle.com>
date Tue, 20 Oct 2015 11:29:46 -0400
parents 518f8ead5d01
children 2e5ac2d13d84
files truffle/com.oracle.truffle.sl.tools/src/com/oracle/truffle/sl/tools/debug/SLREPLHandler.java truffle/com.oracle.truffle.tools.debug.shell/src/com/oracle/truffle/tools/debug/shell/server/REPLHandler.java
diffstat 2 files changed, 36 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/truffle/com.oracle.truffle.sl.tools/src/com/oracle/truffle/sl/tools/debug/SLREPLHandler.java	Sun Oct 18 19:42:47 2015 +0200
+++ b/truffle/com.oracle.truffle.sl.tools/src/com/oracle/truffle/sl/tools/debug/SLREPLHandler.java	Tue Oct 20 11:29:46 2015 -0400
@@ -142,7 +142,7 @@
         } catch (KillException ex) {
             return finishReplySucceeded(reply, fileName + " killed");
         } catch (Exception ex) {
-            return finishReplyFailed(reply, "error loading file \"" + fileName + "\": " + ex.getMessage());
+            return finishReplyFailed(reply, ex);
         }
     }
 }
--- a/truffle/com.oracle.truffle.tools.debug.shell/src/com/oracle/truffle/tools/debug/shell/server/REPLHandler.java	Sun Oct 18 19:42:47 2015 +0200
+++ b/truffle/com.oracle.truffle.tools.debug.shell/src/com/oracle/truffle/tools/debug/shell/server/REPLHandler.java	Tue Oct 20 11:29:46 2015 -0400
@@ -25,6 +25,7 @@
 package com.oracle.truffle.tools.debug.shell.server;
 
 import com.oracle.truffle.api.debug.Breakpoint;
+import com.oracle.truffle.api.debug.Debugger;
 import com.oracle.truffle.api.frame.Frame;
 import com.oracle.truffle.api.frame.FrameDescriptor;
 import com.oracle.truffle.api.frame.FrameInstance;
@@ -38,6 +39,7 @@
 import com.oracle.truffle.api.source.Source;
 import com.oracle.truffle.api.source.SourceSection;
 import com.oracle.truffle.tools.debug.shell.REPLMessage;
+
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
@@ -104,9 +106,18 @@
         return replies;
     }
 
+    protected static final REPLMessage[] finishReplyFailed(REPLMessage reply, Exception ex) {
+        reply.put(REPLMessage.STATUS, REPLMessage.FAILED);
+        String message = ex.getMessage();
+        reply.put(REPLMessage.DISPLAY_MSG, message == null ? ex.getClass().getSimpleName() : message);
+        final REPLMessage[] replies = new REPLMessage[]{reply};
+        return replies;
+    }
+
     static final REPLMessage createBreakpointInfoMessage(Breakpoint breakpoint, REPLServerContext serverContext) {
         final REPLMessage infoMessage = new REPLMessage(REPLMessage.OP, REPLMessage.BREAKPOINT_INFO);
         infoMessage.put(REPLMessage.BREAKPOINT_ID, Integer.toString(serverContext.getBreakpointID(breakpoint)));
+        infoMessage.put(REPLMessage.BREAKPOINT_STATE, breakpoint.getState().getName());
         infoMessage.put(REPLMessage.BREAKPOINT_HIT_COUNT, Integer.toString(breakpoint.getHitCount()));
         infoMessage.put(REPLMessage.BREAKPOINT_IGNORE_COUNT, Integer.toString(breakpoint.getIgnoreCount()));
         infoMessage.put(REPLMessage.INFO_VALUE, breakpoint.getLocationDescription().toString());
@@ -169,7 +180,7 @@
             try {
                 source = Source.fromFileName(lookupFile, true);
             } catch (Exception ex) {
-                return finishReplyFailed(reply, ex.getMessage());
+                return finishReplyFailed(reply, ex);
             }
             if (source == null) {
                 return finishReplyFailed(reply, fileName + " not found");
@@ -182,12 +193,16 @@
             if (ignoreCount == null) {
                 ignoreCount = 0;
             }
+            final Debugger db = serverContext.db();
+            if (db == null) {
+                return finishReplyFailed(reply, "debugger not initialized");
+            }
             Breakpoint breakpoint;
             try {
-                breakpoint = serverContext.db().setLineBreakpoint(DEFAULT_IGNORE_COUNT, source.createLineLocation(lineNumber), false);
+                breakpoint = db.setLineBreakpoint(DEFAULT_IGNORE_COUNT, source.createLineLocation(lineNumber), false);
                 serverContext.registerBreakpoint(breakpoint);
             } catch (Exception ex) {
-                return finishReplyFailed(reply, ex.getMessage());
+                return finishReplyFailed(reply, ex);
             }
             reply.put(REPLMessage.SOURCE_NAME, fileName);
             reply.put(REPLMessage.FILE_PATH, source.getPath());
@@ -210,7 +225,7 @@
             try {
                 source = Source.fromFileName(lookupFile, true);
             } catch (Exception ex) {
-                return finishReplyFailed(reply, ex.getMessage());
+                return finishReplyFailed(reply, ex);
             }
             if (source == null) {
                 return finishReplyFailed(reply, fileName + " not found");
@@ -223,7 +238,7 @@
                 Breakpoint b = serverContext.db().setLineBreakpoint(DEFAULT_IGNORE_COUNT, source.createLineLocation(lineNumber), true);
                 serverContext.registerBreakpoint(b);
             } catch (Exception ex) {
-                return finishReplyFailed(reply, ex.getMessage());
+                return finishReplyFailed(reply, ex);
             }
             reply.put(REPLMessage.SOURCE_NAME, fileName);
             reply.put(REPLMessage.FILE_PATH, source.getPath());
@@ -242,7 +257,7 @@
                 serverContext.registerBreakpoint(b);
                 return finishReplySucceeded(reply, "Breakpoint at any throw set");
             } catch (Exception ex) {
-                return finishReplyFailed(reply, ex.getMessage());
+                return finishReplyFailed(reply, ex);
             }
         }
     };
@@ -256,7 +271,7 @@
                 serverContext.db().setTagBreakpoint(DEFAULT_IGNORE_COUNT, StandardSyntaxTag.THROW, true);
                 return finishReplySucceeded(reply, "One-shot breakpoint at any throw set");
             } catch (Exception ex) {
-                return finishReplyFailed(reply, ex.getMessage());
+                return finishReplyFailed(reply, ex);
             }
         }
     };
@@ -369,20 +384,20 @@
             if (fileName == null) {
                 return finishReplyFailed(reply, "no file specified");
             }
+            reply.put(REPLMessage.SOURCE_NAME, fileName);
             try {
                 Source source = Source.fromFileName(fileName);
                 if (source == null) {
-                    reply.put(REPLMessage.SOURCE_NAME, fileName);
-                    return finishReplyFailed(reply, " not found");
+                    return finishReplyFailed(reply, "file \"" + fileName + "\" not found");
                 } else {
-                    reply.put(REPLMessage.SOURCE_NAME, fileName);
                     reply.put(REPLMessage.FILE_PATH, source.getPath());
                     reply.put(REPLMessage.CODE, source.getCode());
                     return finishReplySucceeded(reply, "file found");
                 }
+            } catch (IOException ex) {
+                return finishReplyFailed(reply, "can't read file \"" + fileName + "\"");
             } catch (Exception ex) {
-                reply.put(REPLMessage.SOURCE_NAME, fileName);
-                return finishReplyFailed(reply, "file \"" + fileName + "\" not found");
+                return finishReplyFailed(reply, ex);
             }
         }
     };
@@ -424,7 +439,7 @@
                 }
                 return finishReplySucceeded(frameMessage, sb.toString());
             } catch (Exception ex) {
-                return finishReplyFailed(frameMessage, ex.toString());
+                return finishReplyFailed(frameMessage, ex);
             }
         }
     };
@@ -471,6 +486,8 @@
                 return finishReplyFailed(message, "invalid condition for " + breakpointNumber);
             } catch (UnsupportedOperationException ex) {
                 return finishReplyFailed(message, "conditions not unsupported by breakpoint " + breakpointNumber);
+            } catch (Exception ex) {
+                return finishReplyFailed(message, ex);
             }
             message.put(REPLMessage.BREAKPOINT_CONDITION, expr);
             return finishReplySucceeded(message, "Breakpoint " + breakpointNumber + " condition=\"" + expr + "\"");
@@ -547,7 +564,7 @@
                 }
 
             } catch (Exception ex) {
-                return finishReplyFailed(reply, ex.toString());
+                return finishReplyFailed(reply, ex);
             }
         }
     };
@@ -568,10 +585,10 @@
             }
             try {
                 breakpoint.setCondition(null);
-            } catch (IOException e) {
-                return finishReplyFailed(message, e.getMessage());
+            } catch (Exception ex) {
+                return finishReplyFailed(message, ex);
             }
-            return finishReplyFailed(message, "Breakpoint " + breakpointNumber + " condition cleared");
+            return finishReplySucceeded(message, "Breakpoint " + breakpointNumber + " condition cleared");
         }
     };
 
@@ -599,7 +616,7 @@
                 }
                 return finishReplySucceeded(reply, sb.toString());
             } catch (Exception ex) {
-                return finishReplyFailed(reply, ex.toString());
+                return finishReplyFailed(reply, ex);
             }
         }
     };