From 4b7b09a573c89c2d44241dd7f4d7ed38588ca914 Mon Sep 17 00:00:00 2001
From: Florian Angerer <florian.angerer@oracle.com>
Date: Wed, 21 Jun 2017 17:51:04 +0200
Subject: [PATCH] Enabled clearing of line breakpoint.

---
 .../r/nodes/builtin/base/DebugFunctions.java   | 10 ++++++----
 .../r/nodes/builtin/helpers/DebugHandling.java | 18 +++++++++++++-----
 .../r/nodes/builtin/utils/R/utils_overrides.R  |  2 +-
 3 files changed, 20 insertions(+), 10 deletions(-)

diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/DebugFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/DebugFunctions.java
index 310290392d..d6e1d063a3 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/DebugFunctions.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/DebugFunctions.java
@@ -139,9 +139,8 @@ public class DebugFunctions {
             casts.arg("clear").asLogicalVector().findFirst().map(toBoolean());
         }
 
-        @SuppressWarnings("unused")
         @Specialization
-        protected Object setBreakpoint(String fileLine, RMissing lineNr, boolean clear) {
+        protected Object setBreakpoint(String fileLine, @SuppressWarnings("unused") RMissing lineNr, boolean clear) {
 
             int hashIdx = fileLine.lastIndexOf('#');
             if (hashIdx != -1) {
@@ -156,13 +155,16 @@ public class DebugFunctions {
             throw error(RError.Message.GENERIC, "Line number missing");
         }
 
-        @SuppressWarnings("unused")
         @Specialization
         protected Object setBreakpoint(String fileName, int lineNr, boolean clear) {
 
             try {
                 Source fromSrcfile = RSource.fromFileName(fileName, false);
-                DebugHandling.enableLineDebug(fromSrcfile, lineNr);
+                if (!clear) {
+                    DebugHandling.enableLineDebug(fromSrcfile, lineNr);
+                } else {
+                    DebugHandling.disableLineDebug(fromSrcfile, lineNr);
+                }
                 return RDataFactory.createStringVectorFromScalar(fileName + "#" + lineNr);
             } catch (IOException e) {
                 return RNull.instance;
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/helpers/DebugHandling.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/helpers/DebugHandling.java
index c8c6eda3bf..ff6f5b36d8 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/helpers/DebugHandling.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/helpers/DebugHandling.java
@@ -211,9 +211,13 @@ public class DebugHandling {
     @TruffleBoundary
     public static void disableLineDebug(Source fdn, int line) {
         LineBreakpointEventListener l = getLineBreakpointEventListener(fdn, line);
-        l.disable();
-        l.fser.setParentListener(null);
-        l.fser.disable();
+        if (l != null) {
+            l.disable();
+            if (l.fser != null) {
+                l.fser.setParentListener(null);
+                l.fser.disable();
+            }
+        }
     }
 
     private static FunctionStatementsEventListener ensureSingleStep(FunctionDefinitionNode fdn, LineBreakpointEventListener parentListener) {
@@ -602,12 +606,16 @@ public class DebugHandling {
 
         @Override
         public void onReturnValue(EventContext context, VirtualFrame frame, Object result) {
-            fser.enableChildren();
+            if (fser != null) {
+                fser.enableChildren();
+            }
         }
 
         @Override
         public void onReturnExceptional(EventContext context, VirtualFrame frame, Throwable exception) {
-            fser.enableChildren();
+            if (fser != null) {
+                fser.enableChildren();
+            }
         }
 
     }
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/utils/R/utils_overrides.R b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/utils/R/utils_overrides.R
index c3ccdbf25e..690fa8cf13 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/utils/R/utils_overrides.R
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/utils/R/utils_overrides.R
@@ -26,7 +26,7 @@ setBreakpoint <- function (srcfile, line, nameonly = TRUE, envir = parent.frame(
 {
     res <- .fastr.setBreakpoint(srcfile, line, clear)
     if(is.null(res))
-    	res <- structure(result, class="findLineNumResult")
+    	res <- structure(list(), class="findLineNumResult")
     if (verbose) 
         print(res, steps = !clear)
 }
-- 
GitLab