### latest version of the GNU General Public Licence is available at
### <http://www.gnu.org/licenses/gpl.txt>.
+### KLUDGE: this assumes that we're being sourced with chdir=TRUE.
+### (If not, `swank:swank-require` will work under the circumstances
+### that it used to work anyway -- i.e. the working directory is the
+### swankr directory)
+swankrPath <- getwd()
+
swank <- function(port=4005) {
acceptConnections(port, FALSE)
}
startSwank <- function(portFile) {
- acceptConnections(FALSE, portFile)
+ acceptConnections(4005, portFile)
}
acceptConnections <- function(port, portFile) {
+ if(portFile != FALSE) {
+ f <- file(portFile, open="w+")
+ cat(port, file=f)
+ close(f)
+ }
s <- socketConnection(host="localhost", server=TRUE, port=port, open="r+b")
on.exit(close(s))
serve(s)
`swank:swank-require` <- function (slimeConnection, sldbState, contribs) {
for(contrib in contribs) {
- filename <- sprintf("%s.R", as.character(contrib))
+ filename <- sprintf("%s/%s.R", swankrPath, as.character(contrib))
if(file.exists(filename)) {
source(filename)
}
list(output, prin1ToString(value))
}
+`swank:interactive-eval-region` <- function(slimeConnection, sldbState, string) {
+ withRetryRestart("retry SLIME interactive evaluation request",
+ value <- eval(parse(text=string), envir=globalenv()))
+ prin1ToString(value)
+}
+
`swank:find-definitions-for-emacs` <- function(slimeConnection, sldbState, string) {
if(exists(string, envir = globalenv())) {
thing <- get(string, envir = globalenv())
}
`swank:load-file` <- function(slimeConnection, sldbState, filename) {
- source(filename, local=FALSE)
+ source(filename, local=FALSE, keep.source=TRUE)
TRUE
}
`swank:compile-file-for-emacs` <- function(slimeConnection, sldbState, filename, loadp, ...) {
- times <- system.time(parse(filename))
+ times <- system.time(parse(filename, srcfile=srcfile(filename)))
+ if(loadp) {
+ ## KLUDGE: inelegant, but works. It might be more in the spirit
+ ## of things to keep the result of the parse above around to
+ ## evaluate.
+ `swank:load-file`(slimeConnection, sldbState, filename)
+ }
list(quote(`:compilation-result`), list(), TRUE, times[3], substitute(loadp), filename)
}