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 310290392d35cedc807fe9e4fc6893f3a3f51fed..d6e1d063a37b2c4ba96c5b24f5c95b958aedfebd 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 c8c6eda3bf232c54fd836a7826966cd0183817fe..ff6f5b36d84fa8799557ff7c295026fcd2f53472 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 c3ccdbf25e546383613bc73d2b2437cf16a421ee..690fa8cf1384a1e6349532f93838cf094cd5777f 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) }