Christophe Weblog Wiki Code Publications Music
deal with 0 or multiple expressions at the repl
[swankr.git] / swank.R
diff --git a/swank.R b/swank.R
index 11210e28d415f6f102899b4e9b672d0b352453c4..b5c79c78204695667f421bbceb3b3e83664971c1 100644 (file)
--- a/swank.R
+++ b/swank.R
@@ -324,11 +324,15 @@ sendReplResultFunction <- sendReplResult
 `swank:listener-eval` <- function(slimeConnection, sldbState, string) {
   ## O how ugly
   string <- gsub("#\\.\\(swank:lookup-presented-object-or-lose([^)]*)\\)", ".(`swank:lookup-presented-object-or-lose`(slimeConnection, sldbState,\\1))", string)
-  expr <- parse(text=string)[[1]]
-  ## O maybe this is even uglier
-  lookedup <- do.call("bquote", list(expr))
-  value <- eval(lookedup, envir = globalenv())
-  sendReplResultFunction(slimeConnection, value)
+  for(expr in parse(text=string)) {
+    expr <- expr
+    ## O maybe this is even uglier
+    lookedup <- do.call("bquote", list(expr))
+    tmp <- withVisible(eval(lookedup, envir = globalenv()))
+    if(tmp$visible) {
+      sendReplResultFunction(slimeConnection, tmp$value)
+    }
+  }
   list()
 }
 
@@ -492,23 +496,35 @@ withRetryRestart <- function(description, expr) {
 
 `swank:interactive-eval` <-  function(slimeConnection, sldbState, string) {
   withRetryRestart("retry SLIME interactive evaluation request",
-                   value <- eval(parse(text=string), envir=globalenv()))
-  prin1ToString(value)
+                   tmp <- withVisible(eval(parse(text=string), envir=globalenv())))
+  if(tmp$visible) {
+    prin1ToString(tmp$value)
+  } else {
+    "# invisible value"
+  }
 }
 
 `swank:eval-and-grab-output` <- function(slimeConnection, sldbState, string) {
   withRetryRestart("retry SLIME interactive evaluation request",
                    { output <-
-                       capture.output(value <- eval(parse(text=string),
-                                                    envir=globalenv())) })
+                       capture.output(tmp <- withVisible(eval(parse(text=string),
+                                                              envir=globalenv()))) })
   output <- paste(output, sep="", collapse="\n")
-  list(output, prin1ToString(value))
+  if(tmp$visible) {
+    list(output, prin1ToString(value))
+  } else {
+    list(output, "# invisible value")
+  }
 }
 
 `swank:interactive-eval-region` <- function(slimeConnection, sldbState, string) {
   withRetryRestart("retry SLIME interactive evaluation request",
-                   value <- eval(parse(text=string), envir=globalenv()))
-  prin1ToString(value)
+                   tmp <- withVisible(eval(parse(text=string), envir=globalenv())))
+  if(tmp$visible) {
+    prin1ToString(value)
+  } else {
+    "# invisible value"
+  }
 }
 
 `swank:find-definitions-for-emacs` <- function(slimeConnection, sldbState, string) {