Skip to content

Commit bb1ab11

Browse files
committed
fix cache for expression and tidyup
1 parent 78396d6 commit bb1ab11

File tree

2 files changed

+14
-24
lines changed

2 files changed

+14
-24
lines changed

R/qenv-eval_code.R

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -24,30 +24,13 @@
2424
#' q <- eval_code(q, quote(library(checkmate)))
2525
#' q <- eval_code(q, expression(assert_number(a)))
2626
#'
27-
#' @aliases eval_code,qenv,character-method
28-
#' @aliases eval_code,qenv,language-method
29-
#' @aliases eval_code,qenv,expression-method
30-
#' @aliases eval_code,qenv.error,ANY-method
27+
#' @aliases eval_code,qenv-method
3128
#'
3229
#' @export
3330
setGeneric("eval_code", function(object, code, cache = FALSE, ...) standardGeneric("eval_code"))
3431

3532
setMethod("eval_code", signature = c(object = "qenv"), function(object, code, cache = FALSE, ...) {
3633
code <- .preprocess_code(code) # preprocess code to ensure it is a character vector
37-
srcref <- attr(code, "wholeSrcref")
38-
if (is.expression(code) && length(srcref) == 0L) {
39-
result <- Reduce(function(u, v) {
40-
if (inherits(v, "=") && identical(typeof(v), "language")) {
41-
# typeof(`=`) is language, but it doesn't dispatch on it, so we need to
42-
# explicitly pass it as first class of the object
43-
class(v) <- unique(c("language", class(v)))
44-
}
45-
.eval_code(u, v, cache = FALSE, ...)
46-
}, init = object, x = code)
47-
return(result)
48-
} else if (is.expression(code)) {
49-
code <- paste(attr(code, "wholeSrcref"), collapse = "\n")
50-
}
5134
.eval_code(object = object, code = code, cache = cache, ...)
5235
})
5336

@@ -117,7 +100,17 @@ setMethod("eval_code", signature = c(object = "qenv.error"), function(object, co
117100
}
118101

119102
setGeneric(".preprocess_code", function(code) standardGeneric(".preprocess_code"))
120-
setMethod(".preprocess_code", signature = c("ANY"), function(code) as.character(code))
103+
setMethod(".preprocess_code", signature = c("ANY"), function(code) paste(code, collapse = "\n"))
121104
setMethod(".preprocess_code", signature = c("language"), function(code) {
122-
paste(vapply(lang2calls(code), deparse1, collapse = "\n", character(1L)))
105+
paste(
106+
vapply(lang2calls(code), deparse1, collapse = "\n", character(1L)),
107+
collapse = "\n"
108+
)
109+
})
110+
setMethod(".preprocess_code", signature = c("expression"), function(code) {
111+
if (length(attr(code, "wholeSrcref")) == 0L) {
112+
paste(lang2calls(code), collapse = "\n")
113+
} else {
114+
paste(attr(code, "wholeSrcref"), collapse = "\n")
115+
}
123116
})

man/eval_code.Rd

Lines changed: 1 addition & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)