aboutsummaryrefslogtreecommitdiff
path: root/forth/env.fs
diff options
context:
space:
mode:
Diffstat (limited to 'forth/env.fs')
-rw-r--r--forth/env.fs17
1 files changed, 5 insertions, 12 deletions
diff --git a/forth/env.fs b/forth/env.fs
index 1b5a362..9469bf2 100644
--- a/forth/env.fs
+++ b/forth/env.fs
@@ -15,25 +15,18 @@ deftype MalEnv
key val env MalEnv/data @ assoc
env MalEnv/data ! ;
-: env/find { key env -- env-or-0 }
+: env/get-addr { key env -- val-addr }
env
begin ( env )
- dup 0 key rot MalEnv/data @ get ( env val-or-0 )
- 0= if ( env )
+ key over MalEnv/data @ MalMap/get-addr ( env addr-or-0 )
+ ?dup 0= if ( env )
MalEnv/outer @ dup 0= ( env-or-0 done-looping? )
- else
- -1 \ found it! ( env -1 )
+ else ( env addr )
+ nip -1 \ found it! ( addr -1 )
endif
until ;
MalEnv
- extend get { not-found key env -- }
- key env env/find ( env-or-0 )
- ?dup 0= if
- not-found
- else ( env )
- not-found key rot MalEnv/data @ get
- endif ;;
extend pr-buf { env }
env MalEnv/data @ pr-buf
a-space s" outer: " str-append