X-Git-Url: http://christophe.rhodes.io/gitweb/?p=swankr.git;a=blobdiff_plain;f=swank.R;h=1c1633d77ad8c7aa7fa8a709eb3a3bcd02e57e10;hp=f3a85ccc6a8b0d770b9273180bb179e717fc736d;hb=5035036a7da09e17a5a70ea7ea15657d671e9c52;hpb=19a4e9d454ec87e4374c5e92d69b47c7548fb5af diff --git a/swank.R b/swank.R index f3a85cc..1c1633d 100644 --- a/swank.R +++ b/swank.R @@ -262,6 +262,10 @@ printToString <- function(val) { "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)) @@ -291,3 +295,26 @@ printToString <- function(val) { 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]) +}