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) {
list("R", "R")
}
-sendReplResult <- function(slimeConnection, value) {
+makeReplResult <- function(value) {
string <- printToString(value)
- sendToEmacs(slimeConnection,
- list(quote(`:write-string`),
- paste(string, collapse="\n"),
- quote(`:repl-result`)))
+ list(quote(`:write-string`), string,
+ quote(`:repl-result`))
+}
+
+makeReplResultFunction <- makeReplResult
+
+sendReplResult <- function(slimeConnection, value) {
+ result <- makeReplResultFunction(value)
+ sendToEmacs(slimeConnection, result)
}
sendReplResultFunction <- sendReplResult
FALSE
}
+`swank:eval-string-in-frame` <- function(slimeConnection, sldbState, string, index) {
+ frame <- sldbState$frames[[1+index]]
+ withRetryRestart("retry SLIME interactive evaluation request",
+ value <- eval(parse(text=string), envir=frame))
+ printToString(value)
+}
+
`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())
}
`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) {
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))
}
UseMethod("emacsInspect")
}
+emacsInspect.default <- function(thing) {
+ c(list(paste("a ", class(thing)[[1]], sep=""), list(quote(`:newline`))))
+}
+
emacsInspect.list <- function(list) {
c(list("a list", list(quote(`:newline`))),
mapply(function(name, value) { list(list(quote(`:line`), name, value)) },
object <- `swank:inspector-nth-part`(slimeConnection, sldbState, index)
inspectObject(slimeConnection, object)
}
+
+`swank:inspector-pop` <- function(slimeConnection, sldbState) {
+ if(!is.null(slimeConnection$istate$previous)) {
+ slimeConnection$istate <- slimeConnection$istate$previous
+ istateToElisp(slimeConnection$istate)
+ } else {
+ FALSE
+ }
+}
+
+`swank:inspector-next` <- function(slimeConnection, sldbState) {
+ if(!is.null(slimeConnection$istate$`next`)) {
+ slimeConnection$istate <- slimeConnection$istate$`next`
+ istateToElisp(slimeConnection$istate)
+ } else {
+ FALSE
+ }
+}
+
+`swank:inspector-eval` <- function(slimeConnection, sldbState, string) {
+ expr <- parse(text=string)[[1]]
+ object <- slimeConnection$istate$object
+ if(inherits(object, "list")|inherits(object, "environment")) {
+ substituted <- substituteDirect(expr, object)
+ eval(substituted, envir=globalenv())
+ } else {
+ eval(expr, envir=globalenv())
+ }
+}
+
+`swank:inspect-current-condition` <- function(slimeConnection, sldbState) {
+ resetInspector(slimeConnection)
+ inspectObject(slimeConnection, sldbState$condition)
+}
+
+`swank:inspect-frame-var` <- function(slimeConnection, sldbState, frame, var) {
+ resetInspector(slimeConnection)
+ frame <- sldbState$frames[[1+frame]]
+ name <- ls(envir=frame)[[1+var]]
+ 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)
+}