X-Git-Url: http://christophe.rhodes.io/gitweb/?p=swankr.git;a=blobdiff_plain;f=swank.R;h=c6a1ec2f0e0afe13d7e90a3910370bbb3dfe49ef;hp=802b0409e49543ff3a7372128d26168aab26f6ed;hb=4bae7a87342e7c464e3f2c474656661325db5951;hpb=4088bd066cbaad7a568cb7722b31dce9fd203bc3 diff --git a/swank.R b/swank.R index 802b040..c6a1ec2 100644 --- a/swank.R +++ b/swank.R @@ -69,7 +69,7 @@ sldbLoop <- function(io, sldbState, id) { debuggerInfoForEmacs <- function(sldbState, from=0, to=NULL) { backtraceForEmacs <- function() { - calls <- sys.calls() + calls <- rev(sys.calls()) if(is.null(to)) to <- length(calls) from <- from+1 calls <- lapply(calls[from:to], { frameNumber <- from-1; @@ -239,7 +239,7 @@ writeSexpToString <- function(obj) { } `swank:listener-eval` <- function(io, sldbState, string) { - val <- eval(parse(text=string)) + val <- eval(parse(text=string), envir = globalenv()) f <- fifo("") sink(f) print(val) @@ -261,3 +261,9 @@ writeSexpToString <- function(obj) { `swank:debugger-info-for-emacs` <- function(io, sldbState, from, to) { debuggerInfoForEmacs(sldbState, from=from, to=to) } + +`swank:invoke-nth-restart-for-emacs` <- function(io, sldbState, level, n) { + if(sldbState$level == level) { + invokeRestart(computeRestarts()[[n+1]]) + } +}