Christophe Weblog Wiki Code Publications Music
factor out backtraceForEmacs() into `swank:backtrace`
authorChristophe Rhodes <csr21@cantab.net>
Wed, 25 Aug 2010 17:14:19 +0000 (18:14 +0100)
committerChristophe Rhodes <csr21@cantab.net>
Wed, 25 Aug 2010 17:14:19 +0000 (18:14 +0100)
write `swank:debugger-info-for-emacs` out, and hence delete
debuggerInfoForEmacs().

Now wandering past the --more-- prompt in sldb gives an infinite
sequence of NULLs, but at least it's not a cascade of errors any more.

swank.R

diff --git a/swank.R b/swank.R
index 18269449e914970f099c240fc916ead34f11c159..0684ab071366fca918bd5541c5aa2ed6e76f5b46 100644 (file)
--- a/swank.R
+++ b/swank.R
@@ -65,7 +65,7 @@ makeSldbState <- function(condition, level, id) {
 
 sldbLoop <- function(io, sldbState, id) {
   tryCatch({
-    sendToEmacs(io, c(list(quote(`:debug`), id, sldbState$level), debuggerInfoForEmacs(sldbState)))
+    sendToEmacs(io, c(list(quote(`:debug`), id, sldbState$level), `swank:debugger-info-for-emacs`(io, sldbState)))
     sendToEmacs(io, list(quote(`:debug-activate`), id, sldbState$level, FALSE))
     while(TRUE) {
       dispatch(io, readPacket(io), sldbState)
@@ -73,29 +73,6 @@ sldbLoop <- function(io, sldbState, id) {
   }, finally=sendToEmacs(io, c(list(quote(`:debug-return`), id, sldbState$level, FALSE))))
 }
 
-debuggerInfoForEmacs <- function(sldbState, from=0, to=NULL) {
-  backtraceForEmacs <- function() {
-    calls <- sldbState$calls
-    if(is.null(to)) to <- length(calls)
-    from <- from+1
-    calls <- lapply(calls[from:to], { frameNumber <- from-1;
-                             function (x) { ret <- list(frameNumber, paste(format(x), sep="", collapse=" ")); frameNumber <<- 1+frameNumber; ret }})
-  }
-  computeRestartsForEmacs <- function () {
-    lapply(sldbState$restarts,
-           function(x) {
-             ## this is all a little bit internalsy
-             restartName <- x[[1]][[1]]
-             description <- restartDescription(x)
-             list(restartName, if(is.null(description)) restartName else description)
-           })
-  }
-  list(list(as.character(sldbState$condition), sprintf("  [%s]", class(sldbState$condition)[[1]]), FALSE),
-       computeRestartsForEmacs(),
-       backtraceForEmacs(),
-       list(sldbState$id))
-}
-
 readPacket <- function(io) {
   header <- readChunk(io, 6)
   len <- strtoi(header, base=16)
@@ -270,8 +247,35 @@ printToString <- function(val) {
   signalCondition(condition)
 }
 
-`swank:debugger-info-for-emacs` <- function(io, sldbState, from, to) {
-  debuggerInfoForEmacs(sldbState, from=from, to=to)
+`swank:backtrace` <- function(io, sldbState, from=0, to=NULL) {
+  calls <- sldbState$calls
+  if(is.null(to)) to <- length(calls)
+  from <- from+1
+  calls <- lapply(calls[from:to],
+                  { frameNumber <- from-1;
+                    function (x) {
+                      ret <- list(frameNumber, paste(format(x), sep="", collapse=" "))
+                      frameNumber <<- 1+frameNumber
+                      ret
+                    }
+                  })
+}
+
+computeRestartsForEmacs <- function (sldbState) {
+  lapply(sldbState$restarts,
+         function(x) {
+           ## this is all a little bit internalsy
+           restartName <- x[[1]][[1]]
+           description <- restartDescription(x)
+           list(restartName, if(is.null(description)) restartName else description)
+         })
+}
+
+`swank:debugger-info-for-emacs` <- function(io, sldbState, from=0, to=NULL) {
+  list(list(as.character(sldbState$condition), sprintf("  [%s]", class(sldbState$condition)[[1]]), FALSE),
+       computeRestartsForEmacs(sldbState),
+       `swank:backtrace`(io, sldbState, from, to),
+       list(sldbState$id))
 }
 
 `swank:invoke-nth-restart-for-emacs` <- function(io, sldbState, level, n) {