Commit | Line | Data |
---|---|---|
4d1456b9 JM |
1 | ..env.. <- TRUE |
2 | ||
3 | if(!exists("..types..")) source("types.r") | |
4 | ||
01feedfe JM |
5 | new.Env <- function(outer=emptyenv(), binds=list(), exprs=list()) { |
6 | e <- structure(new.env(parent=outer), class="Env") | |
7 | ||
8 | if (length(binds) > 0) { | |
9 | for(i in seq(length(binds))) { | |
c30efef4 | 10 | b <- binds[[i]] |
01feedfe | 11 | if (b == "&") { |
c30efef4 | 12 | e[[binds[[i+1]]]] <- |
01feedfe JM |
13 | slice(exprs, i, length(exprs)) |
14 | break | |
15 | } else { | |
16 | e[[b]] <- exprs[[i]] | |
17 | } | |
18 | } | |
19 | } | |
20 | e | |
4d1456b9 JM |
21 | } |
22 | ||
23 | Env.find <- function(e, key) { | |
4d1456b9 JM |
24 | if (exists(key, envir=e, inherits=FALSE)) { |
25 | e | |
26 | } else if (!identical(parent.env(e), emptyenv())) { | |
27 | Env.find(parent.env(e), key) | |
28 | } else { | |
01feedfe | 29 | nil |
4d1456b9 JM |
30 | } |
31 | } | |
32 | ||
33 | Env.set <- function(e, key, val) { | |
4d1456b9 JM |
34 | e[[key]] <- val |
35 | invisible(val) | |
36 | } | |
37 | ||
38 | Env.get <- function(e, key) { | |
4d1456b9 | 39 | e <- Env.find(e, key) |
01feedfe | 40 | if (.nil_q(e)) throw(concat("'", key, "' not found")) |
4d1456b9 JM |
41 | e[[key]] |
42 | } |