Skip to content
Snippets Groups Projects
Commit 4b7b09a5 authored by Florian Angerer's avatar Florian Angerer
Browse files

Enabled clearing of line breakpoint.

parent 5a271187
Branches
No related tags found
No related merge requests found
...@@ -139,9 +139,8 @@ public class DebugFunctions { ...@@ -139,9 +139,8 @@ public class DebugFunctions {
casts.arg("clear").asLogicalVector().findFirst().map(toBoolean()); casts.arg("clear").asLogicalVector().findFirst().map(toBoolean());
} }
@SuppressWarnings("unused")
@Specialization @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('#'); int hashIdx = fileLine.lastIndexOf('#');
if (hashIdx != -1) { if (hashIdx != -1) {
...@@ -156,13 +155,16 @@ public class DebugFunctions { ...@@ -156,13 +155,16 @@ public class DebugFunctions {
throw error(RError.Message.GENERIC, "Line number missing"); throw error(RError.Message.GENERIC, "Line number missing");
} }
@SuppressWarnings("unused")
@Specialization @Specialization
protected Object setBreakpoint(String fileName, int lineNr, boolean clear) { protected Object setBreakpoint(String fileName, int lineNr, boolean clear) {
try { try {
Source fromSrcfile = RSource.fromFileName(fileName, false); 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); return RDataFactory.createStringVectorFromScalar(fileName + "#" + lineNr);
} catch (IOException e) { } catch (IOException e) {
return RNull.instance; return RNull.instance;
......
...@@ -211,9 +211,13 @@ public class DebugHandling { ...@@ -211,9 +211,13 @@ public class DebugHandling {
@TruffleBoundary @TruffleBoundary
public static void disableLineDebug(Source fdn, int line) { public static void disableLineDebug(Source fdn, int line) {
LineBreakpointEventListener l = getLineBreakpointEventListener(fdn, line); LineBreakpointEventListener l = getLineBreakpointEventListener(fdn, line);
l.disable(); if (l != null) {
l.fser.setParentListener(null); l.disable();
l.fser.disable(); if (l.fser != null) {
l.fser.setParentListener(null);
l.fser.disable();
}
}
} }
private static FunctionStatementsEventListener ensureSingleStep(FunctionDefinitionNode fdn, LineBreakpointEventListener parentListener) { private static FunctionStatementsEventListener ensureSingleStep(FunctionDefinitionNode fdn, LineBreakpointEventListener parentListener) {
...@@ -602,12 +606,16 @@ public class DebugHandling { ...@@ -602,12 +606,16 @@ public class DebugHandling {
@Override @Override
public void onReturnValue(EventContext context, VirtualFrame frame, Object result) { public void onReturnValue(EventContext context, VirtualFrame frame, Object result) {
fser.enableChildren(); if (fser != null) {
fser.enableChildren();
}
} }
@Override @Override
public void onReturnExceptional(EventContext context, VirtualFrame frame, Throwable exception) { public void onReturnExceptional(EventContext context, VirtualFrame frame, Throwable exception) {
fser.enableChildren(); if (fser != null) {
fser.enableChildren();
}
} }
} }
......
...@@ -26,7 +26,7 @@ setBreakpoint <- function (srcfile, line, nameonly = TRUE, envir = parent.frame( ...@@ -26,7 +26,7 @@ setBreakpoint <- function (srcfile, line, nameonly = TRUE, envir = parent.frame(
{ {
res <- .fastr.setBreakpoint(srcfile, line, clear) res <- .fastr.setBreakpoint(srcfile, line, clear)
if(is.null(res)) if(is.null(res))
res <- structure(result, class="findLineNumResult") res <- structure(list(), class="findLineNumResult")
if (verbose) if (verbose)
print(res, steps = !clear) print(res, steps = !clear)
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment