}
inspectObject <- function(slimeConnection, object) {
- slimeConnection$istate <- list(object=object, previous=slimeConnection$istate)
+ previous <- slimeConnection$istate
+ slimeConnection$istate <- new.env()
+ slimeConnection$istate$object <- object
+ slimeConnection$istate$previous <- previous
slimeConnection$istate$content <- emacsInspect(object)
- if(!object %in% slimeConnection$inspectorHistory) {
+ if(!(object %in% slimeConnection$inspectorHistory)) {
slimeConnection$inspectorHistory <- c(slimeConnection$inspectorHistory, object)
}
if(!is.null(slimeConnection$istate$previous)) {
valuePart <- function(istate, object, string) {
list(quote(`:value`),
- if(is.null(string)) printToString(object) else string,
+ if(is.null(string)) paste(printToString(object),collapse=" ") else string,
assignIndexInParts(object, istate))
}
assignIndexInParts <- function(object, istate) {
ret <- 1+length(istate$parts)
- istate$parts <- c(istate$parts, object)
+ istate$parts <- c(istate$parts, list(object))
ret
}
names(list), list))
}
+emacsInspect.numeric <- function(numeric) {
+ c(list("a numeric", list(quote(`:newline`))),
+ mapply(function(name, value) { list(list(quote(`:line`), name, value)) },
+ (1:length(numeric)), numeric))
+}
+
+`swank:quit-inspector` <- function(slimeConnection, sldbState) {
+ resetInspector(slimeConnection)
+ FALSE
+}
+
+`swank:inspector-nth-part` <- function(slimeConnection, sldbState, index) {
+ slimeConnection$istate$parts[[index]]
+}
+
+`swank:inspect-nth-part` <- function(slimeConnection, sldbState, index) {
+ 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())
+ }
+}