printToString <- function(val) {
f <- fifo("")
- sink(f)
- print(val)
- sink()
- readLines(f)
+ tryCatch({ sink(f); print(val); sink(); readLines(f) },
+ finally=close(f))
}
`swank:connection-info` <- function (io, sldbState) {
"No Arglist Information"
}
+`swank:operator-arglist` <- function(io, sldbState, op, package) {
+ list()
+}
+
`swank:throw-to-toplevel` <- function(io, sldbState) {
condition <- simpleCondition("Throw to toplevel")
class(condition) <- c("swankTopLevel", class(condition))
quote(`:value`), paste(printToString(eval(parse(text=name), envir=frame)), sep="", collapse="\n")) }),
list())
}
+
+`swank:simple-completions` <- function(io, sldbState, prefix, package) {
+ ## fails multiply if prefix contains regexp metacharacters
+ matches <- apropos(sprintf("^%s", prefix), ignore.case=FALSE)
+ nmatches <- length(matches)
+ if(nmatches == 0) {
+ list(list(), "")
+ } else {
+ longest <- matches[order(nchar(matches))][1]
+ while(length(grep(sprintf("^%s", longest), matches)) < nmatches) {
+ longest <- substr(longest, 1, nchar(longest)-1)
+ }
+ list(as.list(matches), longest)
+ }
+}
+
+`swank:compile-string-for-emacs` <- function(io, sldbState, string, buffer, position, filename, policy) {
+ # FIXME: I think in parse() here we can use srcref to associate
+ # buffer/filename/position to the objects. Or something.
+ withRestarts({ times <- system.time(eval(parse(text=string), envir = globalenv())) },
+ abort="abort compilation")
+ list(quote(`:compilation-result`), list(), TRUE, times[3])
+}