DISABLE FDs (REMOVE ME).
[jackhill/mal.git] / bbc-basic / env.bas
CommitLineData
49c172c0 1REM > env library for mal in BBC BASIC
dbe45187 2
1204264c
BH
3DEF FNnew_env(outer%, binds%, exprs%)
4 LOCAL env%
5 env% = FNalloc_environment(outer%)
6 WHILE NOT FNis_empty(binds%)
f14770fc 7 IF FNunbox_symbol(FNfirst(binds%)) = "&" THEN
b716a56a 8 PROCenv_set(env%, FNnth(binds%, 1), FNas_list(exprs%))
0e159177
BH
9 binds% = FNempty
10 ELSE
f14770fc
BH
11 PROCenv_set(env%, FNfirst(binds%), FNfirst(exprs%))
12 binds% = FNrest(binds%) : exprs% = FNrest(exprs%)
0e159177 13 ENDIF
1204264c
BH
14 ENDWHILE
15=env%
16
dbe45187
BH
17DEF PROCenv_set(env%, keysym%, val%)
18 LOCAL data%
19 data% = FNenvironment_data(env%)
c592ecd1 20 data% = FNhashmap_set(data%, FNunbox_symbol(keysym%), val%)
dbe45187
BH
21 PROCenvironment_set_data(env%, data%)
22ENDPROC
23
24DEF FNenv_find(env%, keysym%)
977bf5dd
BH
25 LOCAL val%, outer%, key$
26 key$ = FNunbox_symbol(keysym%)
0d91efff
BH
27 WHILE NOT FNis_nil(env%)
28 IF FNhashmap_contains(FNenvironment_data(env%), key$) THEN =env%
29 env% = FNenvironment_outer(env%)
30 ENDWHILE
31=FNnil
dbe45187
BH
32
33DEF FNenv_get(env%, keysym%)
f138a315 34 LOCAL key$
dbe45187 35 env% = FNenv_find(env%, keysym%)
f138a315 36 key$ = FNunbox_symbol(keysym%)
9bb18e99 37 IF FNis_nil(env%) THEN ERROR &40E80922, "'"+key$+"' not found"
f138a315 38=FNhashmap_get(FNenvironment_data(env%), key$)
dd3d5ad7
BH
39
40REM Local Variables:
41REM indent-tabs-mode: nil
42REM End: