Rev 47197 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
# File src/library/base/R/autoload.R# Part of the R package, http://www.R-project.org## 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# http://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 <- NULLif (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 promiseinvisible()}autoloader <- function (name, package, ...){name <- paste(name, "", sep = "")rm(list = name, envir = .AutoloadEnv, inherits = FALSE)m <- match.call()m$name <- NULLm[[1L]] <- as.name("library")## load the packageeval(m, .GlobalEnv)## reset the autoloaderautoload(name, package, reset = TRUE, ...)## reevaluate the objectwhere <- match(paste("package", package, sep = ":"), search())if (exists(name, where = where, inherits = FALSE))eval(as.name(name), as.environment(where))elsestop(gettextf("autoloader did not find '%s' in '%s'", name, package),domain = NA)}