Christophe Weblog Wiki Code Publications Music
return stack frames in slime's order (most recent first)
[swankr.git] / swank.R
diff --git a/swank.R b/swank.R
index 802b0409e49543ff3a7372128d26168aab26f6ed..c6a1ec2f0e0afe13d7e90a3910370bbb3dfe49ef 100644 (file)
--- 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]])
+  }
+}