X-Git-Url: http://christophe.rhodes.io/gitweb/?p=swankr.git;a=blobdiff_plain;f=swank.R;h=3ab65ee02f1228d8b2c3423b41d33647f0fe4457;hp=cb13210f87e9badfd929d49e9cfdec3dea25564a;hb=8d84cee073ab58c2c858a6aac994a4f88d91ddb4;hpb=a1e0693d3c4f21f3ad4b298a6b114dcb7c8770f8 diff --git a/swank.R b/swank.R index cb13210..3ab65ee 100644 --- a/swank.R +++ b/swank.R @@ -475,9 +475,12 @@ resetInspector <- function(slimeConnection) { } 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)) { @@ -488,7 +491,7 @@ inspectObject <- function(slimeConnection, object) { 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)) } @@ -516,7 +519,7 @@ prepareRange <- function(istate, start, end) { assignIndexInParts <- function(object, istate) { ret <- 1+length(istate$parts) - istate$parts <- c(istate$parts, object) + istate$parts <- c(istate$parts, list(object)) ret } @@ -536,7 +539,51 @@ emacsInspect.list <- function(list) { 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()) + } +}