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