Christophe Weblog Wiki Code Publications Music
implement a default method for emacsInspect
[swankr.git] / swank.R
diff --git a/swank.R b/swank.R
index d72103fc309fc33c57b5c9cd0ca13f4eaa60ac36..7ec3deab6d34d496c21f42a7dfa9013737aac619 100644 (file)
--- a/swank.R
+++ b/swank.R
@@ -533,6 +533,10 @@ emacsInspect <- function(object) {
   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)) },
@@ -558,3 +562,32 @@ emacsInspect.numeric <- function(numeric) {
   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())
+  }
+}