Christophe Weblog Wiki Code Publications Music
less debugging output cruft in `swank:frame-locals-and-catch-tags`
[swankr.git] / swank.R
diff --git a/swank.R b/swank.R
index c0adff899a9a8b895f06cf692d53a21cf0b9c6ed..f0aee27babe75b918535f5a6efdae9264d70e78e 100644 (file)
--- a/swank.R
+++ b/swank.R
@@ -245,17 +245,13 @@ writeSexpToString <- function(obj) {
   writeSexpToStringLoop(obj)
 }
 
-withOutputToString <- function(expr) {
-  call <- substitute(expr)
-  f <- fifo("")
-  sink(f)
-  tryCatch({ tryCatch(eval.parent(call), finally=sink())
-             readLines(f) },
-           finally=close(f))
+prin1ToString <- function(val) {
+  paste(deparse(val, backtick=TRUE, control=c("delayPromises", "keepNA")),
+        sep="", collapse="\n")
 }
 
 printToString <- function(val) {
-  withOutputToString(str(val, indent.str="", list.len=5, max.level=2))
+  paste(capture.output(print(val)), sep="", collapse="\n")
 }
 
 `swank:connection-info` <- function (slimeConnection, sldbState) {
@@ -282,7 +278,7 @@ printToString <- function(val) {
 
 makeReplResult <- function(value) {
   string <- printToString(value)
-  list(quote(`:write-string`), paste(string, collapse="\n"),
+  list(quote(`:write-string`), string,
        quote(`:repl-result`))
 }
 
@@ -381,12 +377,11 @@ computeRestartsForEmacs <- function (sldbState) {
 }
 
 `swank:frame-locals-and-catch-tags` <- function(slimeConnection, sldbState, index) {
-  str(sldbState$frames)
   frame <- sldbState$frames[[1+index]]
   objs <- ls(envir=frame)
   list(lapply(objs, function(name) { list(quote(`:name`), name,
                                           quote(`:id`), 0,
-                                          quote(`:value`), paste(printToString(eval(parse(text=name), envir=frame)), sep="", collapse="\n")) }),
+                                          quote(`:value`), printToString(eval(parse(text=name), envir=frame))) }),
        list())
 }
 
@@ -427,15 +422,16 @@ withRetryRestart <- function(description, expr) {
 `swank:interactive-eval` <-  function(slimeConnection, sldbState, string) {
   withRetryRestart("retry SLIME interactive evaluation request",
                    value <- eval(parse(text=string), envir=globalenv()))
-  printToString(value)
+  prin1ToString(value)
 }
 
 `swank:eval-and-grab-output` <- function(slimeConnection, sldbState, string) {
   withRetryRestart("retry SLIME interactive evaluation request",
                    { output <-
-                       withOutputToString(value <- eval(parse(text=string),
-                                                        envir=globalenv())) })
-  list(output, printToString(value))
+                       capture.output(value <- eval(parse(text=string),
+                                                    envir=globalenv())) })
+  output <- paste(output, sep="", collapse="\n")
+  list(output, prin1ToString(value))
 }
 
 `swank:find-definitions-for-emacs` <- function(slimeConnection, sldbState, string) {
@@ -503,7 +499,7 @@ inspectObject <- function(slimeConnection, object) {
 
 valuePart <- function(istate, object, string) {
   list(quote(`:value`),
-       if(is.null(string)) paste(printToString(object),collapse=" ") else string,
+       if(is.null(string)) printToString(object) else string,
        assignIndexInParts(object, istate))
 }
 
@@ -616,3 +612,22 @@ emacsInspect.numeric <- function(numeric) {
   object <- get(name, envir=frame)
   inspectObject(slimeConnection, object)
 }
+
+`swank:default-directory` <- function(slimeConnection, sldbState) {
+  getwd()
+}
+
+`swank:set-default-directory` <- function(slimeConnection, sldbState, directory) {
+  setwd(directory)
+  `swank:default-directory`(slimeConnection, sldbState)
+}
+
+`swank:load-file` <- function(slimeConnection, sldbState, filename) {
+  source(filename, local=FALSE)
+  TRUE
+}
+
+`swank:compile-file-for-emacs` <- function(slimeConnection, sldbState, filename, loadp, ...) {
+  times <- system.time(parse(filename))
+  list(quote(`:compilation-result`), list(), TRUE, times[3], substitute(loadp), filename)
+}