1 % outer binds exprs -> env_new -> new_env
2 /env_new
{ 3 dict begin
4 /exprs
exch dup _sequential?
{ /data get
}{ pop [ ] } ifelse def
5 /binds
exch dup _sequential?
{ /data get
}{ pop [ ] } ifelse def
9 0 1 binds length
1 sub {
11 binds idx get
(&) eq
{ %if &
12 binds idx
1 add get
% key
13 exprs idx exprs length idx
sub getinterval
% value
23 % env key -> env_find -> env
24 % env key -> env_find -> null
25 /env_find
{ 2 dict begin
28 env key known
{ %if key in env
30 }{ env
/__outer__ get null ne
{ %elseif __outer__ not null
31 env
/__outer__ get key env_find
37 % env key val -> env_set -> val
39 dup 4 1 roll % stack: val env key val
44 dup 3 1 roll % stack: key env key
45 env_find
% stack: key env/null
48 (') exch % stack: (') key
51 concatenate concatenate