Skip to content

Commit

Permalink
Add namespace_loads_from_file_load().
Browse files Browse the repository at this point in the history
git-svn-id: https://svn.r-project.org/R/trunk@87717 00db46b3-68df-0310-9c12-caf00c1e9a41
  • Loading branch information
hornik committed Feb 14, 2025
1 parent cb901a1 commit 69e84f0
Showing 1 changed file with 43 additions and 0 deletions.
43 changes: 43 additions & 0 deletions src/library/tools/R/utils.R
Original file line number Diff line number Diff line change
Expand Up @@ -2878,6 +2878,49 @@ function(ch, default = TRUE, logical = TRUE, otherwise = default, n = 2L)
ch
}

### **

namespace_loads_from_file_load <-
function(f, verbose = FALSE)
{
if(verbose) message(sprintf("processing %s", f))

fun <- local({
make_namespace_load_tracer <- function() {
local({
.packages <- character()
.nframes <- integer()
function(p, n) {
.packages <<- c(.packages, p)
.nframes <<- c(.nframes, n)
}
})
}
trace_namespace_loads <- function(expr, tracer) {
..namespace_load_tracer <- tracer
suppressMessages({
trace(base::loadNamespace,
function() {
pkg <- as.character(parent.frame()$package)
dynGet("..namespace_load_tracer")(pkg[[1L]],
sys.nframe())
},
print = FALSE)
})
on.exit(suppressMessages(untrace(base::loadNamespace)))
expr
}
function(file) {
tracer <- make_namespace_load_tracer()
tmpenv <- new.env()
trace_namespace_loads(load(file, tmpenv), tracer)
with(environment(tracer),
.packages[.nframes == min(.nframes)])
}
})

R(fun, list(f))
}

### Local variables: ***
### mode: outline-minor ***
Expand Down

0 comments on commit 69e84f0

Please sign in to comment.