| # File src/library/base/R/autoload.R |
| # Part of the R package, https://www.R-project.org |
| # |
| # Copyright (C) 1995-2012 The R Core Team |
| # |
| # This program is free software; you can redistribute it and/or modify |
| # it under the terms of the GNU General Public License as published by |
| # the Free Software Foundation; either version 2 of the License, or |
| # (at your option) any later version. |
| # |
| # This program is distributed in the hope that it will be useful, |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| # GNU General Public License for more details. |
| # |
| # A copy of the GNU General Public License is available at |
| # https://www.R-project.org/Licenses/ |
| |
| autoload <- function(name, package, reset=FALSE, ...) |
| { |
| if (!reset && exists(name, envir = .GlobalEnv, inherits = FALSE)) |
| stop("an object with that name already exists") |
| m <- match.call() |
| m[[1L]] <- as.name("list") |
| newcall <- eval(m, parent.frame()) |
| newcall <- as.call(c(as.name("autoloader"), newcall)) |
| newcall$reset <- NULL |
| if (is.na(match(package, .Autoloaded))) |
| assign(".Autoloaded", c(package, .Autoloaded), envir =.AutoloadEnv) |
| do.call("delayedAssign", list(name, newcall, .GlobalEnv, .AutoloadEnv)) |
| ## no longer return the result, which is a promise |
| invisible() |
| } |
| |
| autoloader <- function (name, package, ...) |
| { |
| name <- paste0(name, "") |
| rm(list = name, envir = .AutoloadEnv, inherits = FALSE) |
| m <- match.call() |
| m$name <- NULL |
| m[[1L]] <- as.name("library") |
| ## load the package |
| eval(m, .GlobalEnv) |
| ## reset the autoloader |
| autoload(name, package, reset = TRUE, ...) |
| ## reevaluate the object |
| where <- match(paste0("package:", package), search()) |
| if (exists(name, where = where, inherits = FALSE)) |
| eval(as.name(name), as.environment(where)) |
| else |
| stop(gettextf("autoloader did not find '%s' in '%s'", name, package), |
| domain = NA) |
| } |