Christophe Weblog Wiki Code Publications Music
fix compilation of x[y,]
[swankr.git] / swank.R
diff --git a/swank.R b/swank.R
index 59686299ec29b887d015e7d9c4fee76b8fe6ba04..757e2430752b00ce87724f82ccfbd0d6dfbb5dbe 100644 (file)
--- a/swank.R
+++ b/swank.R
@@ -345,7 +345,7 @@ sendReplResultFunction <- sendReplResult
 }
 
 `swank:autodoc` <- function(slimeConnection, sldbState, rawForm, ...) {
-  "No Arglist Information"
+  list("No Arglist Information", TRUE)
 }
 
 `swank:operator-arglist` <- function(slimeConnection, sldbState, op, package) {
@@ -514,6 +514,17 @@ computeRestartsForEmacs <- function (sldbState) {
                     ifelse(x[3]==1, x[6]+colOffset-1, x[6]))))
   }
   transformSrcrefs <- function(s) {
+    ## horrendous KLUDGE: we need to short-circuit here for "name"
+    ## objects, rather than having a nice uniform behaviour, because
+    ## for expressions of the form x[y,] there is an empty "name"
+    ## which ends up becoming a `missing' object when passed through
+    ## the switch; why, I do not know, but it is then impossible to
+    ## return it, because returning it attempts to evaluate it and
+    ## evaluating it is an error.  Fortunately it appears that names
+    ## don't have srcrefs attached.
+    if(mode(s) == "name") {
+      return(s)
+    }
     srcrefs <- attr(s, "srcref")
     attribs <- attributes(s)
     new <-