diff options
| author | Joel Martin <github@martintribe.org> | 2015-02-24 09:16:20 -0600 |
|---|---|---|
| committer | Joel Martin <github@martintribe.org> | 2015-02-24 09:16:20 -0600 |
| commit | ff26ebdb816da07b28b29073868994fc7eabf8d1 (patch) | |
| tree | ee0e08f5226525cb4885512e07ae53c30f185990 /forth/env.fs | |
| parent | 2a42d8274072c44dd2d83762cc27cd810f5b8452 (diff) | |
| parent | a631063f3fa2eaed473369b376a5499df92209bd (diff) | |
| download | mal-ff26ebdb816da07b28b29073868994fc7eabf8d1.tar.gz mal-ff26ebdb816da07b28b29073868994fc7eabf8d1.zip | |
Merge pull request #8 from Chouser/forth3
Forth: Interop and perf updates
Diffstat (limited to 'forth/env.fs')
| -rw-r--r-- | forth/env.fs | 17 |
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 |
