20.3 Application: reimplementing source()
What do we need?
- Read the file being sourced.
- Parse its expressions (quote them?)
- Evaluate each expression saving the results
- Return the results
source2 <- function(path, env = caller_env()) {
file <- paste(readLines(path, warn = FALSE), collapse = "\n")
exprs <- parse_exprs(file)
res <- NULL
for (i in seq_along(exprs)) {
res <- eval(exprs[[i]], env)
}
invisible(res)
}
The real source is much more complex.