1#' @useDynLib covr, .registration = TRUE 2replacement <- function(name, env = as.environment(-1), target_value = get(name, envir = env)) { 3 if (is.function(target_value) && !is.primitive(target_value)) { 4 if (is_vectorized(target_value)) { 5 new_value <- target_value 6 environment(new_value)$FUN <- trace_calls(environment(new_value)$FUN, name) 7 } else if (is.function(target_value) && inherits(target_value, "memoised")) { 8 new_value <- target_value 9 environment(new_value)$`_f` <- trace_calls(environment(new_value)$`_f`, name) 10 } else { 11 new_value <- trace_calls(target_value, name) 12 attributes(body(new_value)) <- attributes(body(target_value)) 13 } 14 attributes(new_value) <- attributes(target_value) 15 16 if (isS4(target_value)) { 17 new_value <- asS4(new_value) 18 } 19 20 list( 21 env = env, 22 name = as.name(name), 23 orig_value = .Call(covr_duplicate_, target_value), 24 target_value = target_value, 25 new_value = new_value 26 ) 27 } 28} 29 30replace <- function(replacement) { 31 .Call(covr_reassign_function, replacement$name, replacement$env, replacement$target_value, replacement$new_value) 32} 33 34reset <- function(replacement) { 35 .Call(covr_reassign_function, replacement$name, replacement$env, replacement$target_value, replacement$orig_value) 36} 37